IAMのグローバル条件コンテキストキーにaws:PrincipalOrgPathsが新しく追加されました
“aws:PrincipalOrgPaths”について公式サイトによると
AWS組織のAWSアカウントのグループである組織単位(OU)をAWS Identity and Access Management(IAM)ポリシーで参照できるようになり、IAMプリンシパル(ユーザーとロール)からAWSリソースへのアクセスを組織内で簡単に定義できるようになりました。 ポリシーで新しい条件キー”aws:PrincipalOrgPaths”を使用することで、OUのプリンシパルのメンバーシップに基づいてアクセスを許可または拒否できます。これにより、AWS環境で所有するアカウント間でリソースをこれまでになく簡単に共有できます。
とあります。
使い方
aws:PrincipalOrgPathsが指定することの出来る条件は、 AWS Organizationsの組織、Root、OU(Organization Unit)です。
たとえば、プリンシパルが組織”o-1122334455″、ルート”r-abcd”内のID”ou-abcd-zzyyxxww”を持つOUのメンバーだったとき、 ポリシーのCondition要素は次のようになります。
"Condition":{ "ForAnyValue:StringLike":{ "aws:PrincipalOrgPaths":[ "o-1122334455/r-abcd/ou-abcd-zzyyxxww/" ] } }
何ができるようになったか
IAMロールへのアクセスを組織のOUのアカウントのみに制限する
ロールの許可をするのをグループで指定できなかったため、ロールの許可設定にユーザーを都度追加する必要がありました。→awsのIAMポリシーでPrincipalにIAM Groupは指定できない
新しく追加された条件キー“aws:PrincipalOrgPaths”を利用することでOU単位でアクセス制限が設定できるようになるため、 AWSアカウントIDを一つ一つ管理する必要が無くなります。
組織内のOU内のすべてのプリンシパルにS3バケットアクセスを許可
公式ブログに掲載されている例で、
機械学習モデルのトレーニングに使用する画像を含むS3バケットトレーニングデータにアクセスするためのアクセス許可をMachine Learningチームに付与する例を考えてみましょう。 Machine Learningチームが所有するすべてのAWSアカウントが、ou-machinelearnというIDを持つ特定のOUの一部になるように組織を設定しました。この例では、組織IDはo-myorganizationです。
アクセス許可を付与するには、以下に示すように、トレーニングデータリソースのS3バケットポリシーを作成します。
{ "Version":"2012-10-17", "Statement":{ "Sid":"TrainingDataS3ReadOnly", "Effect":"Allow", "Principal": "*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::training-data/*", "Condition":{ "ForAnyValue:StringLike":{ "aws:PrincipalOrgPaths":["o-myorganization/*/ou-machinelearn/*"] } } } }
今までAWSのアカウントIDをもとに管理する必要があったため、新しいアカウントが追加される度に手動でリストにIDを追加しなければいけなかったS3パケットポリシーを、OUのIDに置き換えることにより都度追加する必要が無くなりました。
公式ブログに(まだ日本語対応していませんが)、機能や使い方などが詳しく載っています。 Use IAM to share your AWS resources with groups of AWS accounts in AWS Organizations