Slide 1

Slide 1 text

AWS Config 勉強会 2022.10.17 AWS事業本部 コンサルティング部 yhana

Slide 2

Slide 2 text

2 もくじ 1. AWS CloudTrail と AWS Config の違い 2. AWS Config ルール 3. AWS Config のマルチアカウント管理 4. AWS CloudFormation Guard を⽤いたカスタムルール AWS Config の 基本的な内容

Slide 3

Slide 3 text

3 AWS CloudTrail と AWS Config の違い

Slide 4

Slide 4 text

4 AWS CloudTrail のログ ユーザーの操作は API を通じて実⾏される Amazon VPC API AWS CLI AWS Management Console AWS SDKs

Slide 5

Slide 5 text

5 AWS CloudTrail のログ ユーザーの操作は API を通じて実⾏される AWS CloudTrail のログは API イベントを記録 Amazon VPC API AWS CLI AWS Management Console AWS SDKs

Slide 6

Slide 6 text

6 AWS CloudTrail のログ AWS CloudTrail のログ - CreateVpc (1/4) 「誰が」 「いつ」 「何を」

Slide 7

Slide 7 text

7 AWS CloudTrail のログ AWS CloudTrail のログ - CreateVpc (2/4) APIのリクエストパラメータ

Slide 8

Slide 8 text

8 AWS CloudTrail のログ AWS CloudTrail のログ - CreateVpc (3/4) APIの応答内容

Slide 9

Slide 9 text

9 AWS CloudTrail のログ AWS CloudTrail のログ - CreateVpc (4/4)

Slide 10

Slide 10 text

10 API リファレンス API リファレンスの公開場所 AWS Documentation Amazon VPC の API リファレンス Amazon VPC API リファレンス

Slide 11

Slide 11 text

11 AWS Config の Snapshot AWS Config のログは、AWS リソースの設定情報(Snapshot) Amazon VPC API AWS Config のログはリソースの設定情報(Snapshot) AWS CLI AWS Management Console AWS SDKs

Slide 12

Slide 12 text

12 AWS Config の Snapshot Amazon VPC の Snapshot – AWS EC2 VPC 1/2 関連付けされているリソース (ネットワークACL、SG、ルートテーブル)

Slide 13

Slide 13 text

13 AWS Config の Snapshot Amazon VPC の Snapshot – AWS EC2 VPC 2/2 設定情報(Configuration) 設定が変更された場合は Configuration が更新される

Slide 14

Slide 14 text

14 AWS Config の Snapshot AWS Config の Snapshot は定期的または設定変更トリガーで作成される API API API Snapshot Amazon VPC AWS Config 作成 設定変更 削除 Snapshot Snapshot Management Console

Slide 15

Slide 15 text

15 AWS Config の Snapshot AWS Config の Snapshot は定期的または設定変更トリガーで作成される API API API Snapshot Amazon VPC AWS Config 作成 設定変更 削除 Snapshot Snapshot Management Console タイムライン機能で確認できる

Slide 16

Slide 16 text

16 AWS Config のタイムライン機能 ライムライン機能は時系列で設定情報の変更を確認できる test-user test-user test-user

Slide 17

Slide 17 text

17 AWS Config のタイムライン表⽰ test-user 設定変更の詳細

Slide 18

Slide 18 text

18 AWS Config のタイムライン表⽰ 設定変更の内容(IPv6 CIDR 追加)

Slide 19

Slide 19 text

19 タイムライン機能を利⽤した解析 タイムライン機能を利⽤した解析の流れの⼀例 1.AWS Config のタイムラインで障害の原因となった設定変更を調べる 2.設定変更を⾏った API イベントを CloudTrail ログからを調べる 3.CloudTrail ログから Principal (IAM ユーザー、IAM ロールなど) を特定 4.(必要に応じて)設定変更者にヒアリング 5.対処

Slide 20

Slide 20 text

20 AWS Config ルール

Slide 21

Slide 21 text

21 AWS Config ルールとは AWS リソースの「設定情報」を評価する機能 評価基準に従い、 設定情報を評価(準拠 or ⾮準拠)を⾏う 例えば、IPv6を利⽤していないかなど

Slide 22

Slide 22 text

22 AWS Config ルールとは AWS Configルールの種類 種別 評価の実現⽅法 補⾜説明 マネージドルール -(AWSによって管理) マネージドルールのリスト カスタムルール AWS Lambda 最も柔軟な評価ができる AWS CloudFormation Guard ドメイン固有⾔語(Domain Specific Language) What is AWS CloudFormation Guard? 後で詳しく

Slide 23

Slide 23 text

