Como posso solucionar o erro “Lambda does not have permission to access the ECR image...” (O Lambda não tem permissão para acessar a imagem do ECR) para uma função do Lambda com uma imagem de contêiner?

3 minuto de leitura
0

Tentei criar uma função do AWS Lambda com uma imagem de contêiner, mas recebi um erro de permissão do Amazon Elastic Container Registry (Amazon ECR).

Breve descrição

Para criar uma função do Lambda a partir de uma imagem de contêiner, o usuário ou perfil que cria a função e o repositório do Amazon ECR devem ter políticas que permitam o acesso.

Observação: antes de criar a função do Lambda, crie uma imagem de contêiner do Lambda. Em seguida, carregue a imagem em um repositório do Amazon ECR.

Para obter mais informações, consulte Implantar funções do Lambda como imagens de contêiner.

Resolução

Siga estas etapas para definir uma declaração de política de repositório privado.

Observação: é uma prática recomendada conceder o mínimo de privilégios apenas às permissões necessárias para realizar uma tarefa. Para obter mais informações, consulte Aplicar permissões de privilégio mínimo.

1. Criar uma função do Lambda a partir do URI de imagem do Amazon ECR na mesma conta da AWS

No exemplo a seguir, as permissões de repositório do Amazon ECR devem permitir as ações de API ecr:BatchGetImage e ecr:GetDownloadUrlForLayer para o serviço Lambda.

Exemplo de política de repositório Amazon ECR:

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

2. Criar uma função do Lambda a partir do URI de imagem do Amazon ECR entre contas

No exemplo a seguir, as funções do Lambda foram criadas na conta da AWS 111111111111 e o repositório do Amazon ECR está na conta da AWS 222222222222.

O usuário ou perfil que criou ou atualizou a função do Lambda deve ter as permissões ecr:BatchGetImage e ecr:GetDownloadUrlForLayer no repositório do 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"
    }
  ]
}

No exemplo a seguir, a declaração CrossAccountPermission permite que a conta 111111111111 da AWS crie e atualize funções do Lambda que usam imagens do repositório do Amazon ECR.

Exemplo de política de repositório entre contas do 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:*"
        }
      }
    }
  ]
}

O Lambda eventualmente definirá o estado de uma função como inativo se ela não for invocada por um longo período de tempo.

Observação: a declaração LambdaECRImageCrossAccountRetrievalPolicy é necessária para que o Lambda possa recuperar a imagem do contêiner para a conta da AWS 111111111111.

Para obter mais informações, consulte Permissões entre contas do Amazon ECR.

Informações relacionadas

Apresentação do acesso entre contas do Amazon ECR para o AWS Lambda

Como solucionar problemas de permissões com o Lambda?

AWS OFICIAL
AWS OFICIALAtualizada há um ano