😁
aws:PrincipalOrgPathsでOU単位でのアクセス制御するポリシー例
きっかけ
AWS Lambda + ECRのクロスアカウントのアクセス制御についてのおまけ記事。
本番、開発環境で共通のECRを利用している時に、OU単位でのアクセス制御ができたら楽じゃないかと思って調べてみた。
結果としてはaws:PrincipalOrgPaths
を利用することでOU単位でのアクセス制御は可能。
しかし、下記のようにAWSのドキュメントでは推奨はされていないので、私の環境では素直にアカウントIDを列挙することにしました。
AWSではアカウントIDの列挙を推奨している
AWSのドキュメントにはアカウント ID を列挙することをお勧めします
と記載されている。
AWS Organization で複数のアカウントを扱う場合は、ECR の許可ポリシーで各アカウント ID を列挙することをお勧めします。このアプローチは、IAM ポリシーで狭い範囲の許可を設定するという AWS セキュリティのベストプラクティスに沿ったものです。
aws:PrincipalOrgPathsのサンプル
-
organizationId
: AWS OrganizationsのID -
rootId
: AWS OrganizationsのRootのID -
ouId
: OUのID
それぞれワイルドカード*
の指定もできます。
{
effect: "Allow",
principals: [
{
type: "Service",
identifiers: ["lambda.amazonaws.com"],
},
],
actions: ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage"],
conditions: [
{
test: "StringLike",
variable: "aws:PrincipalOrgPaths",
values: [`${organizationId}/${rootId}/${ouId}/:*`],
},
],
},
参考文献
Discussion