Comment puis-je résoudre l'erreur « Lambda n'est pas autorisé à accéder à l'image ECR… » associée à une fonction Lambda avec une image de conteneur ?

Lecture de 3 minute(s)
0

J'ai essayé de créer une fonction AWS Lambda avec une image de conteneur, mais j'ai reçu une erreur d'autorisation Amazon Elastic Container Registry (Amazon ECR).

Brève description

Pour créer une fonction Lambda à partir d'une image de conteneur, l'utilisateur ou le rôle qui crée la fonction et le référentiel Amazon ECR doivent disposer de politiques autorisant l'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.

Pour plus d'informations, consultez la section Déploiement de fonctions Lambda sous forme d'images de conteneur.

Résolution

Procédez comme suit pour définir une déclaration de politique de référentiel privé.

**Remarque :**Il est recommandé d'accorder le moindre privilège uniquement pour les autorisations requises pour effectuer une tâche. Pour plus d'informations, consultez la section Appliquer des autorisations de moindre privilège.

1. Créez une fonction Lambda à partir de l'URI de l'image Amazon ECR dans le même compte AWS

Dans l'exemple suivant, les autorisations du référentiel Amazon ECR doivent autoriser les actions d'API ecr:BatchGetImage et ecr:getDownloadUrlForLayer sur le 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"
      ]
    }
  ]
}

2. Création d'une fonction Lambda à partir de l'URI de l'image Amazon ECR dans un intercompte

Dans l'exemple suivant, les fonctions Lambda créées dans le compte AWS 111111111111 et dans le référentiel Amazon ECR se trouvent dans le compte AWS 222222222222.

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

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

Dans l'exemple suivant, l'instruction CrossAccountPermission permet au compte AWS 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 intercomptes du référentiel 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:function:*"
        }
      }
    }
  ]
}

Lambda finit par définir l'état d'une fonction comme inactive si elle n'est pas invoquée pendant une période prolongée.

**Remarque :**L'instruction LambdaecrimageCrossAccountRetrievalPolicy est requise pour que Lambda puisse récupérer l'image du conteneur pour le compte AWS 111111111111.

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

Informations connexes

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

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

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an