Slide 1

Slide 1 text

Guard を利⽤した AWS Config ルール 1 2024.6.12 yhana

Slide 2

Slide 2 text

• AWS Config ルールの概要 • Guard で作成する AWS Config ルール • Guard の評価ルール作成の役⽴ち情報 2 今⽇話すこと

Slide 3

Slide 3 text

3 AWS Config ルール

Slide 4

Slide 4 text

4 AWS Config サービスの⼀機能であり、 AWS リソースの設定が指定したルールに準拠しているかどうかを確認できる AWS Config ルールの概要

Slide 5

Slide 5 text

5 AWS が提供している Config ルールの例 AWS Security Hub の裏では Config ルールが利⽤されている AWS Config ルールの概要 ルール名 ルールの確認内容 iam-user-mfa-enable IAM ユーザーの MFA が設定されているか vpc-flow-logs-enabled VPC フローログが有効化されているか ec2-ebs-encryption-by-default EBS 暗号化がデフォルトで有効になっているか cloudtrail-enabled AWS CloudTrail 証跡が有効になっているか

Slide 6

Slide 6 text

6 AWS Config ルールの種類 AWS Config ルールの概要 種別 評価ルールの作成⼿段 補⾜説明 マネージドルール AWS による管理 マネージドルールのリスト カスタムルール AWS Lambda 最も柔軟な評価が可能 AWS CloudFormation Guard ドメイン固有⾔語(Domain Specific Language) 今⽇の話

Slide 7

Slide 7 text

7 Guard で作成する AWS Config ルール

Slide 8

Slide 8 text

8 AWS CloudFormation Guard はオープンソースの ドメイン固有⾔語 (DSL : Domain Specific Language) と CLI AWS CloudFormation Guard という名前の通り、 CloudFormation テンプレートのポリシーのチェックに利⽤可能 2022 年 8 ⽉に Config ルールが Guard に対応 AWS CloudFormation Guard を使⽤した AWS Config ルールの作成 AWS CloudFormation Guard の概要

Slide 9

Slide 9 text

9 AWS Lambda より簡易な記載で評価ルールの作成が可能 VPC が「デフォルト VPC でないこと」を確認する評価ルール デフォルト VPC であることを⽰すパラメータが false であることを確認 「no_default_vpc」はルール名であり、任意の命名が可能 AWS CloudFormation Guard の概要 rule no_default_vpc { configuration.isDefault == false }

Slide 10

Slide 10 text

10 AWS Config レコーダーで取得している設定情報を評価する AWS CloudFormation Guard の概要 AWS Config が取得している VPC の設定情報 rule no_default_vpc { configuration.isDefault == false } 評価が True (is.Default == false) であれば、準拠 評価が False (is.Default != false) であれば、⾮準拠

Slide 11

Slide 11 text

11 評価ルールを直接指定 2024.6.10 時点では ランタイムバージョンは単⼀ デバッグログの有効化により 評価詳細を CloudWatch Logs に出⼒ Guard を利⽤した Config ルール作成の設定画⾯

Slide 12

Slide 12 text

12 「変更範囲」の設定から 対象リソースを指定 VPC だけ確認するために 「AWS EC2 VPC」を選択 Guard を利⽤した Config ルール作成の設定画⾯

Slide 13

Slide 13 text

13 評価結果と CloudWatch Logs に出⼒されるログ AWS CloudFormation Guard の概要 ConfigRuleId: config-rule-g54mba, ResourceType: AWS::EC2::VPC, ResourceId: vpc-08fb9b456e5d5ede6 { "not_compliant": { "no_default_vpc": [ { "rule": "no_default_vpc", "path": "/configuration/isDefault", "provided": true, "expected": false, "comparison": { "operator": "Eq", "not_operator_exists": false }, "message": "" } ] }, "not_applicable": [], "compliant": [] } ConfigRuleId: config-rule-g54mba, ResourceType: AWS::EC2::VPC, ResourceId: vpc-0adcdeb95ec11d011 { "not_compliant": {}, "not_applicable": [], "compliant": [ "no_default_vpc" ] }

Slide 14

Slide 14 text

14 評価ルールの例

Slide 15

Slide 15 text

15 複数の条件を組み合わせる例 「デフォルト VPC ではない」かつ「Internet Gateway 割り当てなし」で準拠 評価ルールの例 - 1 rule vpc_check { configuration.isDefault == false relationships[*].resourceType != "AWS::EC2::InternetGateway" }

Slide 16

Slide 16 text

16 複数の条件を組み合わせる例 「デフォルト VPC ではない」かつ「Internet Gateway 割り当てなし」で準拠 評価ルールの例 - 1 rule vpc_check { configuration.isDefault == false relationships[*].resourceType != "AWS::EC2::InternetGateway" } 複数のルールブロックを記載した場合は暗黙の AND 評価で最終的な評価が決定

Slide 17

Slide 17 text

17 複数の条件を組み合わせる場合の評価 評価ルールの例 - 1 check-1 check-2 check-1 and check-2 (暗黙の AND 評価) rule check-1 rule check-2 when check-1 もし check-1 が「true」なら check2 (check-1 を再利⽤) check-1 or check-2 check-1 or check-2 (OR 評価は明⽰的に記載)

