🙌

AWS Configを有効化してみた

2023/01/04に公開

Agenda

本記事では、以下のことを書いています。

  • AWS Configの有効化、初期化方法
  • AWS Configのサービスリンクロールとは何か?
  • AWSグローバルサービスとは何か?

Introduction

AWS Configとは何か?

AWS リソースの設定を継続的に記録・評価するためのフルマネージドサービス

以下のような機能が提供される

  • アカウント内のリソース検出
  • 設定内容の記録
  • リソースの設定内容の詳細や削除・変更・設定履歴の記録

デベロッパーガイド

Action

有効化方法

大きく5つのステップを踏んで有効化していきます

1. AWS Configで記録するリソースタイプを指定
2. 必要なIAMロールを設定
3. 設定履歴やスナップショットのファイルを送信するS3バケットの指定
4. 設定変更を通知するようSNSトピックを設定
5. AWS Configルールを設定
  1. AWS Configのトップ画面から[Get Started]を選択
    config001

  2. 一般設定(General settings)と配信方法(Delivery method)についての設定画面。
    今回は以下のように設定をして「Next」を押す

    • 現在指定中のリージョンの全リソースを記録対象にしたい場合はRecord all resources supported in this region
    • AWSグローバルサービスも対象にしたい場合はInclude global resourcesにチェックを入れる(グローバルサービスとは何ぞや?という人はCommentsを参照)
    • AWS Config RoleでUse an existing AWS Config service-linked roleを選択すると、AWS提供のデフォルト設定ロールがサービスに付与される
    • AWS Configで記録された証跡ログはS3バケットに保管されるのでバケット名の指定が必要
    • 通知設定をしたい場合はSNSトピックも作成
      config002
  3. Configルールに関する設定画面。
    必要に応じてAWS のManaged Ruleにチェックすることで、ルールを遵守してAWSサービスが利用されているかを自動で確認してくれる。
    今回は特にチェックせずデフォルトのまま「Next」を押す
    config003

  4. レビュー画面。
    設定した内容について問題なければ[Confirm]を選択
    config004

  5. 暫くするとセットアップが始まり、評価結果などが見れるようになる
    config005

  6. Amazon SNS画面を見ると、SNSトピックも作成されているので必要に応じてsubscriptionを作成し、通知設定を行います。
    (手順は割愛)
    config006

  7. S3バケットも作成されている。
    証跡ログは${指定したバケット名}/AWSLogs/${指定したPrefix}フォルダ内に格納される。
    config007

  8. AWS Config設定画面は以下の通り。
    Configを有効化するとRecorderが「Recording is on」と表示されます。
    これで各種サービスがルールに遵守しているかなどを自動チェックしてくれます。
    検知した変更などについては指定したS3バケットにログが保管されます。
    config008

    また、AWS Configに付与されているサービスリンクロールは以下のものとなります。
    AWS提供のものを利用する場合は、全てのサービスへのアクセス権が付与され、自動でリソース情報を取得するようになっている。
    config009

  9. CLI上では以下コマンドで設定を確認できる

    // 配信設定のっp確認
    $ aws configservice describe-delivery-channels
    {
        "DeliveryChannels": [
            {
                "name": "default",
                "s3BucketName": "config-bucket-test-20221109",
                "snsTopicARN": "arn:aws:sns:ap-northeast-1:${AccounrtId}:config-topic-test"
            }
        ]
    }
    
    // レコーダー設定の確認
    $ aws configservice describe-configuration-recorders
    {
        "ConfigurationRecorders": [
            {
                "name": "default",
                "roleARN": "arn:aws:iam::${AccounrtId}:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
                "recordingGroup": {
                    "allSupported": true,
                    "includeGlobalResourceTypes": true,
                    "resourceTypes": []
                }
            }
        ]
    }
    

初期化方法

AWS Configは一度有効化するとコンソール上からは無効化できないようになっている。

もし、一度設定したAWS Configの設定を初期化したい場合はCLI上にて行う必要がある。
設定の初期化はDeliveryChannel、AWSConfigRecorder設定を削除すればOK。
事前にRecorderの設定はOFFにしておく必要がある。

  1. Recorderの設定を無効化します。
    config-010

  2. 削除する前にCLIで設定を確認しましょう。
    CLIでの操作はCloudShellが便利です。

    // DeliveryChannelの設定確認
    $ aws configservice describe-delivery-channels
    {
        "DeliveryChannels": [
            {
                "name": "default",
                "s3BucketName": "config-bucket-test-20221109"
            }
        ]
    }
    
    // AWSConfigRecorderの設定確認
    $ aws configservice describe-configuration-recorders
    {
        "ConfigurationRecorders": [
            {
                "name": "default",
                "roleARN": "arn:aws:iam::${AccountId}:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
                "recordingGroup": {
                    "allSupported": true,
                    "includeGlobalResourceTypes": false,
                    "resourceTypes": []
                }
            }
        ]
    }
    
  3. 以下コマンドですぐに削除ができます

    // DeliveryChannelの設定削除
    $ aws configservice delete-delivery-channel --delivery-channel-name default
    
    // AWSConfigRecorderの設定削除
    $ aws configservice delete-configuration-recorder --configuration-recorder-name default
    
    // 再度設定確認すると、削除されていることがわかる
    $ aws configservice describe-delivery-channels
    {
        "DeliveryChannels": []
    }
    $ aws configservice describe-configuration-recorders
    {
        "ConfigurationRecorders": []
    }
    
  4. 削除後、初期セットアップ画面が表示されたら初期化成功
    config-011

Comments

AWS Configのサービスリンクロールとは?

AWS Configの機能を利用するために必要な権限が事前に定義されているロール。
これをAWS Configに設定しないと、各サービスに対する設定変更情報などを取得ができない。

AWS提供のサービスリンクロールには、AWS管理のポリシーAWSConfigServiceRolePolicyが付与されている。
ここでAWS Configでサポートしている全サービスへのアクセス許可を実装している。

自分で作成することもできるが、さっさと有効化したい場合はAWSで事前に定義されたロールを利用するのも1つ。

AWS提供のサービスリンクロールは、指定されると同時に作成される。

サービスにリンクされた AWS Config ロール

AWSグローバルサービスとは?

リージョン外で機能するAWSサービス。
リージョン選択画面でグローバルと表示されるサービスは基本的にAWSグローバルサービスである。
IAMやRoute53などはグローバルサービスである。
config-012

それとは反対に、リージョン内のサービスはリージョナルサービスと呼ばれたりする。
各種サービスの場所については以下記事などが参考になる
AWS サービスがどこにあるのかまとめ

Reference

  1. コンソールによる AWS Config の設定
  2. AWS Configはとりあえず有効にしよう
  3. AWSマネジメントコンソールから消せないAWS Configの設定をAWSCLIで綺麗にする方法

Discussion