¿Cómo soluciono el error «Lambda does not have permission to access the ECR image...» (Lambda no tiene permiso para acceder a la imagen de ECR...) de una función de Lambda con una imagen de contenedor?

3 minutos de lectura
0

He intentado crear una función de AWS Lambda con una imagen de contenedor, pero he recibido un error de permiso de Amazon Elastic Container Registry (Amazon ECR).

Descripción breve

Para crear una función de Lambda a partir de una imagen de contenedor, el usuario o rol que cree la función y el repositorio de Amazon ECR deben tener políticas que permitan el acceso.

Nota: Antes de crear la función de Lambda, cree una imagen de contenedor de Lambda. A continuación, suba la imagen a un repositorio de Amazon ECR.

Para obtener más información, consulte Implementación de funciones de Lambda como imágenes de contenedor.

Resolución

Siga estos pasos para configurar una declaración de política de repositorio privado.

Nota: Se recomienda conceder el privilegio mínimo únicamente para los permisos necesarios para realizar una tarea. Para obtener más información, consulte Aplicar permisos de privilegio mínimo.

1). Cree una función de Lambda a partir del URI de la imagen de Amazon ECR en la misma cuenta de AWS

En el siguiente ejemplo, los permisos del repositorio de Amazon ECR deben permitir las acciones de la API ecr:BatchGetImage y ecr:GetDownloadUrlForLayer en el servicio de Lambda.

Ejemplo de política de repositorio de Amazon ECR:

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

2). Cree una función de Lambda a partir del URI de la imagen de Amazon ECR en una cuenta cruzada

En el siguiente ejemplo, las funciones de Lambda se crearon en la cuenta de AWS 111111111111 y el repositorio de Amazon ECR se encuentra en la cuenta de AWS 222222222222.

El usuario o rol que creó o actualizó la función de Lambda debe tener los permisos de ecr:BatchGetImage y ecr:GetDownloadUrlForLayer en el repositorio de 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"
    }
  ]
}

En el siguiente ejemplo, la declaración CrossAccountPermission permite a la cuenta de AWS 111111111111 crear y actualizar funciones de Lambda que utilicen imágenes del repositorio de Amazon ECR.

Ejemplo de política de cuentas cruzadas del repositorio de 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:*"
        }
      }
    }
  ]
}

Finalmente, Lambda establece el estado de una función en inactiva si no se invoca durante un período de tiempo prolongado.

**Nota:**La declaración LambdaECRImageCrossAccountRetrievalPolicy es necesaria para que Lambda pueda recuperar la imagen del contenedor de la cuenta de AWS 111111111111.

Para obtener más información, consulte Permisos de cuentas cruzadas de Amazon ECR.

Información relacionada

Introducción al acceso a Amazon ECR de cuentas cruzadas para AWS Lambda

¿Cómo soluciono los problemas de permisos con Lambda?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año