Adicionar permissão do DynamoDB ao Lambda [Guia prático]
Escrito por Charlie Fish
Publicado em 3 de outubro de 2022
É hora de aumentar em 10x sua produtividade do DynamoDB com Dynobase [saiba mais]
O que é AWS IAM?
AWS IAM significa Amazon Web Services Identity and Access Management. É um serviço que ajuda você a gerenciar acessos/permissões aos recursos da AWS. Você pode usar o AWS IAM para criar e gerenciar usuários e grupos da AWS e usar permissões para permitir e negar acesso aos recursos da AWS. Além disso, você também pode especificar permissões para determinadas ações que podem ser executadas nesses recursos, proporcionando muita flexibilidade para definir limites específicos para os recursos.
Dando acesso a uma função Lambda a uma tabela do DynamoDB – O que você precisa saber
Antes de começarmos, há algumas coisas importantes a serem lembradas ao conceder acesso a uma função Lambda a uma tabela do DynamoDB.
Primeiro, queremos definir apenas o escopo mais limitado possível para nossa função Lambda. Por exemplo, se você tiver várias tabelas do DynamoDB, mas sua função do Lambda só precisar de acesso a uma tabela, você deverá limitar o escopo para conceder acesso apenas a essa tabela. Além disso, isso se aplica a ações. Se a sua função Lambda precisar apenas executar o
comando getItem, você deverá conceder acesso apenas a esse comando.
Outra coisa importante é que
* representa um curinga nas políticas do IAM. Isso significa que você pode usar esse curinga tanto em ações quanto em recursos para tornar suas políticas mais dinâmicas.
Como estamos usando funções do IAM vinculadas diretamente à nossa função Lambda, você não precisa especificar chave de acesso ou chaves secretas em seu aplicativo ou variáveis ​​de ambiente. Se você estiver usando o AWS-SDK em sua função, o SDK usará automaticamente a política anexada. Isso mostra novamente a incrível integração entre os serviços da AWS, facilitando a proteção de seus recursos.
Como conceder acesso à função AWS Lambda ao DynamoDB por meio do console AWS?
Primeiro, vamos ver como conceder acesso a uma função Lambda a uma tabela do DynamoDB por meio do Console AWS.
Etapa 1: crie uma nova política IAM
Primeiro, precisamos criar uma nova política IAM. Para fazer isso, navegaremos até o serviço IAM no Console AWS. Uma vez lá, clicaremos no
Guia Políticas no lado esquerdo. Então clicaremos no
Botão Criar política.
Isso abrirá uma página onde você pode definir sua nova política. Você pode optar por usar o editor visual ou o editor JSON. Neste guia, focaremos no editor JSON, mas fique à vontade para usar aquele com o qual você se sentir mais confortável. Os conceitos gerais que abordaremos são os mesmos dependendo da interface que você escolher.
Para esta política, inseriremos o seguinte JSON:
Esta política permitirá que o DynamoDB
Comandos getItem para o ARN do recurso:
Para modificar isso para o seu caso de uso, você precisará alterar o
Recurso ARN para o ARN da sua tabela DynamoDB. Você pode fazer isso alterando:
us-west-2para a região em que sua tabela do DynamoDB existe
123456789123 para o ID da sua conta AWS
LambdaDynamoDBPermissionExampleto o nome da sua tabela DynamoDB
Você também pode adicionar mais ações ao
Matriz de ação. Além disso, você pode adicionar mais recursos ao
Matriz de recursos. Isso permitirá que você conceda à sua função Lambda acesso a várias tabelas e/ou ações do DynamoDB.
Na próxima página, podemos opcionalmente adicionar tags à nossa política para identificá-la facilmente.
Finalmente, temos que nomear a nossa política e confirmar a criação da política.
Etapa 2: criar uma nova função IAM
Primeiro, vamos criar uma nova função do IAM. Para fazer isso, navegue até o serviço IAM no Console AWS e clique no botão
Guia Funções na barra de navegação esquerda. Em seguida, clique no
Botão Criar função.
Isso abrirá o assistente para criar uma nova função.
A partir daqui, certifique-se de escolher o
Caso de uso do Lambda para permitir que a função seja anexada a uma função do Lambda.
A seguir, você pode adicionar sua política criada na etapa 1 à nossa função.
Finalmente, definimos um nome e opcionalmente uma descrição e tags para nossa política.
Agora estamos prontos para anexar nossa função IAM à nossa função Lambda.
Etapa 3: anexe a função IAM à sua função Lambda
Agora, vamos conceder acesso à nossa função Lambda para usar nossa função IAM.
Para fazer isso, navegue até sua função Lambda no Console AWS. Em seguida, navegue até a guia Configuração > Permissões.
Por padrão, você verá uma função padrão na seção Função de execução.
No canto superior direito da seção Função de execução, clique no botão
Na parte inferior desta página, você verá um menu suspenso para a função existente. Selecione a função que você criou na etapa 2 nesta lista suspensa. Então clique
Isso é tudo que você precisa fazer para conceder à função Lambda acesso à tabela do DynamoDB.
Como conceder acesso AWS Lambda ao DynamoDB por meio do Terraform?
Você também pode conceder acesso do AWS Lambda ao DynamoDB por meio do Terraform.
Primeiro, criamos nossa tabela DynamoDB no Terraform:
Então podemos criar nossa política IAM:
Observe como conseguimos fazer referência direta ao ARN usando
aws_dynamodb_table.productionUsersTable.arn. Isso fará referência automaticamente ao ARN daquele recurso de tabela do DynamoDB que provisionamos anteriormente. Um benefício importante disso é que (embora raro), se o ARN mudar, a política será atualizada automaticamente para refletir o novo ARN sem quaisquer alterações manuais exigidas de nossa parte.
A seguir, podemos criar nossa função IAM:
Agora vamos anexar nossa política IAM à nossa função:
Por fim, vamos criar nossa função Lambda com nossa função IAM anexada a ela:
Isso é tudo que precisamos fazer para conceder à nossa função Lambda acesso à nossa tabela DynamoDB no Terraform.
Como você pode ver, o Terraform é poderoso porque permite que diferentes recursos façam referência facilmente a atributos de outros para criar uma infraestrutura dinâmica toda em código.
Outros exemplos de políticas de IAM de concessão do DynamoDB
Com todos esses exemplos, lembre-se de alterar os valores dinâmicos para corresponder à sua conta.
getItem Acesso a todas as tabelas que começam com um prefixo
Isto concederá
acesso da ação getItem a todas as tabelas do DynamoDB que começam com
Conceda acesso total ao DynamoDB a todas as tabelas
Embora não seja recomendado (já que você deve conceder acesso apenas às ações e recursos necessários), o exemplo a seguir mostra como conceder acesso total ao DynamoDB a todas as tabelas.
perguntas frequentes
Por que preciso conceder acesso à minha função Lambda ao DynamoDB?
Por padrão, as funções do Lambda não têm acesso a nenhum recurso do DynamoDB. Portanto, sempre que você tentar acessar o DynamoDB a partir de sua função Lambda, a AWS retornará um erro ao seu aplicativo.
Portanto, você deve conceder permissões de função do Lambda para acessar suas tabelas do DynamoDB.
Posso conceder à minha função Lambda acesso a tudo no DynamoDB?
Tecnicamente, sim. Contudo, isto não é recomendado. Você só deve conceder acesso às ações e recursos necessários. Isso ajuda a fornecer segurança aprimorada e também evita que você conceda acesso acidentalmente a algo que não pretendia.
Um exemplo comum disso é que as varreduras do DynamoDB devem ser evitadas (exceto em casos muito específicos). Usar políticas IAM para restringir o acesso e não permitir verificações em sua tabela é uma excelente camada extra para ajudar a evitar verificações acidentais de toda a tabela.
Posso atribuir várias funções do IAM à minha função do Lambda?
Você não pode atribuir várias funções do IAM a uma função do Lambda. No entanto, você pode anexar várias políticas do IAM a uma única função do IAM, que pode então ser anexada à sua função do Lambda.
Qual é a diferença entre uma política IAM e uma função?
Uma política do IAM é um documento que define uma ou mais permissões. Uma função do IAM é um agrupamento lógico de políticas do IAM. Você pode anexar várias políticas do IAM a uma única função do IAM.
Preciso adicionar minha chave de acesso e chave secreta à minha função Lambda?
Não. Como estamos usando uma função do IAM diretamente anexada à função do Lambda, não há necessidade de incorporar acesso ou chaves secretas no código da função do Lambda ou nas variáveis ​​de ambiente. A autenticação é feita automaticamente pela AWS.