[小ネタ] aws:SourceOrgID のおかげでSSMインベントリデータのS3集約が楽ちんになっていた
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)では本ブログ記載の方法が一番楽ちんだと思います。
以上、参考になれば幸いです。