Usar segredos do Secrets Manager em funções do Lambda
O AWS Secrets Manager ajuda você a gerenciar credenciais, chaves de API e outros segredos de que as funções do Lambda precisam. Existem duas abordagens principais para recuperar segredos em suas funções do Lambda, ambas oferecendo melhor performance e custos mais baixos em comparação com a recuperação direta de segredos usando o AWSSDK:
-
Parâmetros da AWS e segredos da extensão do Lambda: uma solução independente de tempo de execução que fornece uma interface HTTP simples para recuperar segredos
-
Utilitário de parâmetros do Powertools para AWS Lambda: uma solução integrada de código que oferece suporte a vários provedores (Secrets Manager, Parameter Store, AppConfig) com transformações integradas
Ambas as abordagens mantêm caches locais de segredos, eliminando a necessidade de sua função chamar o Secrets Manager para cada invocação. Quando sua função solicita um segredo, o cache é verificado primeiro. Se o segredo estiver disponível e não tiver expirado, ele será retornado imediatamente. Caso contrário, ele é recuperado do Gerenciador de Segredos, armazenado em cache e retornado. O resultado desse mecanismo de armazenamento em cache são tempos de resposta mais rápidos e custos reduzidos por minimizar as chamadas de API.
Como escolher uma abordagem
Considere estes fatores ao escolher entre a extensão e o PowerTools:
- Use a extensão Lambda de parâmetros do AWS e segredos quando:
-
Você deseja uma solução independente de runtime que funcione com qualquer runtime do Lambda
Você prefere não adicionar dependências de código à sua função.
Você só precisa recuperar segredos do Secrets Manager ou Parameter Store
- Use o Powertools para o utilitário de parâmetros do AWS Lambda quando:
-
Você quer uma experiência de desenvolvimento integrada com o código do seu aplicativo
Você precisa de suporte para vários provedores (Secrets Manager, Parameter Store, AppConfig)
Você deseja transformações de dados integradas (análise JSON, decodificação em base64)
Você está usando tempos de execução Python, TypeScript, Java ou .NET
Quando usar o Secrets Manager com o Lambda
Os cenários comuns para usar o Secrets Manager com o Lambda incluem:
-
Armazenamento de credenciais de banco de dados que a função usa para se conectar ao Amazon RDS ou outros bancos de dados
-
Gerenciamento de chaves de API para os serviços externos que a função chama
-
Armazenamento de chaves de criptografia ou outros dados de configuração confidenciais
-
Rodízio automático de credenciais sem precisar atualizar o código da função
Usando os parâmetros AWS e segredos da extensão do Lambda
Os parâmetros e segredos do AWS: a extensão do Lambda usa uma interface HTTP simples compatível com qualquer tempo de execução Lambda. Por padrão, ela armazena os segredos em cache por 300 segundos (5 minutos) e pode armazenar até 1.000 segredos. Você pode personalizar essas configurações com variáveis de ambiente.
Usar o Secrets Manager em uma função do Lambda
Esta seção pressupõe que você já tenha criado um segredo do Secrets Manager. Para criar um segredo, consulte Criar um segredo do AWS Secrets Manager.
Escolha seu runtime preferido e siga as etapas para criar uma função que recupere os segredos do Secrets Manager. A função do exemplo recupera um segredo do Secrets Manager e pode ser usada para acessar credenciais de banco de dados, chaves de API ou outros dados de configuração confidenciais em seus aplicativos.
Abra a página Funções
do console do Lambda. -
Escolha a opção Criar função.
-
Selecione Criar do zero.
-
Em Function name (Nome da função), insira
secret-retrieval-demo. -
Escolha seu runtime preferido.
-
Escolha a opção Criar função.
Para carregar o pacote de implantação
-
Na guia Código da função, escolha Carregar de e selecione arquivo.zip (para Python e Node.js) ou arquivo.jar (para Java).
-
Carregue o pacote de implantação que você criou anteriormente.
-
Escolha Salvar.
Para adicionar a extensão do Lambda AWS Parameters and Secrets como uma camada
-
Na guia Código da função, role para baixo até Camadas.
-
Escolha Add a layer.
-
Selecione Camadas da AWS.
-
Escolha AWS-Parameters-and-Secrets-Lambda-Extension.
-
Selecione a versão mais recente.
-
Escolha Adicionar.
Para adicionar permissões do Secrets Manager à função de execução
-
Escolha a guia Configuration (Configuração) e, depois, Permissions (Permissões).
-
Em Nome do perfil, escolha o link para seu perfil de execução. Esse link abre o perfil no console do IAM.
-
Escolha Adicionar permissões e, em seguida, Criar política em linha.
-
Escolha a guia JSON e adicione a política a seguir. Em
Resource, insira o ARN do segredo. -
Escolha Próximo.
-
Insira um nome para a política.
-
Escolha Criar política.
Para testar a função
-
Volte para o console do Lambda.
-
Selecione a guia Testar.
-
Escolha Testar. Você deverá ver a seguinte resposta:
Variáveis de ambiente
A extensão do Lambda AWS Parameters and Secrets usa as configurações padrão a seguir. Você pode substituir essas configurações criando as variáveis de ambiente correspondentes. Para visualizar as configurações atuais de uma função, defina PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL como DEBUG. A extensão registrará as informações de configuração no CloudWatch Logs no início de cada invocação de função.
| Configuração | Valor padrão | Valores válidos | Variável de ambiente | Detalhes |
|---|---|---|---|---|
| Porta HTTP | 2773 | 1 - 65535 | PARAMETERS_SECRETS_EXTENSION_HTTP_PORT | Porta do servidor HTTP local |
| Cache habilitado | VERDADEIRO | TRUE | FALSE | PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED | Habilitar ou desabilitar o cache |
| Tamanho do cache | 1000 | 0 - 1.000 | PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE | Definir como 0 para desabilitar o cache |
| TTL do Secrets Manager | 300 segundos | 0 - 300 segundos | SECRETS_MANAGER_TTL | Vida útil dos segredos em cache. Defina como 0 para desabilitar o cache. Essa variável será ignorada se o valor de PARAMETERS_S_SECRETS_S_EXTENSION_CACHE_SIZE for 0. |
| TTL do Parameter Store | 300 segundos | 0 - 300 segundos | SSM PARAMETER_STORE_TTL | Vida útil dos parâmetros em cache. Defina como 0 para desabilitar o cache. Essa variável será ignorada se o valor de PARAMETERS_S_SECRETS_S_EXTENSION_CACHE_SIZE for 0. |
| Nível de log | INFORMAÇÕES | DEPURAR | INFORMAÇÕES | AVISAR | ERRO | NENHUM | PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL | O nível de detalhes relatado nos logs para a extensão |
| Máximo de conexões | 3 | 1 ou mais | PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS | Número máximo de conexões HTTP para solicitações ao Parameter Store ou ao Secrets Manager |
| Tempo limite do Secrets Manager | 0 (sem tempo limite) | Todos os números inteiros | SECRETS_MANAGER_TIMEOUT_MILLIS | Tempo limite para solicitações ao Secrets Manager (em milissegundos) |
| Tempo limite do Parameter Store | 0 (sem tempo limite) | Todos os números inteiros | SSM_PARAMETER_STORE_TIMEOUT_MILLIS | Tempo limite para solicitações ao Parameter Store (em milissegundos) |
Trabalhar com rodízio de segredos
Se você fizer o rodízio dos segredos com frequência, a duração padrão do cache de 300 segundos poderá fazer com que a função use segredos desatualizados. Você tem duas opções para garantir que a função use o valor secreto mais recente:
-
Reduza o TTL do cache definindo a variável de ambiente
SECRETS_MANAGER_TTLcomo um valor menor (em segundos). Por exemplo, configurá-la como60garante que a função nunca use um segredo que tenha mais de um minuto. -
Use os rótulos de preparação
AWSCURRENTouAWSPREVIOUSna solicitação de segredo para garantir que obterá a versão específica que deseja:secretsmanager/get?secretId=YOUR_SECRET_NAME&versionStage=AWSCURRENT
Escolha a abordagem que melhor equilibre suas necessidades de performance e brevidade. Um TTL mais baixo significa chamadas mais frequentes para o Secrets Manager, mas garante que você esteja trabalhando com os valores de segredo mais recentes.
Uso do utilitário de parâmetros do Powertools para AWS Lambda
O utilitário de parâmetros do Powertools para AWS Lambda fornece uma interface unificada para recuperar segredos de vários provedores, incluindo Secrets Manager, Parameter Store e AppConfig. Ele lida com o armazenamento em cache, transformações e fornece uma experiência de desenvolvimento mais integrada em comparação com a abordagem de extensão.
Benefícios do utilitário de parâmetros
Vários provedores: recupere parâmetros do Secrets Manager, Parameter Store e AppConfig usando a mesma interface
Transformações integradas: análise automática de JSON, decodificação base64 e outras transformações de dados
Cache integrado - Cache configurável com suporte a TTL para reduzir as chamadas de API
Segurança de digitação: forte suporte de digitação em TypeScript e outros tempos de execução suportados
Tratamento de erros: lógica de repetição e tratamento de erros incorporados
Exemplos de código
Os exemplos a seguir mostram como recuperar segredos usando o utilitário de Parâmetros em diferentes tempos de execução:
- Python
-
nota
Para obter exemplos completos e instruções de configuração, consulte a documentação do utilitário de Parâmetros
. Recuperar segredos do Secrets Manager com o utilitário de Parâmetros do Powertools para AWS Lambda.
from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities import parameters logger = Logger() def lambda_handler(event, context): try: # Get secret with caching (default TTL: 5 seconds) secret_value = parameters.get_secret("my-secret-name") # Get secret with custom TTL secret_with_ttl = parameters.get_secret("my-secret-name", max_age=300) # Get secret and transform JSON secret_json = parameters.get_secret("my-json-secret", transform="json") logger.info("Successfully retrieved secrets") return { 'statusCode': 200, 'body': 'Successfully retrieved secrets' } except Exception as e: logger.error(f"Error retrieving secret: {str(e)}") return { 'statusCode': 500, 'body': f'Error: {str(e)}' } - TypeScript
-
nota
Para obter exemplos completos e instruções de configuração, consulte a documentação do utilitário de Parâmetros.
Recuperar segredos do Secrets Manager com o utilitário de Parâmetros do Powertools para AWS Lambda.
import { Logger } from '@aws-lambda-powertools/logger'; import { getSecret } from '@aws-lambda-powertools/parameters/secrets'; import type { Context } from 'aws-lambda'; const logger = new Logger(); export const handler = async (event: any, context: Context) => { try { // Get secret with caching (default TTL: 5 seconds) const secretValue = await getSecret('my-secret-name'); // Get secret with custom TTL const secretWithTtl = await getSecret('my-secret-name', { maxAge: 300 }); // Get secret and transform JSON const secretJson = await getSecret('my-json-secret', { transform: 'json' }); logger.info('Successfully retrieved secrets'); return { statusCode: 200, body: 'Successfully retrieved secrets' }; } catch (error) { logger.error('Error retrieving secret', { error }); return { statusCode: 500, body: `Error: ${error}` }; } }; - Java
-
nota
Para obter exemplos completos e instruções de configuração, consulte a documentação do utilitário de Parâmetros
. Recuperar segredos do Secrets Manager com o utilitário de Parâmetros do Powertools para AWS Lambda.
import software.amazon.lambda.powertools.logging.Logging; import software.amazon.lambda.powertools.parameters.SecretsProvider; import software.amazon.lambda.powertools.parameters.ParamManager; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class SecretHandler implements RequestHandler<Object, String> { private final SecretsProvider secretsProvider = ParamManager.getSecretsProvider(); @Logging @Override public String handleRequest(Object input, Context context) { try { // Get secret with caching (default TTL: 5 seconds) String secretValue = secretsProvider.get("my-secret-name"); // Get secret with custom TTL (300 seconds) String secretWithTtl = secretsProvider.withMaxAge(300).get("my-secret-name"); // Get secret and transform JSON MySecret secretJson = secretsProvider.get("my-json-secret", MySecret.class); return "Successfully retrieved secrets"; } catch (Exception e) { return "Error retrieving secret: " + e.getMessage(); } } public static class MySecret { // Define your secret structure here } } - .NET
-
nota
Para obter exemplos completos e instruções de configuração, consulte a documentação do utilitário de Parâmetros.
Recuperar segredos do Secrets Manager com o utilitário de Parâmetros do Powertools para AWS Lambda.
using AWS.Lambda.Powertools.Logging; using AWS.Lambda.Powertools.Parameters; using Amazon.Lambda.Core; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] public class Function { private readonly ISecretsProvider _secretsProvider; public Function() { _secretsProvider = ParametersManager.SecretsProvider; } [Logging] public async Task<string> FunctionHandler(object input, ILambdaContext context) { try { // Get secret with caching (default TTL: 5 seconds) var secretValue = await _secretsProvider.GetAsync("my-secret-name"); // Get secret with custom TTL var secretWithTtl = await _secretsProvider.WithMaxAge(TimeSpan.FromMinutes(5)) .GetAsync("my-secret-name"); // Get secret and transform JSON var secretJson = await _secretsProvider.GetAsync<MySecret>("my-json-secret"); return "Successfully retrieved secrets"; } catch (Exception e) { return $"Error retrieving secret: {e.Message}"; } } public class MySecret { // Define your secret structure here } }
Configuração e permissões
Para usar o utilitário de Parâmetros, você precisa:
Instalar o Powertools para AWS Lambda para seu runtime. Para obter detalhes, consulte Powertools para AWS Lambda.
Para obter exemplos completos e instruções de configuração, consulte a documentação do utilitário de Parâmetros. Para mais detalhes, consulte Gerenciando permissões no AWS Lambda.
Defina configurações opcionais por meio de variáveis de ambiente.
As permissões do IAM obrigatórias são as mesmas que para a abordagem de extensão. O utilitário manipulará automaticamente o armazenamento em cache e as chamadas de API para o Secrets Manager com base na sua configuração.