https://a.storyblok.com/f/270183/40241/9336e09b09/e_aws-permissions_1200x600.png

Como funcionam as permissões no AWS Lambda

Publicado em May 18, 2021

Tempo de leitura: 2 minutos

Ao trabalhar com o AWS Lambda, muitos usuários enfrentam dificuldades com as permissões ao utilizar outros serviços da AWS. Mais especificamente, como acessar serviços como o S3, o RDS, o Transcribe ou outros.

Muitos criam um novo usuário do IAMe definem AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY nas variáveis de ambiente. O SDK da AWS usa “automaticamente” essas chaves ou valores de um arquivo de credenciais da AWS. (Consulte a documentação sobre como o SDK usa esses valores.) No entanto, adicionar essas credenciais a uma função Lambda seria um erro.

Identidade equivocada

Tentar o seguinte .env impede que um aplicativo acesse os serviços da AWS a partir do Lambda. A falha na conexão ocorre independentemente de como você configurou o usuário do IAM.

AWS_ACCESS_KEY_ID={{YOUR-ACCESS-KEY-HERE}} AWS_SECRET_ACCESS_KEY={{YOUR-SECRET-HERE}}

À medida que a função Lambda é implantada, as variáveis de ambiente mostradas acima são geradas pelo Lambda. Ou seja, os valores do arquivo .env não são definidos como esperado.

Para saber mais sobre como fazer a implantação com a tecnologia serverless, confira AWS Lambda com PHP usando Bref e Serverless Framework ou Python sem servidor com o AWS Lambda.

Definição de permissões

Com variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY definidas pelo Lambda, as permissões da função também precisam ser definidas durante a implantação. Todos os serviços da AWS também são gerenciados diretamente na função Lambda, em vez de por um usuário do IAM.

Abaixo está um exemplo parcial em YAML que utiliza o framework Serverless para implantar uma função do AWS Lambda.

provider:
    name: aws
    region: us-east-1
    runtime: provided
    iamRoleStatements:
        - Effect: Allow
          Action:
              - s3:PutObject
              - s3:GetObject
              - s3:DeleteObject
          Resource: 'arn:aws:s3:::bucket-name/*'
        - Effect: Allow
          Action: transcribe:*
          Resource: '*'

Observe o iamRoleStatements bloco no exemplo acima. Nele, é concedido ao Lambda s3:PutObject, s3:GetObjecte s3:DeleteObject permissões para o recurso bucket-name e a tudo o que nele estiver contido. Além disso, a função tem acesso aos transcribe:* serviços.

O exemplo acima é muito semelhante à forma como as permissões do IAM são definidas nos exemplos a seguir:

aws_iam_s3_policyAWS IAM S3 Policy Example

amazon_iam_transcribe_policyAWS IAM Transcribe Policy Example

Analisando as permissões

Após a implantação bem-sucedida no AWS Lambda, as permissões ativas da função podem ser visualizadas no Console da AWS. Para isso, acesse a guia “Permissões” no console da função.

lambda_function_permissionsAWS Lambda Function Permissions

A partir daí, você pode clicar nas permissões de cada serviço para obter uma descrição mais detalhada de como configurá-las.

E agora?

A documentação sobre as possíveis permissões para diversos serviços da AWS está disponível na Documentação do AWS Identity and Access Management. Além disso, fique atento a futuras publicações com exemplos práticos do uso dessas permissões.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpEx-funcionários da Vonage

Adam é um desenvolvedor e consultor que gosta de corridas de ultramaratona, escrever em blogs e gravar vlogs, além de ajudar outras pessoas a dominar a tecnologia para realizar coisas incríveis, movido por um desejo insaciável de orientar e ajudar.