Slide 18

Slide 18 text

18 評価ルールの例 - 1 rule vpc_check { configuration.isDefault == false relationships[*].resourceType != "AWS::EC2::InternetGateway" } AWS::EC2::InternetGateway 評価 AWS::EC2::InternetGateway 評価 AWS::EC2::InternetGateway 評価 AWS::EC2::InternetGateway 評価 AWS::EC2::InternetGateway 評価 配列の評価のイメージ

Slide 19

Slide 19 text

19 名前が prd から始まる S3 バケットのバージョニングが有効か確認したい場合 上記の記載でも評価はできるが、prd から始まらないバケットも表⽰される 評価ルールの例 - 2 rule s3_check { resourceId == /^prd-.*$/ supplementaryConfiguration.BucketVersioningConfiguration.status == "Enabled" }

Slide 20

Slide 20 text

20 ちょっとしたテクニックとして、 マネジメントコンソールに表⽰される評価結果のリソースを絞る例 評価ルールの例 - 2 let resource_name = resourceId rule s3_check when %resource_name == /^prd-.*$/ { supplementaryConfiguration.BucketVersioningConfiguration.status == "Enabled" }

Slide 21

Slide 21 text

21 評価結果には PASS/FAIL の他に SKIP が存在 評価結果が SKIP のリソースはマネジメントコンソール上では表⽰されない 名前が prd から始まらないバケットの評価イメージ 評価ルールの例 - 2 let resource_name = resourceId rule s3_check when %resource_name == /^prd-.*$/ { supplementaryConfiguration.BucketVersioningConfiguration.status == "Enabled" } バケット名が prd から始まらない場合に評価結果は SKIP となり、 マネジメントコンソールの評価結果には表⽰されない

Slide 22

Slide 22 text

22 評価結果には PASS/FAIL の他に SKIP が存在 評価結果が SKIP のリソースはマネジメントコンソールに表⽰されない 名前が prd から始まるバケットの評価イメージ 評価ルールの例 - 2 let resource_name = resourceId rule s3_check when %resource_name == /^prd-.*$/ { supplementaryConfiguration.BucketVersioningConfiguration.status == "Enabled" } バケット名が prd から始まる場合はルールブロック内が評価され、 PASS/FAIL のいずれかの評価でマネジメントコンソールに表⽰される

Slide 23

Slide 23 text

23 Guard の評価ルール作成の役⽴ち情報

Slide 24

Slide 24 text

24 Guard の⽂法に関するドキュメント GitHub cloudformation-guard/docs at main · aws-cloudformation/cloudformation-guard AWSユーザーガイド Getting started with AWS CloudFormation Guard - AWS CloudFormation Guard AWS Config の設定情報のスキーマ GitHub aws-config-resource-schema/config/properties/resource-types at master · awslabs/aws- config-resource-schema 評価ルールを作成する際に役⽴つ資料

Slide 25

Slide 25 text

25 VPC リソースのスキーマ 評価ルールを作成する際に役⽴つ資料 aws-config-resource-schema/config/properties/resource-types/AWS::EC2::VPC.properties.json at master · awslabs/aws- config-resource-schema

Slide 26

Slide 26 text

26 サンプルプログラム(CloudFormation テンプレートが対象) GitHub cloudformation-guard/guard-examples at main · aws-cloudformation/cloudformation-guard 評価ルールを作成する際に役⽴つ資料

Slide 27

Slide 27 text

27 ローカルで単位テストが可能(AWS CloudFormation Guard の単体テスト機能を試してみた) 単体テストに必要なもの #1 : Guard ルールのファイル #2 : 単体テストのファイル ローカル環境のテスト rule no_default_vpc { configuration.isDefault == false } --- - name: MyTest input: expectations: rules: no_default_vpc: FAIL #1 check_default_vpc.guard #2 check_default_vpc_test.yaml AWS Config の設定情報を記載(または転記)

Slide 28

Slide 28 text

28 期待は⾮準拠、結果も⾮準拠のテスト結果 期待は準拠、結果は⾮準拠のテスト結果 ローカル環境のテスト $ cfn-guard test --rules-file check_default_vpc.guard --test-data check_default_vpc_test.yaml Test Case #1 Name: "MyTest" PASS Rules: no_default_vpc: Expected = FAIL % cfn-guard test --rules-file check_default_vpc.guard --test-data check_default_vpc_test.yaml Test Case #1 Name: "MyTest" FAIL Rules: no_default_vpc: Expected = PASS, Evaluated = [FAIL]

Slide 29

Slide 29 text

29 さいごに

Slide 30

Slide 30 text

30 Guard を利⽤した Config ルールの簡単な例と関連情報を紹介 まずは Security Hub や AWS 管理のマネージドルールの利⽤を推奨 1. Security Hub で実現できるか 2. マネージドルールで実現できるか 3. カスタムルール(Guard)で実現できるか 4. カスタムルール(Lambda)で実現 Guard が適さない例 - AWS Config レコーダーが対応していないリソース - 複雑な処理が必要な評価 さいごに

Slide 31

Slide 31 text

31