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 アグリゲータを設定する場合などに活用できそうです。
以上、このブログがどなたかのご参考になれば幸いです。