2023-11-17 に Organizations環境のリソースアクセス制御を簡素にする IAMグルーバル条件キーが追加されました。
aws:SourceOrgID を使うことで、 「SSMインベントリデータのS3バケット集約」 を楽ちんにできます 。 ちなみに、過去ブログではLambda-backed カスタムリソース作っていました。
過去ブログとの差分メインで解説していきます。
セットアップ全体像と更新点
セットアップ全体の流れは過去ブログと変わりません。
以下太字部分が差分です。
- 集約アカウントにS3バケットを作成する → バケットポリシーが変わります
- 「インベントリ収集」設定をメンバーアカウント群へ展開する
- 「
組織ベースのリソースデータ同期」設定をメンバーアカウント群へ展開する → 展開するCloudFormationテンプレートが変わります - (オプション) Athenaなど分析ツールを使ってS3バケットに対してクエリを行う
本ブログでは更新部分のみ紹介します。
更新部分
S3バケットポリシー
以下のようなS3バケットポリシーとします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SSMBucketPermissionsCheck",
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": " SSMBucketDelivery",
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/bucket-prefix/*/accountid=*/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceOrgID": "organization-id"
}
}
},
{
"Sid": " SSMBucketDeliveryTagging",
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "s3:PutObjectTagging",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/bucket-prefix/*/accountid=*/*"
]
}
]
}
DOC-EXAMPLE-BUCKET
… 作成したバケット名に置換しますbucket-prefix/
… 好みのバケットプレフィクスに置換します (オプション)organization-id
… AWS Organizationsの組織IDに置換します
ハイライト部分、 "aws:SourceOrgID": "organization-id"
が更新点です。 新しい条件キーを使っています。
リソースデータ同期
以下のようなCFnテンプレートを作成しました。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
BucketName:
Type: String
BucketPrefix:
Type: String
Default: default
SyncName:
Type: String
Default: org-sync
Resources:
SSMResourceDataSync:
Type: AWS::SSM::ResourceDataSync
Properties:
SyncName: !Ref SyncName
SyncType: "SyncToDestination"
S3Destination:
BucketName: !Ref BucketName
BucketPrefix: !Ref BucketPrefix
BucketRegion: "ap-northeast-1"
SyncFormat: "JsonSerDe"
過去ブログでは「組織ベースのリソースデータ同期」を作っていましたが、 今回は「普通のリソースデータ同期」です。
差分はこんな感じです。 Lambda-backed カスタムリソースを作らなくて良くなった分、簡素になってますね。
これをCFn StackSetsとして展開します。
確認
過去ブログと確認内容は同じです。
問題なくマネージドインスタンスの構成情報を取得できていました。
おわりに
元はと言えば 「組織ベースのリソースデータ同期」がCloudFormationリソースでは対応していない ことが全ての元凶でしたが、 新しい条件キー(aws:SourceOrgID)のおかげで 「普通のリソースデータ同期」で集約できるようになりました。
機能として提供されている「組織ベースのリソースデータ同期」を使わないのは 少しモヤモヤしますが、 現時点(2023/12/14)では本ブログ記載の方法が一番楽ちんだと思います。
以上、参考になれば幸いです。