別アカウントの ECR を Lambda で使用する際の権限設定について教えてください

別アカウントの ECR を Lambda で使用する際の権限設定について教えてください

Clock Icon2024.08.27

Here is the English version

困っていた内容

Lambda でコンテナイメージをデプロイする予定ですが、イメージは Lambda とは別アカウントの ECR にプッシュされています。

この場合にどのように権限を設定すればよいでしょうか。

どう対応すればいいの?

ECR のリソースベースポリシーと Lambda の IAM ロールの両方で権限を設定する必要があります。

必要な権限は以下の 2 つです。

  • ecr:BatchGetImage
  • ecr:GetDownloadUrlForLayer

AWS 公式ドキュメントより

クロスアカウントアクセスを有効にするには、リソースベースのポリシー で、アカウント全体または別のアカウントのIAMエンティティをプリンシパルとして指定できます。リソースベースのポリシーにクロスアカウントのプリンシパルを追加しても、信頼関係は半分しか確立されない点に注意してください。プリンシパルとリソースが異なる AWS アカウントにある場合は、プリンシパルエンティティにリソースへのアクセス許可も付与する必要があります。

AWS ナレッジセンターではポリシーの例が紹介されていますので、あわせてご参照ください。

ECR のリソースベースポリシーの例は以下の通りです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountPermission",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    },
    {
      "Sid": "LambdaECRImageCrossAccountRetrievalPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
          "aws:sourceARN": "arn:aws:lambda:us-east-1:111111111111:function:*"
        }
      }
    }
  ]
}

Lambda の IAM ロールの例は以下の通りです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ECR Repository Access Permissions",
      "Effect": "Allow",
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "arn:aws:ecr:us-east-1:222222222222:repository/hello-repository"
    }
  ]
}

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.