CI2部 技術2課の山﨑です。
4月27日にIAM Policy の Condition要素で利用可能なGlobal Condition Key が3つ追加されるというアップデートがありました。
今回はこのアップデートで一体何が便利になったのかを一部ご紹介します。
Global Condition Key とは
Global Condition Key は IAMポリシーで定義するCondition要素内で条件を指定する際に使用される条件キーの1つです。「aws:」プレフィックスが目印です。具体的には以下のようなものがあります。
- aws:MultiFactorAuthPresent
- aws:PrincipalArn
- aws:SourceArn
その他のGlobal Condition Key についてはAWSドキュメントをご覧ください。
アップデートの概要
今回のAWSアップデートで以下の3つのGlobal Condition Keyが利用可能になりました。
- aws:ResourceAccount
- aws:ResourceOrgID
- aws:ResourceOrgPaths
上記のKeyをポリシーステートメントに記述することで、IAMポリシーをアタッチした IAMエンティティ の操作対象であるAWSリソースが所属するAWSアカウント/Organizations組織/Organizations OUを条件として指定することができます。
百聞は一見に如かず、ということで以降「aws:ResourceOrgID」「aws:ResourceOrgPaths」の2つのKeyを用いたユースケースをご紹介します。
aws:ResourceOrgID
想定するユースケース
- AWS Organizations を用いたマルチアカウント構成を採用している
- スイッチロール専用アカウントから各AWSアカウントへスイッチロールをして操作(アクセス元の一元管理)
- Organizations配下のAWSアカウント全てに対し、スイッチロール専用アカウントから「SampleAdmin01」でスイッチロールを許可
- Organizations組織外の「SampleAdmin01」へのスイッチロールは制御
これまで
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::アカウントA:role/SampleAdmin01", "arn:aws:iam::スイッチロール専用アカウント:role/SampleAdmin01", "arn:aws:iam::アカウントB:role/SampleAdmin01", "arn:aws:iam::アカウントC:role/SampleAdmin01" ], "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } } ] }
aws:ResourceOrgID を使った場合
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::*:role/SampleAdmin01" ], "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" }, "StringEquals": { "aws:ResourceOrgID": "${PrincipalOrgID}" } } } ] }
何が嬉しいのか
具体的には新規AWSアカウントを発行時のIAMポリシーの修正の手間を省くことができます。これまでのIAMポリシーの記述を採用すると、新規AWSアカウントを発行する度に「Resource」要素に新規AWSアカウント上のIAMロールのARNを追記修正する必要がありました。
aws:ResourceOrgID を使うと新規AWSアカウント発行時のIAMポリシーのメンテナンスが不要となります。
aws:ResourceOrgPaths
想定するユースケース
- AWS Organizations を用いたマルチアカウント構成を採用している
- スイッチロール専用アカウントから各AWSアカウントへスイッチロールをして操作(アクセス元の一元管理)
- Organizationsの特定のOU配下の全てのAWSアカウントに対し、スイッチロール専用アカウントから「SampleAdmin01」でスイッチロールを許可
- Organizationsの特定のOU配下のAWSアカウント以外へ「SampleAdmin01」でスイッチロールすることを制御
これまで
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::アカウントA:role/SampleAdmin01", "arn:aws:iam::スイッチロール専用アカウント:role/SampleAdmin01", "arn:aws:iam::アカウントB:role/SampleAdmin01", "arn:aws:iam::アカウントC:role/SampleAdmin01" ], "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } } ] }
aws:ResourceOrgPaths を使った場合
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::*:role/SampleAdmin01", ], "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" }, "ForAnyValue:StringLike": { "aws:ResourceOrgPaths": "${PrincipalOrgID}/${RootOUのID}/${Core OUのID}/*" } } } ] }
何が嬉しいのか
こちらもaws:ResourceOrgID と同様に新規AWSアカウントを発行時のIAMポリシーの修正の手間を省くことができます。これまでのIAMポリシーの記述を採用すると、新規AWSアカウントを発行する度に「Resource」要素に新規AWSアカウント上のIAMロールのARNを追記修正する必要がありました。
aws:ResourceOrgPaths を使うと新規AWSアカウント発行時のIAMポリシーのメンテナンスが不要となります。
まとめ
AWSアップデートで追加されたGlobal Condition Key により、IAMポリシーをアタッチした IAMエンティティ の操作対象であるAWSリソースが所属するAWSアカウント/Organizations組織/Organizations OUを条件として指定することができるようになりました。
個人的にはOrganizationsを利用したマルチアカウント構成におけるポリシー設計で便利になるのではないかと思いましたが、まだまだIAMポリシーには不慣れなので継続的に学習して精進してまいります。
山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ
2019/12〜2023/2までクラウドインテグレーション部でお客様のAWS導入支援を行っていました。現在はIE(インターナルエデュケーション)課にて採用周りのお手伝いや新卒/中途オンボーディングの業務をしています。2023 Japan AWS Top Engineers/2023 Japan AWS Ambassadors