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

AWS Config勉強会

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for yhana yhana
October 16, 2022

AWS Config勉強会

Avatar for yhana

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 ルールを活⽤