Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Config勉強会

yhana
October 16, 2022

AWS Config勉強会

yhana

October 16, 2022
Tweet

More Decks by yhana

Other Decks in Technology

Transcript

  1. 2 もくじ 1. AWS CloudTrail と AWS Config の違い 2.

    AWS Config ルール 3. AWS Config のマルチアカウント管理 4. AWS CloudFormation Guard を⽤いたカスタムルール AWS Config の 基本的な内容
  2. 5 AWS CloudTrail のログ ユーザーの操作は API を通じて実⾏される AWS CloudTrail のログは

    API イベントを記録 Amazon VPC API AWS CLI AWS Management Console AWS SDKs
  3. 11 AWS Config の Snapshot AWS Config のログは、AWS リソースの設定情報(Snapshot) Amazon

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

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

    AWS EC2 VPC 2/2 設定情報(Configuration) 設定が変更された場合は Configuration が更新される
  6. 14 AWS Config の Snapshot AWS Config の Snapshot は定期的または設定変更トリガーで作成される

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

    API API API Snapshot Amazon VPC AWS Config 作成 設定変更 削除 Snapshot Snapshot Management Console タイムライン機能で確認できる
  8. 19 タイムライン機能を利⽤した解析 タイムライン機能を利⽤した解析の流れの⼀例 1.AWS Config のタイムラインで障害の原因となった設定変更を調べる 2.設定変更を⾏った API イベントを CloudTrail

    ログからを調べる 3.CloudTrail ログから Principal (IAM ユーザー、IAM ロールなど) を特定 4.(必要に応じて)設定変更者にヒアリング 5.対処
  9. 22 AWS Config ルールとは AWS Configルールの種類 種別 評価の実現⽅法 補⾜説明 マネージドルール

    -(AWSによって管理) マネージドルールのリスト カスタムルール AWS Lambda 最も柔軟な評価ができる AWS CloudFormation Guard ドメイン固有⾔語(Domain Specific Language) What is AWS CloudFormation Guard? 後で詳しく
  10. 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 アドレスが制 限されているか
  11. 27 AWS Config のマルチアカウント管理 マルチアカウントで管理する対象 集約対象 ⽬的 集約⽅法 Snapshot 監査など

    集約アカウントの S3 に保管 AWS Configルールの評価結果 AWS環境チェック AWS Config アグリゲータ機能で集約
  12. 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/
  13. 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 ルールの作成
  14. 33 AWS CloudFormation Guard によるチェック CloudFormation Guard で Config の

    Snapshot を評価するルールを記載する rule vpc_dhcp_option_check { configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" } DHCPオプションセットの値をチェック
  15. 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
  16. 44 評価対象の抽出 リソースの抽出⽅法の詳細はドキュメントを確認する cloudformation-guard/docs at main · aws-cloudformation/cloudformation-guard Defining queries

    and filtering - AWS CloudFormation Guard AWS CLI の query オプションで利⽤されている JMESPath とは異なる 例えば、JMESPath のように [2..4] のような指定はできない
  17. 46 評価ルールを作成 評価対象と指定値を⽐較する configuration.dhcpOptionsId == "dopt-0024732f85497bcd2" rule vpc_dhcp_option_check { configuration.dhcpOptionsId

    == "dopt-0024732f85497bcd2" } ルールブロックを活⽤ ルールブロックにより ・ブロック内の複数の条件をカプセル化できる ・評価結果の再利⽤ができる ・デバッグログにルール名が残って分かりやすい 指定したIDに⼀致すれば 準拠
  18. 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 評価は明⽰的に記載)
  19. 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]
  20. 50 評価ルールを作成 評価対象をループ処理で確認する let vpc_relationships = relationships[*] rule vpc_without_igw {

    %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" } InternetGateway の関連付けがなければ 準拠
  21. 51 評価ルールを作成 let で変数を定義、% で参照する 変数の利⽤例 - 絞り込んだ評価対象の設定項⽬の格納(上記の例) - 評価対象と⽐較する値の格納(例︓let

    resource_type = "AWS::EC2::InternetGateway") 変数名はスネークケースが推奨されている(アンダースコア区切り) let vpc_relationships = relationships[*] rule vpc_without_igw { %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" }
  22. 52 評価ルールを作成 配列に対しては暗黙のループ処理が⾏われる let vpc_relationships = relationships[*] rule vpc_without_igw {

    %vpc_relationships.resourceType != "AWS::EC2::InternetGateway" } 配列内のすべての resourcesType が評価される
  23. 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
  24. 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ファイルに複数のテストの記載も可能
  25. 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]
  26. 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]
  27. 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" ] } ⾮準拠のログ 準拠のログ
  28. 66 Config ルールの設定⼿段 単独アカウントの主な設定⼿段 - マネジメントコンソール - AWS CLI -

    AWS CloudFormation(StackSetsで複数アカウントに展開可能) AWS Organizations の機能を⽤いた組織全体への展開 - AWS CLI(※1) - AWS CloudFormation(※2) ※1 設定⽅法は「AWS Config のマルチアカウント管理」で紹介しているブログを参照 ※2 CloudFormation Guard を利⽤したカスタムルールは現状未対応
  29. 68 紹介できていないルールの記載⽅法 これまで紹介した以外に次のルールも記載可能 - 複数の rule ブロックを組み合わせたルール - ⼊⼒パラメータの利⽤ -

    正規表現を⽤いた評価 上記の例はブログでも紹介 https://dev.classmethod.jp/articles/config-custom-rules-using-cloudformation-guard-for-vpc/
  30. 69 CloudFormation Guard で対応できないこと 1つの設定項⽬(Snapshot)に閉じない評価は AWS Lambda ルールを利⽤する できることの例 特定の

    Route Table がアタッチされているか (Route Table の ID をチェックする) できないことの例 評価対象の VPC にアタッチされている Route Table にインターネットへの経路があるか (アタッチされている Route Table のルート情報 を取得してチェックすることはできない) Route Table を評価対象として IGW のアタッチ があるかを確認することはできる VPCの設定項⽬の⼀部
  31. 70 さいごに Config ルールの導⼊の前に⼀度検討してみること 予防的ガードレール(利⽤制限)で対応できないかを始めに検討 - SCP (Service Control Policy)

    - IAM ポリシー 禁⽌まではしないがリスクとして把握しておきたいこと、 SCP では対応が難しい内容の確認、などの場合に Config ルールを活⽤