AWS Lambda + Secrets Manager



This content originally appeared on DEV Community and was authored by Eduardo Garcia

Funções AWS Lambda são opções extremamente práticas que simplificam todo o processo de disponibilização de aplicações serverless.
Ao mesmo tempo que geram praticidade, também podem criar péssimos hábitos em nós, desenvolvedores.

Um desses maus costumes é a exposição de chaves de API externas ou conexões de banco de dados diretamente dentro do corpo de uma função Lambda. São incontáveis as vezes em que encontrei códigos semelhantes ao mostrado abaixo:

Bad practice

Nem é preciso dizer o quão ruim é manter suas configurações assim! Essa exposição de chaves é extremamente prejudicial por alguns fatores, dentre eles:

  • Vulnerabilidade da aplicação: qualquer vazamento de código, seja em um repositório público ou por um ataque, expõe suas credenciais ao mundo externo;
  • Falta de escalabilidade: caso seja necessário trocar de conexão com a base ou atualizar um par de API Keys, será preciso publicar novamente o código para que ele funcione. Em uma única Lambda isso é simples, mas quando falamos de funções críticas com múltiplas conexões, a situação complica.

Pensando nesses pontos, a melhor forma de manter suas chaves seguras é externalizar o armazenamento e o gerenciamento delas.
E é exatamente para isso que a AWS disponibiliza o AWS Secrets Manager, um serviço voltado para o controle e a centralização de credenciais de forma segura.

1. Configurando um conjunto de chaves na AWS

  1. Em sua conta da AWS, acesse o serviço AWS Secrets Manager e escolha a opção “Store a new secret”;
  2. Em Secret Type, selecione “Other type of secret” e preencha todas as chaves necessárias. Para este exemplo, foram criadas apenas duas. Em seguida, pressione Next.

Secret Configuration

Na próxima tela, escolha um nome descritivo para o conjunto de chaves.

Depois, basta confirmar as etapas seguintes. O conjunto de secrets ficará disponível instantaneamente e pode ser acessado no console em Overview → Retrieve Secret Value.

Secret Informations

Simples assim: suas secrets estão criadas e já podem ser usadas — seja em aplicações via SDK, seja através do CLI.

2. Buscando as chaves dentro da Lambda

Dentro de uma função Lambda, o uso das chaves é muito simples. No exemplo abaixo, estou utilizando o framework AWS SAM, configurado com Python 3.10 — uma versão que já inclui o SDK da AWS.

Com o pequeno bloco de código a seguir, é possível acessar as chaves configuradas:

Secret Usage on AWS Lambda

O parâmetro principal da função parameters.get_secret() é o nome atribuído ao conjunto de chaves. Os outros dois parâmetros são opcionais: um define o formato dos dados retornados e o outro o tempo de cache em segundos.

Tudo certo, certo? Quase!
Provavelmente, ao rodar sua Lambda — seja no ambiente de desenvolvimento ou em produção — você receberá um erro de permissão negada.

Isso acontece porque é necessário conceder à função permissão para ler chaves no Secrets Manager.

Essa permissão pode ser adicionada diretamente no template.yaml (no caso do AWS SAM), ou atribuída ao usuário/role que executa a função localmente via CLI. Na imagem abaixo, temos um exemplo de política que permite à função acessar o Secrets Manager:

Secrets Manager policy

3. Conclusão

Com esse setup feito, você está pronto para usar suas chaves de forma segura em funções Lambda! O uso do AWS Secrets Manager traz um ganho significativo de controle e escalabilidade, centralizando as credenciais dentro de um ambiente seguro e fácil de manter.

Além disso, o serviço permite configurar rotação automática de chaves, reduzindo o risco de vazamentos e simplificando ainda mais o gerenciamento de credenciais sensíveis.

Vale lembrar que, como todo serviço da AWS, o Secrets Manager possui um custo.

Antes de implementá-lo em larga escala, consulte os valores nesta página.

Abaixo está o link para meu repositório no GitHub, onde disponibilizo um projeto de exemplo com o uso do Secrets Manager em uma função Lambda criada com AWS SAM:

🔗 Eudu4rdo/AWS-SAM-Projects

Em resumo:

Ao adotar o Secrets Manager, você não apenas protege suas credenciais, mas também eleva o nível de segurança, profissionalismo e maturidade do seu ambiente serverless.


This content originally appeared on DEV Community and was authored by Eduardo Garcia