跳至內容

如何解決 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 權限。

在以下政策中,Lambda 函式建立於帳戶 111111111111,而 Amazon ECR 儲存庫位於帳戶 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 Resource Name (ARN)。

在以下範例中,CrossAccountPermission 陳述式允許帳戶 111111111111 建立和更新使用 Amazon ECR 儲存庫映像的 Lambda 函式。

允許 Lambda 函式擷取容器映像的 Amazon 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:your-function:*"
                }
            }
        }
    ]
}

**注意:**將 arn:aws:ecr:us-east-1:222222222222:repository/your-repository 替換為您的 Lambda 函式 ARN。

如需更多資訊,請參閱 Amazon ECR 跨帳戶權限

相關資訊

AWS Lambda 的跨帳戶 Amazon ECR 存取簡介

如何疑難排解 Lambda 的權限問題?

AWS 官方已更新 9 個月前