Usando a extensão Lambda de parâmetros e segredos da AWS

Mar 18 2023
Neste artigo vamos ver como usar a extensão “AWS Parameters and Secrets Lambda”. Essa extensão permite solicitar e armazenar em cache segredos e parâmetros durante o ciclo de vida da função Lambda sem exigir o uso do SDK e lidar com o cache por conta própria.

Neste artigo vamos ver como usar a extensão “ AWS Parameters and Secrets Lambda ”. Essa extensão permite solicitar e armazenar em cache segredos e parâmetros durante o ciclo de vida da função Lambda sem exigir o uso do SDK e lidar com o cache por conta própria.

Estaremos construindo um Lambda de amostra que faz referência e usa essa extensão. Do lado da IaC, usaremos o CloudFormation para usar essa extensão, adicionada como uma camada, para esse Lambda.

TL;DR

Você encontrará o repositório completo aqui https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-sample

Sobre as extensões do Lambda

As extensões Lambda podem executar ferramentas de suporte junto com uma função Lambda. Geralmente essas extensões cobrem questões como segurança e observabilidade.

Eles são executados internamente como parte do processo lambda ou externamente como outro processo no ambiente de execução e têm acesso aos eventos do ciclo de vida lambda, permitindo realizar ações em pontos específicos da execução da função (por exemplo, recuperar um segredo quando o lambda runtime é inicializado).

Atuando como um sidecar , as extensões lambda não exigem a alteração do código de função lambda. Eles são fornecidos como camadas Lambda.

Usando a extensão

A extensão de parâmetros e segredos da AWS expõe endpoints HTTP internos para recuperar os segredos ou valores de parâmetros.

Por exemplo, para obter o valor de um segredo nomeado, some-third-party-api-key precisaremos:

  • Consulte esse endpoint GET: http://localhost:2773/secretsmanager/get?secretId=some-third-party-api-keydiretamente no código lambda. 2773é a porta padrão para o servidor HTTP local da extensão, isso pode ser alterado definindo esta variável de ambiente PARAMETERS_SECRETS_EXTENSION_HTTP_PORTusada pela extensão. Ao consultar esse endpoint, precisamos definir esse cabeçalho X-Aws-Parameters-Secrets-Tokencom o valor da AWS_SESSION_TOKENvariável de ambiente.
  • Conceda à função de execução lambda a permissão secretsManager:GetSecretValuepara some-third-party-api-keysegredo

Você pode seguir este link para a lista completa dos parâmetros e variáveis ​​de ambiente suportadas por esta extensão.

O que vamos construir?

Para ilustrar o uso da extensão, vamos construir uma API fornecendo a previsão do tempo e a qualidade do ar em um determinado local (um nome de cidade e um país). Usaremos o OpenWeather Api como provedor de geocodificação e previsão do tempo.

Uma arquitetura bastante básica: um AWS Lambda, um API Gateway e um segredo contendo a chave API para a API OpenWeather.

Usaremos o tempo de execução do nó e o typescript para o código Lambda.

Vamos ver o código

O lambda “obter clima e qualidade do ar” é bastante simples. Obtém a cidade e o país do contexto do pedido e chamagetWeatherAndAirQualityForCity

getWeatherAndAirQualityForCityirá então chamar a API OpenWeather. Ele precisa da chave de API armazenada no segredo.

Aqui como usamos a extensão AWS Parameters and Secrets no código Lambda

você encontrará o código lambda completo aqui

Criando o recurso Lambda e usando a camada de extensão

Os bits relevantes :

precisaremos adicionar o ARN da extensão na Layerslista para usar a extensão no ambiente de execução do Lambda.

Como temos um ARN diferente por região , estamos declarando os ARNs das extensões como um mapa de regiões:

Sobre o segredo

Vamos injetar o nome do segredo como uma variável de ambiente OPEN_WEATHER_API_KEY_SECRET_NAME E essa função lambda precisa de allow secretsManager:GetSecretValueuma política para poder ler o segredo:

Você encontrará o modelo CloudFormation completo desta função lambda aqui

Empacotando

A extensão de parâmetros e segredos da AWS é uma boa adição ao ecossistema lambda, mas pode não ser necessária para casos de uso básicos ( por exemplo , chamar simplesmente o SDK na inicialização do Lambda pode ser suficiente em alguns casos de uso)

⚠️ Uma observação importante: no momento em que escrevo, esta extensão não suporta Lambda com arquitetura ARM em algumas regiões.

Você pode encontrar o aplicativo completo com um fluxo de trabalho completo de ações CI/CD Github aqui https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-sample

Atualização: se você estiver procurando por uma amostra dotnet, também criei um aplicativo de amostra : https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-dotnet-sample

Leituras adicionais