やりたいこと
AWS Organizationsを運用している際、メンバーアカウント内の動的処理で自身の「AWSアカウント名」を取得したい。
(ユースケース:各アカウント内からアラートメールを送信する際に、メール件名にアカウント名を追加するときなど)
対応方法
アカウント名を動的取得するには基本的にorganizations:DescribeAccount
のアクションが必要となります。
ただし、こちらはOrganizationsの管理アカウントでしか利用できませんでした。
そのため
- 別途DynamoDBやS3にアカウント情報を定期保存するなど別の保存領域を使って取得する
- メンバーアカウント毎のIAMロールを管理アカウントに用意して、AssumeRoleしてもらう
などあまり美しくない方法しかなかったのですが、「Organizations の委任管理者機能」のポリシー調整でシンプルに実現出来ました。
「Organizations の委任管理者機能」については以下クラスメソッドさんの記事が分かりやすいのでご参照ください。
Organizations の委任管理者機能に以下のポリシーを設定する事で各メンバーアカウントからorganizations:DescribeAccount
のアクションが可能になります。
※[管理アカウントID][Organization ID]は要変更
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement",
"Effect": "Allow",
"Principal": "*",
"Action": "organizations:DescribeAccount",
"Resource": "arn:aws:organizations::[管理アカウントID]:account/[Organization ID]/${aws:PrincipalAccount}"
}
]
}
ポイント
グローバル条件コンテキストキーである${aws:PrincipalAccount}
を使う事で、Organizations内のアカウント増に合わせてポリシーを調整する必要が無くなりました。