AWS Config アグリゲータの承認設定を CloudFormation で試してみた

2024.06.05

AWS Organizations 環境ではない AWS Config アグリゲータの設定では、他のアカウントのデータを収集する際に、収集対象のアカウントで承認することで実現できます。この承認を CloudFormation で設定できることを最近知ったため試してみました。CloudFormation SlackSets により複数のリージョンをまとめて設定することもできます。

AWS Config アグリゲータの設定

今回の検証では AWS Config アグリゲータは下記画像の設定で作成する環境を利用します。アカウント欄にデータを収集したい対象のアカウント ID を指定します。アカウント欄には Config アグリゲータがあるアカウント自体を指定することもできます。

以降では、下記のアカウント ID で記載しています。例示の値となり、実際の設定とは異なります。

  • Config アグリゲータのあるアカウント 111122223333
  • Config アグリゲータの収集対象アカウント 444455556666
    • 承認設定を追加するアカウント

AWS Config アグリゲータの認証の設定

Config アグリゲータの「認証」設定でデータの収集を承認します。まだ承認設定をしていないため、ステータスは「認証のリクエスト」となっています。

この状態において、次の CloudFormation テンプレートを用いて、全てのリージョンで承認設定を追加してみます。

AWSTemplateFormatVersion: 2010-09-09
Description: AWS Config Aggregation Authorization

Parameters:
  ConfigAggregatorAccountID:
    Type: String
    Description: The 12-digit account ID of the account authorized to aggregate data
    AllowedPattern: ^\d{12}$
  ConfigAggregatorRegion:
    Type: String
    Description: The region authorized to collect aggregated data
    MinLength: 1
    MaxLength: 64
    Default: ap-northeast-1

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: AWS Config Aggregator
        Parameters:
          - ConfigAggregatorAccountID
          - ConfigAggregatorRegion

Resources:
  ConfigAggregationAuthorization:
    Type: AWS::Config::AggregationAuthorization
    Properties:
      AuthorizedAccountId: !Ref ConfigAggregatorAccountID
      AuthorizedAwsRegion: !Ref ConfigAggregatorRegion

AWS::Config::AggregationAuthorizationタイプの詳細は次のユーザーガイドページに記載があります。パラメータの説明やパターンなどは本ページの内容を基に設定しています。

AWS::Config::AggregationAuthorization - AWS CloudFormation


承認は全てのリージョンで設定したいため、StackSets を利用します。

AWS Organizations 環境ではないことを想定して、SlackSets はセルフマネージドで展開します。セルフマネージドで展開するためには事前に IAM ロールの作成が必要となり、必要な IAM ロールは下記のユーザーガイドに記載されています。なお、今回は IAM ロール作成済みの環境で試しています。

セルフマネージド型のアクセス許可を付与する - AWS CloudFormation


ここからは StackSets の展開設定を記載します。

ステップ 1 では、テンプレートをアップロードします。AWS Organizations のメンバーアカウントで実行しているため、自動的にセルフマネージドの展開設定となっています。

ステップ 2 では、CloudFormation テンプレートのパラメータとして Config アグリゲータ設定があるアカウントとリージョンを指定します。

ステップ 3 は、今回はデフォルトのままで進めます。

ステップ 4 のデプロイオプションの設定では、展開先のアカウントとリージョンを指定します。今回は有効な全てのリージョンで並行実行する設定にしています。

最後に設定内容を確認して実行します。

ステータスがSUCEEDEDとなれば、展開が完了です。「スタックインスタンス」タブからリージョン毎のステータスも確認できます。

CloudFormation 展開先のアカウント444455556666において、Config アグリゲータの認証設定が「承認済」であることを確認できます。

AWS CLI で全てのリージョンを確認してみます。

次のコマンドを実行します。

aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
| while read region; do
  echo "### Describe aggregation authorizations in ${region}"
  aws configservice describe-aggregation-authorizations \
    --query 'AggregationAuthorizations[*].{AuthorizedAccountId:AuthorizedAccountId,AuthorizedAwsRegion:AuthorizedAwsRegion}' \
    --region ${region}
done

実行結果例です。全てのリージョンで承認設定があることを確認できます。アカウント ID は例示の値に変更しています。

$ aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
> | while read region; do
>   echo "### Describe aggregation authorizations in ${region}"
>   aws configservice describe-aggregation-authorizations \
>     --query 'AggregationAuthorizations[*].{AuthorizedAccountId:AuthorizedAccountId,AuthorizedAwsRegion:AuthorizedAwsRegion}' \
>     --region ${region}
> done

### Describe aggregation authorizations in ap-south-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in eu-north-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in eu-west-3
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in eu-west-2
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in eu-west-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ap-northeast-3
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ap-northeast-2
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ap-northeast-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ca-central-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in sa-east-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ap-southeast-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in ap-southeast-2
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in eu-central-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in us-east-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in us-east-2
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in us-west-1
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]
### Describe aggregation authorizations in us-west-2
[
    {
        "AuthorizedAccountId": "111122223333",
        "AuthorizedAwsRegion": "ap-northeast-1"
    }
]


最後に、Config アグリゲータがあるアカウント111122223333において、Config アグリゲータの設定を確認したところ、CloudFormation で承認設定を追加したアカウントのステータスがOKになっていることも確認できました。

AWS CloudFormation で Config アグリゲータの承認設定ができることを確認できました。

さいごに

AWS Confifg アグリゲータの承認を CloudFormation で設定できることを知らなかったので試してみました。CloudFormation で設定できることでアカウントのベースラインとして Config アグリゲータを設定する場合などに活用できそうです。

以上、このブログがどなたかのご参考になれば幸いです。