23 AWS Config ルールとは マネージドルールの例 [Tips] AWS Security Hub の評価は AWS Config ルールを利⽤ ルール名 説明 approved-amis-by-id 実⾏中のインスタンスで指定された AMI が使⽤されているかどう かを確認 ec2-instance-no-public-ip EC2 インスタンスにパブリック IP の関連付けがあるかどうかを確 認 restricted-ssh セキュリティグループの受信 SSHトラフィックの IP アドレスが制 限されているか

Slide 24

Slide 24 text

24 AWS Config ルールとは Config ルールの評価結果画⾯(ルール⼀覧)

Slide 25

Slide 25 text

25 AWS Config ルールとは Config ルールの評価結果画⾯(1つのルールの評価)

Slide 26

Slide 26 text

26 AWS Config のマルチアカウント管理

Slide 27

Slide 27 text

27 AWS Config のマルチアカウント管理 マルチアカウントで管理する対象 集約対象 ⽬的 集約⽅法 Snapshot 監査など 集約アカウントの S3 に保管 AWS Configルールの評価結果 AWS環境チェック AWS Config アグリゲータ機能で集約

Slide 28

Slide 28 text

28 AWS Config のマルチアカウント管理 構成例

Slide 29

Slide 29 text

29 アグリゲータ設定後のルール評価結果の確認 各アカウントの評価結果を⼀元管理できる

Slide 30

Slide 30 text

30 AWS Organizations における Config ルールの⼀括設定 AWS Organizations 環境では組織内のアカウントに対して Config ルールを 管理アカウントまたは委任先アカウントから⼀括で設定できる https://dev.classmethod.jp/articl es/deploy-config-rules-in- organization-member-account/ https://dev.classmethod.jp/articl es/deploy-aws-config-custom- rule-across-an-organization/

Slide 31

Slide 31 text

31 AWS CloudFormation Guard を⽤いた カスタムルール

Slide 32

Slide 32 text

32 AWS CloudFormation Guard とは AWS CloudFormation Guard は オープンソースのドメイン固有⾔語 (DSL : Domain Specific Language) 始めは CloudFormation テンプレートのポリシールールを記述するための機能 AWS CloudFormation Guard 2.1 の⼀般提供が開始 2022年8⽉に Config ルールにも対応したことを発表 AWS CloudFormation Guard を使⽤した AWS Config ルールの作成

Slide 33

Slide 33 text

33 AWS CloudFormation Guard によるチェック CloudFormation Guard で Config の Snapshot を評価するルールを記載する rule vpc_dhcp_option_check { configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" } DHCPオプションセットの値をチェック

Slide 34

Slide 34 text

34 AWS CloudFormation Guard 関連ドキュメント ⽂法に関するドキュメント GitHub cloudformation-guard/docs at main · aws-cloudformation/cloudformation-guard AWSユーザーガイド Getting started with AWS CloudFormation Guard - AWS CloudFormation Guard サンプルプログラム(CloudFormationテンプレートが対象) GitHub cloudformation-guard/guard-examples at main · aws- cloudformation/cloudformation-guard

Slide 35

Slide 35 text

35 Config カスタムルール作成の流れ カスタムルール作成の流れ 1.評価対象の設定項⽬(Snapshot)の把握 2.評価対象の抽出 3.評価ルールの作成 4.テスト(ローカル環境) 5.Configルールの設定

Slide 36

Slide 36 text

36 1.評価対象の設定項⽬の把握

Slide 37

Slide 37 text

37 評価対象の設定項⽬(Snapshot)の把握 評価対象のリソースの Snapshot を確認する(AWS CLI でも可能)

Slide 38

Slide 38 text

38 評価対象の設定項⽬(Snapshot)の把握 まずは設定項⽬から評価できる対象を把握する 関連リソースを 評価したい場合 設定内容を 評価したい場合

Slide 39

Slide 39 text

39 2.評価対象の抽出

Slide 40

Slide 40 text

40 評価対象の抽出 評価対象を抽出(単独の項⽬) configuration.dhcpOptionsId ドット区切りで設定項⽬を指定

Slide 41

Slide 41 text

41 評価対象の抽出 評価対象を抽出(配列) Relationships[*] ここから更にループ処理等で評価を⾏う

Slide 42

Slide 42 text

42 評価対象の抽出 評価対象を抽出(配列) Relationships[*].resourceType

Slide 43

Slide 43 text

43 評価対象の抽出 評価対象を抽出(配列) Relationships[resourceType == "AWS::EC2::SecurityGroup"]

Slide 44

Slide 44 text

44 評価対象の抽出 リソースの抽出⽅法の詳細はドキュメントを確認する cloudformation-guard/docs at main · aws-cloudformation/cloudformation-guard Defining queries and filtering - AWS CloudFormation Guard AWS CLI の query オプションで利⽤されている JMESPath とは異なる 例えば、JMESPath のように [2..4] のような指定はできない

Slide 45

Slide 45 text

45 3.評価ルールの作成

Slide 46

Slide 46 text

46 評価ルールを作成 評価対象と指定値を⽐較する configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" rule vpc_dhcp_option_check { configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" } ルールブロックを活⽤ ルールブロックにより ・ブロック内の複数の条件をカプセル化できる ・評価結果の再利⽤ができる ・デバッグログにルール名が残って分かりやすい 指定したIDに⼀致すれば 準拠

