He intentado crear una función de AWS Lambda con una imagen de contenedor. Sin embargo, he recibido un error de permiso de Amazon Elastic Container Registry (Amazon ECR) similar al siguiente: "Lambda does not have permission to access the ECR image. Check the ECR permissions"
Descripción corta
Para crear una función de Lambda a partir de una imagen de contenedor, debes configurar las políticas de AWS Identity and Access Management (IAM) que permitan el acceso. El usuario o rol de IAM que crea la función y el repositorio de Amazon ECR deben tener permisos que permitan el acceso.
Nota: Antes de crear la función de Lambda, crea una imagen de contenedor de Lambda. A continuación, carga la imagen a un repositorio de Amazon ECR.
Resolución
Sigue los pasos para establecer una instrucción de política de repositorios privados en Amazon ECR. A continuación, agrega una instrucción de política para crear una función de Lambda a partir del URI de la imagen de Amazon ECR en la misma cuenta de AWS o entre cuentas.
Nota: Se recomienda conceder permisos de privilegios mínimos con las políticas de IAM.
Agregar una instrucción de política en la misma cuenta
En la siguiente política, los permisos del repositorio de Amazon ECR deben permitir el acceso a 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"
]
}
]
}
Importante: Si el repositorio de Amazon ECR no incluye los permisos anteriores, Lambda los agrega automáticamente. Lambda solo puede agregar permisos si la entidad principal que llama a Lambda tiene los permisos ecr:getRepositoryPolicy y ecr:setRepositoryPolicy. Para obtener más información, consulta las políticas de repositorio de Amazon ECR.
Agregar una instrucción de política entre cuentas
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.
En la siguiente política, las funciones de Lambda se crearon en la cuenta 111111111111 y el repositorio de Amazon ECR se encuentra en la cuenta 222222222222.
Ejemplo de política de IAM que permite al usuario o al rol acceder al repositorio entre cuentas de Amazon ECR:
{
"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"
}
]
}
Nota: Sustituye arn:aws:ecr:us-east-1:222222222222:repository/your-repository por el nombre de recurso de Amazon (ARN) del recurso de repositorio de ECR.
En el siguiente ejemplo, la instrucción CrossAccountPermission permite a la cuenta 111111111111 crear y actualizar funciones de Lambda que utilicen imágenes del repositorio de Amazon ECR.
Ejemplo de política entre cuentas del repositorio de Amazon ECR que permite a la función de Lambda recuperar la imagen del contenedor:
{
"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:*"
}
}
}
]
}
Nota: Sustituye arn:aws:ecr:us-east-1:222222222222:repository/your-repository por el ARN de tu función de Lambda.
Para obtener más información, consulta Permisos entre cuentas de Amazon ECR.
Información relacionada
Introducción al acceso a Amazon ECR entre cuentas para AWS Lambda
¿Cómo soluciono los problemas de permisos con Lambda?