😁

aws:PrincipalOrgPathsでOU単位でのアクセス制御するポリシー例

2024/02/28に公開

きっかけ

AWS Lambda + ECRのクロスアカウントのアクセス制御についてのおまけ記事。

https://zenn.dev/wac/articles/d82a5afdc78046

本番、開発環境で共通のECRを利用している時に、OU単位でのアクセス制御ができたら楽じゃないかと思って調べてみた。

結果としてはaws:PrincipalOrgPathsを利用することでOU単位でのアクセス制御は可能。
しかし、下記のようにAWSのドキュメントでは推奨はされていないので、私の環境では素直にアカウントIDを列挙することにしました。

AWSではアカウントIDの列挙を推奨している

AWSのドキュメントにはアカウント ID を列挙することをお勧めしますと記載されている。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html#gettingstarted-images-permissions

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}/:*`],
    },
  ],
},

参考文献

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html

Discussion