Passer au contenu

Comment résoudre l'erreur « Lambda does not have permission to access the ECR image » pour une image de conteneur de fonction Lambda ?

Lecture de 3 minute(s)
0

J'ai essayé de créer une fonction AWS Lambda avec une image de conteneur. Cependant, j'ai reçu une erreur d'autorisation Amazon Elastic Container Registry (Amazon ECR) similaire à l’erreur suivante : « Lambda does not have permission to access the ECR image. Check the ECR permissions »

Brève description

Pour créer une fonction Lambda à partir d'une image de conteneur, vous devez configurer les politiques Gestion des identités et des accès AWS (AWS IAM) qui autorisent l'accès. L'utilisateur ou le rôle IAM qui crée la fonction et le référentiel Amazon ECR doit disposer d'autorisations d'accès.

Remarque : avant de créer la fonction Lambda, créez d'abord une image de conteneur Lambda. Chargez ensuite l'image dans un référentiel Amazon ECR.

Résolution

Suivez les étapes pour définir une instruction de politique de référentiel privé dans Amazon ECR. Ajoutez ensuite une instruction de politique pour créer une fonction Lambda à partir de l'URI de l'image Amazon ECR dans le même compte AWS ou sur plusieurs comptes.

Remarque : il est recommandé d’accorder les autorisations de moindre privilège avec les politiques IAM.

Ajouter une instruction de politique dans le même compte

Dans la politique suivante, les autorisations du référentiel Amazon ECR doivent autoriser l’accès des actions d'API ecr:BatchGetImage et ecr:getDownloadUrlForLayer au service Lambda.

Exemple de politique de référentiel Amazon ECR :

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

Important : si le référentiel Amazon ECR n'inclut pas les autorisations précédentes, Lambda les ajoute automatiquement. Lambda ne peut ajouter des autorisations que si le principal appelant Lambda dispose des autorisations ecr:getRepositoryPolicy et ecr:setRepositoryPolicy. Pour plus d'informations, consultez la section Politiques de référentiel Amazon ECR.

Ajouter une instruction de politique entre plusieurs comptes

L'utilisateur ou le rôle qui crée ou met à jour la fonction Lambda doit disposer des autorisations ecr:BatchGetImage et ecr:getDownloadUrlForLayer sur le référentiel ECR.

Dans la politique suivante, les fonctions Lambda créées dans le compte AWS 111111111111 et dans le référentiel Amazon ECR se trouvent dans le compte 222222222222.

Exemple de politique IAM qui permet à l'utilisateur ou au rôle d'accéder au référentiel Amazon ECR intercompte :

{
    "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"
        }
    ]
}

Remarque : remplacez arn:aws:ecr:us-east-1:222222222222:repository/your-repository par l’Amazon Resource Name (ARN) de la ressource de référentiel ECR.

Dans l'exemple suivant, l'instruction CrossAccountPermission permet au compte 111111111111 de créer et de mettre à jour des fonctions Lambda qui utilisent des images provenant du référentiel Amazon ECR.

Exemple de politique intercompte du référentiel Amazon ECR qui permet à la fonction Lambda de récupérer l'image du conteneur :

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

Remarque : remplacez arn:aws:ecr:us-east-1:222222222222:repository/your-repository par l'ARN de la fonction Lambda.

Pour plus d'informations, consultez la section Autorisations intercomptes Amazon ECR.

Informations connexes

Présentation de l'accès Amazon ECR intercompte pour AWS Lambda

Comment résoudre les problèmes d'autorisation avec Lambda ?

AWS OFFICIELA mis à jour il y a 6 mois