-
タグ
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR
さらに詳しく知るにはこちら
Terraform(テラフォーム)マルチクラウドのプロビジョニングを行うHashiCorp社のTerraformには、無償のOSS版と、チームや組織のガバナンスやコンプライアンスを実現する有償版のTerraform Cloud及びEnterpriseがあります。今回は有償版のメリットと、有償版でのみ利用できる機能「Sentinel」についてご紹介します。
なお、この記事はセキュリティガバナンスの観点からTerraformが企業にもたらすメリットを書いたHashiCorpブログを、同社の許可を得て日本語訳したものです。
さらに詳しく知るにはこちら
Terraform(テラフォーム)Terraform Cloud及びEnterpriseってどんなもの?
AWSのS3バケットに対する誤ったセキュリティ設定が原因で、情報漏えいしてしまうことがあります。AWSがS3のセキュリティベストプラクティスを公開して数年が経つにも関わらず、未だに情報漏えいが発生しニュースになっています。これは、Amazon S3管理コンソールで作成するS3バケットには人的ミスが起こり得るからです。
HashiCorpのTerraformは、Infrastructure as Code※1の理念に基づき人的ミスを回避します。
Terraform Cloud及びEnterpriseはSentinel※2を使用して、プロビジョニングしたリソースを企業のセキュリティや運用の要件に合致させることでガバナンスを実現します。
※1 Infrastructure as Code:インフラの構成管理をコードで行うこと。インフラ構築プロセスの自動化やインフラ環境の再現性の担保、及びコンポーネントの再利用といったメリットがある。
※2 Sentinel:HashiCorp社が提供するOSS。有償版のTerraformにプラグインとして組み込まれ、インフラ環境を構築時に、指定したルールに基づくリソースの作成かどうかを検証する機能を持つ。
Terraform Cloud及びEnterpriseは、セキュアで信頼できる"Infrastructure as Code"のパイプラインです。このパイプラインには、組織のセキュリティや運用ガイドラインに従ってリソースを作成するためのガードレールが設置されています。下の図は、この理念を表したものです。
Terraform Cloud及びEnterpriseの使い方
それではこれから、Terraform Cloud及びEnterpriseの使い方をご紹介します。今回は、AWS S3のプロビジョニングプロセスを統制し、Terraformが作成する全てのS3バケットがAWSの公開するS3のセキュリティベストプラクティスに準拠することが目的です。
準備するもの
- Terraform CloudまたはEnterpriseのアカウント。アカウントをお持ちでない方は、こちらからTerraform Cloudのトライアルアカウントを申請することができます。
- S3バケットをプロビジョニングするためのAWSアカウント。(S3バケットのプロビジョニング自体は無償です。)
- GitHubアカウント
手順
- Terraform Cloudの無料アカウントを取得した後は、organization、VCS接続設定、S3用テストコードの配置するためのVCSリポジトリ、そしてリポジトリに紐づくAWSの認証情報を登録したworkspaceを作成します。
- トライアルプランを開始します。プランにはTerraform Cloudのガバナンスが含まれ、上記手順で作成したorganizationの"Plan and Billing"画面から確認することができます。
- 3."policy set"を選択して、こちらのリポジトリをフォークした後に、ポリシーを適用するworkspaceを選択します。
Terraform CloudまたはTerraform EnterpriseのorganizationがVCSリポジトリに接続するための手順は、こちらをご参照ください。
なお、フォークしたリポジトリのsentinel.hclを編集して、適用するポリシーや適用レベルを選択することもできます。
- 4.workspaceでPlanまたはRunを実行して、結果を確認します。
下記Terraformコードを実行した場合:
resource "aws_s3_bucket" "bucket-public-read-write-acl" {
bucket = "bucket-public-read-write-acl"
acl = "public-read-write"
tags = {
owner = "yulei"
}
}
結果:
詳細な説明
上記の例では、パブリックな読み書き権限を含む適切なACLを設定したAWS S3バケットを作成しようとしました。planを実行した時に、Terraform Cloudはポリシーチェックを実行するための決められたアウトプットをSentinelに送信しました。今回用意したpolicy setの設定ファイル及びsentinel.hclでは、7つのポリシーをsoft-mandatoryに指定しました。
policy "allow-s3-private-only" {
enforcement_level = "soft-mandatory"
}
policy "disallow-s3-acl-public-read-write" {
enforcement_level = "soft-mandatory"
}
policy "disallow-s3-acl-public-read" {
enforcement_level = "soft-mandatory"
}
policy "enforce-s3-versioning-mfa-delete-enabled-true" {
enforcement_level = "soft-mandatory"
}
policy "enforce-s3-versioning-enabled-true" {
enforcement_level = "soft-mandatory"
}
policy "enforce-s3-server-side-encryption-enabled-true" {
enforcement_level = "soft-mandatory"
}
policy "enforce-s3-logging-true" {
enforcement_level = "soft-mandatory"
}
新規作成または更新するリソースは、planをapplyする前にチェックされます。この予防的な動作は、リソースを作成した後にポリシーに反するものを見つけ出すよりも優れています。
ここからは、disallow-s3-acl-public-read-write.sentinelというポリシーを詳しく見ていきましょう。
mport "tfplan/v2" as tfplan
この記述は、planの出力データを格納するTerraform Sentinel tfplan/v2 importを、ポリシーで利用するためのものです。
//find all aws_s3_bucket that has acl="public-read-write"
violatingS3Buckets = filter tfplan.resource_changes as _, rc {
rc.type is "aws_s3_bucket" and
rc.mode is "managed" and
(rc.change.actions contains "create" or rc.change.actions
contains "update") and
rc.change.after.acl in ["public-read-write"]
}
"filter"を記述して、planで参照する全てのリソースから、リソースのサブセットを探します。上記の例では、新規作成または更新する全ての"aws_s3_bucket"リソースのうち、ACLプロパティで明示的に"パブリックの読み書き権限"を指定するものを探します。
//print out address for non-compliant bucket
for violatingS3Buckets as address, bucket {
print(address + "'s acl is : " + bucket.change.after.acl + ",
this is not compliant.")
}
そして、上記のforループで、S3バケットポリシーに反する全てのアドレスを出力します。
main = rule {
length(violatingS3Buckets) == 0
}
最後の記述では、S3バケットポリシーに反するリソースの数が0であることをmainルールで検証し、許可するか否かを決定します。
この例は、単純ですが強力です。このブログに掲載する全てのコード及び例はこちらのリポジトリから参照できます。自由にご利用いただけるので、これを使ってS3バケットの安全性を高めてください。
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- もっと見る +
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR