跳至内容

如何解决 Lambda 函数容器映像的 "Lambda does not have permission to access the ECR image" 错误?

2 分钟阅读
0

我尝试使用容器映像创建 AWS Lambda 函数。但是,我收到了类似于以下的 Amazon Elastic Container Registry (Amazon ECR) 权限错误: "Lambda does not have permission to access the ECR image.Check the ECR permissions"

简短描述

要从容器映像创建 Lambda 函数,您必须配置允许访问的 AWS Identity and Access Management (IAM) 策略。创建函数和 Amazon ECR 存储库的 IAM 用户或角色必须具有允许访问的权限。

**注意:**在创建 Lambda 函数之前,请先创建 Lambda 容器映像。然后,将映像上传到 Amazon ECR 存储库

解决方法

请按照以下步骤在 Amazon ECR 中设置私有存储库策略语句。然后,添加策略语句,以便从同一 AWS 账户或跨账户中的 Amazon ECR 映像 URI 创建 Lambda 函数。

**注意:**最佳做法是使用 IAM 策略授予最低权限

在同一账户中添加策略语句

在以下策略中,Amazon ECR 存储库权限必须允许对 Lambda 服务执行 ecr:BatchGetImageecr:GetDownloadUrlForLayer API 操作。

Amazon ECR 存储库策略示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LambdaECRImageRetrievalPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ]
        }
    ]
}

**重要事项:**如果 Amazon ECR 存储库不包含上述权限,则 Lambda 会自动添加这些权限。只有当调用 Lambda 的主体具有 ecr:getRepositoryPolicyecr:setRepositoryPolicy 权限时,Lambda 才能添加权限。有关更多信息,请参阅 Amazon ECR 存储库策略

在跨账户中添加策略语句

创建或更新 Lambda 函数的用户或角色必须对 ECR 存储库拥有 ecr:BatchGetImageecr:GetDownloadUrlForLayer 权限。

在以下策略中,在账户 111111111111 和 Amazon ECR 存储库中创建的 Lambda 函数位于账户 222222222222 中。

允许用户或角色访问跨账户 Amazon ECR 存储库的 IAM 策略示例:

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

**注意:**请将 arn:aws:ecr:us-east-1:222222222222:repository/your-repository 替换为您的 ECR 存储库资源的 Amazon 资源名称 (ARN)。

在以下示例中,CrossAccountPermission 语句允许账户 111111111111 创建和更新使用 Amazon ECR 存储库中映像的 Lambda 函数。

Amazon ECR 存储库跨账户策略允许 Lambda 函数检索容器映像的示例:

{
    "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:your-function:*"
                }
            }
        }
    ]
}

**注意:**请将 arn:aws:ecr:us-east-1:222222222222:repository/your-repository 替换为您的 Lambda 函数 ARN。

有关详细信息,请参阅 Amazon ECR 跨账户权限

相关信息

为 AWS Lambda 引入跨账户 Amazon ECR 访问

如何排查 Lambda 的权限问题?

AWS 官方已更新 5 个月前