来自跨账户 ECR 的 AWS Lambda:Lambda 无权访问 ECR 映像

Gui*_*meK 5 amazon-web-services aws-lambda amazon-ecr

我试图从另一个帐户 A 的 ECR 图像在帐户 B 中创建 lambda 函数,但遇到 Lambda无权访问 ECR 图像错误。

我创建了以下ECR 策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountPermission",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::BBBBBBBBBBBB:root"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
          "aws:sourceArn:": "arn:aws:lambda:eu-west-1:BBBBBBBBBBBB:function:*"
        }
      }
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)

我正在使用 aws sso 承担的角色来执行 lambda 创建,我不知道这是否会产生影响。

账户 B 和 A 不在同一 AWS 组织单位中。

我测试过的东西:

  • 如果我从针对 lambda 服务的语句中删除条件,错误就会消失,但显然这不是永久解决方案。
  • 使用帐户 B 中的相同 ECR 映像运行 ECS 任务效果很好。
  • 我尝试按照此处的SAM 教程进行操作,但遇到了同样的问题。

我没有什么要检查的了,我真的很想避免复制帐户 B 中的 ECR 映像。

您知道为什么示例策略似乎不起作用吗?

我如何才能缩小来自 lambda 服务的所有内容的策略范围?我原本计划用于aws:PrincipalOrgPaths允许多个组织单位,但这似乎不适用于 lambda 主体。

Gre*_*nge 5

我今天在这方面花了太多时间,所以希望它对其他人有帮助,但我终于能够使用以下存储库策略与整个组织共享图像......

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossOrgPermission",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
          "aws:PrincipalOrgID": "x-xxxxxxxxx"
        }
      }
    },
    {
      "Sid": "LambdaECRImageCrossOrgRetrievalPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
          "aws:ResourceOrgID": "x-xxxxxxxxx"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的 CrossOrgPermission 比此处的更广泛,但我相信它仍然应该如图所示工作。


Gui*_*meK 1

正如我在评论中所说,这是一个愚蠢的拼写错误,就像政策中经常出现的情况一样。

我用"aws:sourceArn:":而不是"aws:sourceArn":...