내용으로 건너뛰기

Lambda 함수 컨테이너 이미지에 대한 ‘Lambda does not have permission to access the ECR image’ 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
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 리포지토리 권한은 ecr:BatchGetImageecr:GetDownloadUrlForLayer API 작업이 Lambda 서비스에 액세스할 수 있도록 허용해야 합니다.

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는 주체 호출 Lambda에 ecr:getRepositoryPolicyecr:setRepositoryPolicy 권한이 있는 경우에만 권한을 추가할 수 있습니다. 자세한 내용은 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 리소스 이름(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 공식업데이트됨 7달 전