[HCP Terraform]pre-written Sentinel policies for AWS(FSBP)を使ってPolicy Setを作成してみた(sentinel.hclファイル作成パターン)
FSBPに対応したPre-written Sentinelポリシーが公開されました。
以前のブログではポリシーの利用方法として、直接ポリシーライブラリのGitHubリポジトリに接続する方法を紹介しました。(Using the Public GitHub Repository)
この方法は、簡単な設定ですべてのポリシーを有効化できます。
一方実運用では、ポリシーによっては無効化したりすることがあると思います。
今回はポリシー毎に有効・無効をコントロールできる方法をご紹介します。(Terraform Registry Method)
ポリシー設定ファイルの作成(sentinel.hcl)
[Terraformレジストリ](Terraform Registry)に
アクセスします。
Policies
に移動し必要なポリシーを選択します。
今回は、以下のポリシーを選択しました。
- EC2 VPC Flow Logging Enabled(EC2.6)
- Amazon EC2 instances should not have a public IPv4 address (EC2.9)
ちなみに、どのSecurityHubコントロールと対応しているかは、Terraform Registry上からはPolicy Results(Fail)
のメッセージから確認できました。
Code Snippetが表示されるため、Copy Code Snippet
を選択してコピーします。
ポリシー用に新規作成したリポジトリまたは、既存のリポジトリにsentinel.hcl
という名前で保存します。
policy "ec2-instance-should-not-have-public-ip" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy/ec2-instance-should-not-have-public-ip.sentinel?checksum=sha256:14261273828ea26ed043bf97bd7fa4617770d181b0890812014f719f065aeab8"
enforcement_level = "advisory"
}
policy "ec2-vpc-flow-logging-enabled" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy/ec2-vpc-flow-logging-enabled.sentinel?checksum=sha256:42f2c8ae190e793a0b9fef9ed027faab91e31ac3288cfdb103ec34dffcb22c24"
enforcement_level = "advisory"
}
module "report" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy-module/report.sentinel?checksum=sha256:1f414f31c2d6f7e4c3f61b2bc7c25079ea9d5dd985d865c01ce9470152fa696d"
}
module "tfresources" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy-module/tfresources.sentinel?checksum=sha256:ae40fe0173a1d6203c5c062045432d46beb6397a769d65189d1ec80228ef2161"
}
module "tfplan-functions" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy-module/tfplan-functions.sentinel?checksum=sha256:e7f04948ec53d7c01ff26829c1ef7079fb072ed5074483f94dd3d00ae5bb67b3"
}
module "tfconfig-functions" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy-module/tfconfig-functions.sentinel?checksum=sha256:ee1c5baf3c2f6b032ea348ce38f0a93d54b6e5337bade1386fffb185e2599b5b"
}
4つのmodule
の部分は、ポリシーチェックに必要な定型文という認識で一旦大丈夫です。
policy
部分についてです。
source
部分のURLにアクセスすると、Policyの内容が確認できます。
enforcement_level
は、以下3つのいずれかを設定できます。
- advisory: 警告のみ。ポリシーが失敗してもApply可能。
- soft-mandatory: ポリシーが失敗時にApplyできない。結果を上書きして、Apply可能。
- hard-mandatory: ポリシー失敗時にApplyできない。(上書き不可)
Enforcement Levels | Sentinel | HashiCorp Developer
デフォルトは、advisory
が設定されます。
これはポリシー毎に設定可能です。
例えば、重要度 Highのものはhard-mandatory
Mediumはsoft-mandatory
のように重要度毎にレベルを分けることが可能です。
今回は、ec2-instance-should-not-have-public-ip
をsoft-mandatory
に変更してみました。
policy "ec2-instance-should-not-have-public-ip" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy/ec2-instance-should-not-have-public-ip.sentinel?checksum=sha256:14261273828ea26ed043bf97bd7fa4617770d181b0890812014f719f065aeab8"
+ enforcement_level = "soft-mandatory"
- enforcement_level = "advisory"
}
policy "ec2-vpc-flow-logging-enabled" {
source = "https://registry.terraform.io/v2/policies/hashicorp/FSBP-Policy-Set-for-AWS-Terraform/1.0.2/policy/ec2-vpc-flow-logging-enabled.sentinel?checksum=sha256:42f2c8ae190e793a0b9fef9ed027faab91e31ac3288cfdb103ec34dffcb22c24"
enforcement_level = "advisory"
}
Policy Setの作成
HCP TerraformでPolicy Setを作成します。
Settings
-> Policy Sets
-> Connect a new policy set
の順に選択します。
Version control provider(VCS)
を選択します。
Policy Setの名前や適用範囲・実行方法を指定できます。
適用範囲はOrganizations全体 or Project・Workspaceを選択する形で設定できます。
特定のWorkspaceを適用から除外することも可能です。(Project単位の除外は、2025/6時点では不可)
接続先のVCSレポジトリを設定します。このリポジトリには、sentinel.hcl
が含まれている必要があります。
sentinel.hcl
がリポジトリのルート以外にある場合は、パスを指定します。(私の環境では、sentinel-pre-written-fsbp/sentinel.hcl
となっています。)
Parametersは今回は使わないため、設定なしでConnect policy set
を選択します。
これでPolicy Setの作成は完了です。
動作確認
ポリシーを適用したProject内のWorkspaceでRunを行いました。
soft-mandatory
にしたec2-instance-should-not-have-public-ip
でポリシーチェックが失敗していますね。
advisory
でec2-vpc-flow-logging-enabled
がでていることも確認できました。
soft-mandatory
を設定しているため、下の方にPolicy Override
が表示されています。
Override & continue
を選べば、Applyが可能です。
ポリシーチェック失敗時にApply不可にするには、ポリシーの適用レベルでhard-mandatory
を設定します。
おわりに
Pre-written Sentinelポリシーを使って、自分でsentinel.hcl
ファイルを書いてポリシーを適用してみました。
以下の流れでポリシーを適用できます。
- Terraform Registryからポリシーを選択(コピペでOK)
- sentinel.hclを作成してVCSに保存(必要に応じて、ポリシーの適用レベルを変更)
- HCP TerraformでPolicy Setを作成して、Workspaceに適用
Pre-writtenのようにPolicyライブラリで公開されているポリシーを使う分には設定ファイルはコピペで作れれます。利用するのに、Sentinelの知識はほぼ不要です。
「ポリシーの利用って意外と簡単そう」と思っていただけたら幸いです。
以上、AWS事業本部の佐藤(@chari7311)でした。