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?