Slide 47

Slide 47 text

47 評価ルールを作成 ルールブロックを複数組み合わせる場合 詳細は⽂法ドキュメントを参照 https://github.com/aws-cloudformation/cloudformation-guard/blob/main/docs/CLAUSES.md Writing AWS CloudFormation Guard rules - AWS CloudFormation Guard rule check-1 rule check-2 check-1 and check-2 (暗黙の and 評価) rule check-1 rule check-2 when check-1 もし check-1 が「true」なら check2 (check-1 を再利⽤) rule check-1 or rule check-2 check-1 or check-2 (or 評価は明⽰的に記載)

Slide 48

Slide 48 text

48 評価ルールを作成 評価対象の値の存在を確認する configuration.ipv6CidrBlockAssociationSet empty rule vpc_ipv6_not_enabled { configuration.ipv6CidrBlockAssociationSet empty } ルールブロックを活⽤ 値が空の場合は 準拠

Slide 49

Slide 49 text

49 評価ルールを作成 利⽤できる演算⼦ 詳細は⽂法ドキュメントを参照 https://github.com/aws-cloudformation/cloudformation-guard/blob/main/docs/CLAUSES.md Writing AWS CloudFormation Guard rules - AWS CloudFormation Guard 単項演算⼦ 説明 exists 値が存在するか empty 空であるか is_string stringタイプかどうか is_list listタイプかどうか is_struct structタイプかどうか ! 否定(例︓!empty) ⼆項演算⼦ 説明 == Equal != Not Equal > Greater Than >= Greater Than Or Equal To < Less Than <= Less Than Or Equal To IN In a list of form [x, y, z]

Slide 50

Slide 50 text

