O blog da AWS
Como fornecer credenciais de banco de dados com segurança para funções do Lambda (AWS Lambda Functions) usando o AWS Secrets Manager
Visão Geral de Solução
Neste exemplo de Código: Iremos utilizar um template do AWS CloudFormation para implementar os seguintes componentes para que seja possível testar a API a partir do seu navegador:
- Uma instância do RDS MySQL em uma instância do tipot3.micro
- Duas funções lambda com funções e políticas de IAM necessárias, incluindo acesso ao AWS Secrets Manager:
- LambdaRDSCFNInit: Essa função Lambda será executada imediatamente após a criação da pilha CloudFormation. Ela criará uma tabela “Employees” no banco de dados, onde inserirá três registros de amostra.
- LambdaRDSTest: Essa função consultará a tabela Employees e retornará a contagem de registros em um formato de string HTML.
- RESTful API com método “GET” no AWS API Gateway
Aqui está a configuração de alto nível dos serviços da AWS que serão criados a partir da implantação da pilha CloudFormation:
- Os clientes chamam a API RESTful hospedada no AWS API Gateway
- O API Gateway executa a função Lambda
- A função Lambda recupera os segredos do banco de dados usando a API Secrets Manager
- A função Lambda se conecta ao banco de dados do RDS usando segredos do banco de dados do Secrets Manager e retorna os resultados da consulta
Você pode acessar o código-fonte de exemplo usada nesta postagem aqui: https://github.com/aws-samples/aws-secrets-manager-secure-database-credentials
Implementando a solução de exemplo
Faça login em sua conta da AWS, siga as instruções para fazer login.
Por padrão, a pilha será implantada na região us-east-1. Se você quiser implantar essa pilha em qualquer outra região, baixe o código do link do código-fonte acima, crie um arquivo zip usando o arquivo readme, coloque o arquivo zip do código Lambda em um bucket S3 específico da região e faça as alterações necessárias no modelo do CloudFormation para apontar para o bucket S3 correto. (Consulte o Guia do usuário do AWS CloudFormation para obter detalhes adicionais sobre como criar pilhas usando o console do AWS CloudFormation.)
Em seguida, siga estas etapas para executar a pilha:
- Após o login, acesse o serviço CloudFormation no console da AWS. Selecione a opção Pilhas e, em seguida, selecione a opção Criar pilha.
- Selecione O modelo está pronto e selecione Fazer upload de um arquivo de modelo. Em seguida, clique no botão Escolher arquivo para escolher o arquivo de modelo (SecretsManager_IAC.yml) da sua área de trabalho. Clique em Próximo.
- Na página Especificar detalhes da pilha, você verá os parâmetros pré-preenchidos. Esses parâmetros incluem o nome do banco de dados e o nome do usuário do banco de dados. Insira um nome no campo Nome da pilha. Selecione Próximo nesta tela.
- Na página Configurar opções da pilha, selecione o botão Próximo.
- Na tela Revisar, marque todas as três caixas de seleção e, em seguida, selecione o botão Criar conjunto de alterações:
- Depois que a criação do conjunto de alterações for concluída, escolha o botão Executar Conjunto de Alterações para iniciar a pilha.
- A criação da pilha levará entre 10 e 15 minutos. Depois que a pilha for criada com sucesso, selecione a guia Saídas da pilha e selecione o link.
Essa ação acionará o código na função Lambda, que consultará a tabela “Employee” no banco de dados MySQL e retornará a contagem de resultados para a API. Você verá a tela a seguir como saída do endpoint da API RESTful:
Neste momento, você implantou e testou com sucesso o endpoint da API com uma função Lambda e recursos de RDS. A função Lambda é capaz de consultar com êxito o banco de dados MySQL RDS e é capaz de retornar os resultados por meio do endpoint da API.
O que está acontecendo por trás?
A pilha do CloudFormation implantou um banco de dados MySQL RDS com uma senha gerada aleatoriamente usando um secret resource. Agora que o recurso secreto com senha gerada aleatoriamente foi criado, a pilha do CloudFormation usará a referência dinâmica para recuperar o valor da senha do Secrets Manager a fim de criar o recurso de instância do RDS. As referências dinâmicas fornecem uma maneira compacta e poderosa de especificar valores externos que são armazenados e gerenciados em outros serviços da AWS, como o Secrets Manager. A referência dinâmica garante que o CloudFormation não registre ou persista o valor resolvido, mantendo a senha do banco de dados segura. O modelo do CloudFormation também cria uma função Lambda para fazer a rotação automática da senha para o banco MySQL RDS a cada 30 dias. A rotação nativa de credenciais pode melhorar a postura de segurança, pois elimina a necessidade de lidar manualmente com as senhas do banco de dados durante o ciclo de vida do processo.
Abaixo está um código de referência do CloudFormation que abrange esses detalhes (certifique-se de usar sua versão do modelo do CloudFormation conforme descrito no arquivo readme do código de exemplo):
Verificando a Solução
Para ter certeza de que tudo está configurado corretamente, você pode examinar o código Lambda que está consultando a tabela do banco de dados seguindo as etapas abaixo:
- Vá para a página de serviços doAWS Lambda
- Na lista de funções lambda, clique na função com o nome scm2-LambdaRDSTest-…
- Você pode ver as variáveis de ambiente na parte inferior da tela de detalhes da configuração da Lambda. Observe que não deve haver nenhuma senha de banco de dados fornecida como parte dessas variáveis de ambiente:
No console do AWS Secrets Manager, você também pode ver o novo segredo que foi criado a partir da execução do CloudFormation seguindo as etapas abaixo:
- Vá até a página de serviços do AWS Secret Manager com as permissõesIAM apropriadas
- Na lista de segredos, clique no último segredo com o nome MyRDSInstanceRotationSecret-…
- Você verá os detalhes secretos e as informações de rotação na tela, conforme mostrado na captura de tela a seguir:
Conclusão
Neste post, mostramos como gerenciar segredos de banco de dados usando o AWS Secrets Manager e como aproveitar a API do Secrets Manager para recuperar os segredos em um ambiente de execução Lambda para melhorar a segurança do banco de dados e proteger dados confidenciais. O Secrets Manager ajuda você a proteger o acesso aos seus aplicativos, serviços e recursos de TI sem o investimento inicial e os custos de manutenção contínuos de operar sua própria infraestrutura de gerenciamento de segredos. Para começar, visite o console do Secrets Manager. Para saber mais, visite a Documentação do Secrets Manager .
Se você tiver algum feedback sobre esta blog post, comente na seção abaixo. Se você tiver dúvidas sobre como implementar o exemplo usado nesta postagem, abra um tópico Secrets Manager Forum.
Quer mais conteúdo de instruções, notícias e anúncios de recursos sobre segurança da AWS? Siga-nos em Twitter.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre os autores
Ramesh adabala é Arquiteto de Soluções na equipe de Enterprise Solution Architecture da AWS.