Como faço para permitir que minha função do Lambda acesse meu bucket do Amazon S3?

4 minuto de leitura
0

Quero que minha função do AWS Lambda possa acessar meu bucket do Amazon Simple Storage Service (Amazon S3).

Breve descrição

Para dar acesso a um bucket do Amazon S3 para a sua função do Lambda na mesma conta da AWS, faça o seguinte:

1.    Crie um perfil do AWS Identity and Access Management (IAM) para a função do Lambda que também conceda acesso ao bucket S3.

2.    Configure o perfil do IAM como o perfil de execução de funções do Lambda.

3.    Verifique se a política de bucket do S3 não nega explicitamente o acesso à função do Lambda ou ao seu perfil de execução.

Importante: Se o seu bucket do S3 e o perfil do IAM das funções estiverem em contas diferentes, você também deverá conceder as permissões necessárias na política de bucket do S3. Para obter mais informações, consulte Como posso oferecer acesso entre contas para objetos que estão em buckets do Amazon S3?

Resolução

Criar um perfil do IAM para a função do Lambda que também conceda acesso ao bucket S3

1.    Siga as etapas em Criar um perfil de execução no console do IAM.

2.    Na lista de perfis do IAM, escolha a função que você acabou de criar.

3.    A política de confiança deve permitir que o Lambda assuma a função de execução, adicionando lambda.amazonaws.com como um serviço confiável. Escolha a guia Trust relationships (Relações de confiança), escolha Edit trust policy (Editar política de confiança) e substitua a política pelo seguinte:

{
  "Version": "2012-10-17",
  "Statement": [
    {
     "Effect": "Allow",
     "Principal": {
     "Service": "lambda.amazonaws.com"
    },
  "Action": "sts:AssumeRole"
  }
 ]
}
  1. Escolha Update policy (Atualizar política).

5.    Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).

6.    Escolha a guia JSON.

7.    Insira uma política do IAM baseada em recursos que conceda acesso ao seu bucket do S3. Para obter mais informações, consulte Usar políticas baseadas em recursos para o AWS Lambda.

O exemplo de política do IAM a seguir concede acesso a um bucket específico do Amazon S3 com permissões Get. Para acessar os objetos dentro do bucket do Amazon S3, certifique-se de especificar o caminho correto ou de usar um caractere curinga (“*”). Para obter mais informações, consulte Escrever políticas do IAM: Como conceder acesso a um bucket do Amazon S3.

Importante: substitua "arn:aws:s3:::EXAMPLE-BUCKET" pelo nome do recurso da Amazon (ARN) dos seus buckets do S3.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

6.    Escolha Review policy (Revisar política).

7.    Em Name (Nome), insira um nome para a política.

8.    Escolha Create policy (Criar política).

Configurar o perfil do IAM como o perfil de execução de funções do Lambda

1.    Abra o console do Lambda.

2.    Escolha sua função do Lambda.

3.    Em Execution role (Perfil de execução), para Existing role (Perfil existente), selecione o perfil do IAM que você criou.

4.    Escolha Salve (Salvar).

Verificar se a política de bucket do S3 não nega explicitamente o acesso à função do Lambda ou ao seu perfil de execução

Para revisar ou editar sua política de bucket do S3, siga as instruções em Adicionar uma política de bucket usando o console do Amazon S3.

Importante: se o seu bucket do S3 e o perfil do IAM das funções estiverem em contas diferentes, você também deverá conceder explicitamente as permissões necessárias na política de bucket do S3. Para obter mais informações, consulte Como posso oferecer acesso entre contas para objetos que estão em buckets do Amazon S3?

O exemplo a seguir de uma política de bucket do S3 do IAM concede acesso entre contas a um bucket do S3 para um perfil de execução do Lambda.

Importante: substitua "arn:aws:s3:::EXAMPLE-BUCKET/*" pelo ARN dos seus buckets do S3. Substitua "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" pelo ARN dos perfis de execução do Lambda.

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

Informações relacionadas

AWS Policy Generator

AWS OFICIAL
AWS OFICIALAtualizada há um ano