50 評価ルールを作成 評価対象をループ処理で確認する let vpc_relationships = relationships[*] rule vpc_without_igw { %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" } InternetGateway の関連付けがなければ 準拠

Slide 51

Slide 51 text

51 評価ルールを作成 let で変数を定義、% で参照する 変数の利⽤例 - 絞り込んだ評価対象の設定項⽬の格納(上記の例) - 評価対象と⽐較する値の格納(例︓let resource_type = "AWS::EC2::InternetGateway") 変数名はスネークケースが推奨されている(アンダースコア区切り) let vpc_relationships = relationships[*] rule vpc_without_igw { %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" }

Slide 52

Slide 52 text

52 評価ルールを作成 配列に対しては暗黙のループ処理が⾏われる let vpc_relationships = relationships[*] rule vpc_without_igw { %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" } 配列内のすべての resourcesType が評価される

Slide 53

Slide 53 text

53 4.テスト

Slide 54

Slide 54 text

54 テスト機能 ローカルでテストできる「Unit Testing(単体テスト)」機能が提供されている Config ルールを設定して動作確認する前にローカル環境でテストできる Unit Testing に関するドキュメント cloudformation-guard/UNIT_TESTING.md at main · aws-cloudformation/cloudformation-guard Testing AWS CloudFormation Guard rules - AWS CloudFormation Guard テスト環境のインストール⽅法 https://github.com/aws-cloudformation/cloudformation-guard#installation Installing AWS CloudFormation Guard - AWS CloudFormation Guard

Slide 55

Slide 55 text

55 テスト機能 単体テストのために⽤意するファイル 1.AWS CloudFormation Guard ルールファイル 2.単体テストファイル(.json または .yaml) rule vpc_dhcp_option_check { configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" } --- - name: MyTest input: expectations: rules: vpc_dhcp_option_check: FAIL #1 vpc_dhcp_option_check.guard #2 vpc_dhcp_option_check_test.yaml AWS Config の評価したい Snapshot を yaml として転記 DHCPオプションセットが指定値かどうかを 確認(指定値と⼀致する場合は準拠) 1ファイルに複数のテストの記載も可能

Slide 56

Slide 56 text

56 テストの実⾏ テスト結果(期待は⾮準拠、結果も⾮準拠 = DHCPオプションセットが指定したIDと異なる) テスト結果(期待は⾮準拠、結果は準拠 = DHCPオプションセットが指定したIDと⼀致) $ cfn-guard test --rules-file vpc_dhcp_option_check.guard --test-data vpc_dhcp_option_check_test.yaml Test Case #1 Name: "MyTest" PASS Rules: vpc_dhcp_option_check: Expected = FAIL $ cfn-guard test --rules-file vpc_dhcp_option_check.guard --test-data vpc_dhcp_option_check_test.yaml Test Case #1 Name: "MyTest" FAIL Rules: vpc_dhcp_option_check: Expected = FAIL, Evaluated = [PASS]

Slide 57

Slide 57 text

57 テストの実⾏ --verbose / -v で詳細表⽰ $ cfn-guard test --rules-file vpc_dhcp_option_check.guard --test-data vpc_dhcp_option_check_test.yaml --verbose Test Case #1 Name: "MyTest" `- File(, Status=PASS)[Context=File(rules=1)] `- Rule(vpc_dhcp_option_check, Status=PASS)[Context=vpc_dhcp_option_check] `- GuardClauseBlock(Status = PASS)[Context=GuardAccessClause#block configuration.dhcpOptionsId EQUALS "dopt-0024732f85497bcd2"] `- GuardClauseValueCheck(Status=PASS)[Context= configuration.dhcpOptionsId EQUALS "dopt-0024732f85497bcd2"] FAIL Rules: vpc_dhcp_option_check: Expected = FAIL, Evaluated = [PASS]

Slide 58

Slide 58 text

58 テスト機能の関連ブログ 単体テストを試してみたブログ https://dev.classmethod.jp/ar ticles/aws-cloudformation- guard-unit-testing/

Slide 59

Slide 59 text

59 5.Config ルールの設定

Slide 60

Slide 60 text

60 Config ルールの設定 マネジメントコンソールの設定の流れ ルールタイプは Guard を選択

Slide 61

Slide 61 text

61 Config ルールの設定 名前とルールを⼊⼒、デバッグログ有効で CloudWatch Logs に出⼒

Slide 62

Slide 62 text

62 Config ルールの設定 今回の場合は、リソースとして評価対象の「AWS EC2 VPC」を選択 パラメータは未利⽤のため未⼊⼒

Slide 63

Slide 63 text

63 Config ルールの設定 評価結果の確認

Slide 64

Slide 64 text

64 デバッグログの確認 デバッグログ(CloudWatch Logs)の確認

Slide 65

Slide 65 text

65 デバッグログの確認 ConfigRuleId: config-rule-ne7dou, ResourceType: AWS::EC2::VPC, ResourceId: vpc-057355bebd0cc89b2 { "not_compliant": { "vpc_without_igw": [ { "rule": "vpc_without_igw", "path": "/relationships/7/resourceType", "provided": "AWS::EC2::InternetGateway", "expected": "AWS::EC2::InternetGateway", "comparison": { "operator": "Eq", "not_operator_exists": true }, "message": "" } ] }, "not_applicable": [], "compliant": [] } ConfigRuleId: config-rule-ne7dou, ResourceType: AWS::EC2::VPC, ResourceId: vpc-0636fc95b3cf20d33 { "not_compliant": {}, "not_applicable": [], "compliant": [ "vpc_without_igw" ] } ⾮準拠のログ 準拠のログ

Slide 66

Slide 66 text

66 Config ルールの設定⼿段 単独アカウントの主な設定⼿段 - マネジメントコンソール - AWS CLI - AWS CloudFormation(StackSetsで複数アカウントに展開可能) AWS Organizations の機能を⽤いた組織全体への展開 - AWS CLI(※1) - AWS CloudFormation(※2) ※1 設定⽅法は「AWS Config のマルチアカウント管理」で紹介しているブログを参照 ※2 CloudFormation Guard を利⽤したカスタムルールは現状未対応

Slide 67

Slide 67 text

67 補⾜情報

Slide 68

Slide 68 text

68 紹介できていないルールの記載⽅法 これまで紹介した以外に次のルールも記載可能 - 複数の rule ブロックを組み合わせたルール - ⼊⼒パラメータの利⽤ - 正規表現を⽤いた評価 上記の例はブログでも紹介 https://dev.classmethod.jp/articles/config-custom-rules-using-cloudformation-guard-for-vpc/

Slide 69

Slide 69 text

69 CloudFormation Guard で対応できないこと 1つの設定項⽬(Snapshot)に閉じない評価は AWS Lambda ルールを利⽤する できることの例 特定の Route Table がアタッチされているか (Route Table の ID をチェックする) できないことの例 評価対象の VPC にアタッチされている Route Table にインターネットへの経路があるか (アタッチされている Route Table のルート情報 を取得してチェックすることはできない) Route Table を評価対象として IGW のアタッチ があるかを確認することはできる VPCの設定項⽬の⼀部

Slide 70

Slide 70 text

70 さいごに Config ルールの導⼊の前に⼀度検討してみること 予防的ガードレール(利⽤制限)で対応できないかを始めに検討 - SCP (Service Control Policy) - IAM ポリシー 禁⽌まではしないがリスクとして把握しておきたいこと、 SCP では対応が難しい内容の確認、などの場合に Config ルールを活⽤

Slide 71

Slide 71 text

No content