Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Usa i segreti di Secrets Manager nelle funzioni Lambda
AWS Secrets Manager ti aiuta a gestire credenziali, chiavi API e altri segreti necessari alle tue funzioni Lambda. Esistono due approcci principali per il recupero dei segreti nelle funzioni Lambda, entrambi offrono prestazioni migliori e costi inferiori rispetto al recupero diretto dei segreti tramite l'SDK: AWS
-
AWS parametri e segreti Estensione Lambda: una soluzione indipendente dal runtime che fornisce una semplice interfaccia HTTP per il recupero dei segreti
-
Powertools for AWS Lambda parameters utility: una soluzione integrata nel codice che supporta più provider (Secrets Manager, Parameter Store AppConfig) con trasformazioni integrate
Entrambi gli approcci mantengono cache locali di segreti, eliminando la necessità per la funzione di chiamare Secrets Manager per ogni chiamata. Quando la funzione richiede un segreto, la cache viene controllata per prima. Se il segreto è disponibile e non è scaduto, viene restituito immediatamente. Altrimenti, viene recuperato da Secrets Manager, memorizzato nella cache e restituito. Questo meccanismo di memorizzazione nella cache consente tempi di risposta più rapidi e costi ridotti riducendo al minimo le chiamate API.
Scelta di un approccio
Considerate questi fattori quando scegliete tra l'estensione e PowerTools:
- Usa l'estensione Lambda AWS Parametri e segreti quando:
-
Desideri una soluzione indipendente dal runtime che funzioni con qualsiasi runtime Lambda
Preferisci non aggiungere dipendenze di codice alla tua funzione
È sufficiente recuperare i segreti da Secrets Manager o Parameter Store.
- Utilizzate Powertools per l'utilità AWS Lambda dei parametri quando:
-
Desiderate un'esperienza di sviluppo integrata con il codice dell'applicazione
È necessario il supporto per più provider (Secrets Manager, Parameter Store, AppConfig)
Desideri trasformazioni dei dati integrate (analisi JSON, decodifica base64)
Stai usando i runtime Python TypeScript, Java o.NET
Quando usare Secrets Manager con Lambda
Gli scenari più comuni per l'utilizzo di Secrets Manager con Lambda includono:
-
Memorizzazione delle credenziali del database utilizzate dalla funzione per connettersi ad Amazon RDS o ad altri database
-
Gestione delle chiavi API per i servizi esterni chiamati dalle tue funzioni
-
Archiviazione delle chiavi di crittografia o di altri dati di configurazione sensibili
-
Rotazione automatica delle credenziali senza dover aggiornare il codice della funzione
Utilizzo dei AWS parametri e dei segreti (estensione Lambda)
L'estensione Lambda AWS Parameters and Secrets utilizza una semplice interfaccia HTTP compatibile con qualsiasi runtime Lambda. Per impostazione predefinita, memorizza nella cache i segreti per 300 secondi (5 minuti) e può contenere fino a 1.000 segreti. È possibile personalizzare queste impostazioni con variabili di ambiente.
Usa Secrets Manager in una funzione Lambda
Questa sezione presuppone che tu abbia già un segreto di Secrets Manager. Per creare un segreto, vedi Creare un AWS Secrets Manager segreto.
Scegli il tuo runtime preferito e segui i passaggi per creare una funzione che recuperi segreti da Secrets Manager. La funzione di esempio recupera un segreto da Secrets Manager e può essere utilizzata per accedere alle credenziali del database, alle chiavi API o ad altri dati di configurazione sensibili nelle applicazioni.
Aprire la pagina Funzioni
della console Lambda. -
Scegli Crea funzione.
-
Scegli Crea da zero.
-
Nel campo Function name (Nome funzione), immettere
secret-retrieval-demo. -
Scegliete il vostro runtime preferito.
-
Scegli Crea funzione.
Per caricare il pacchetto di distribuzione
-
Nella scheda Codice della funzione, scegli Carica da e seleziona il file.zip (per Python e Node.js) o.jar (per Java).
-
Carica il pacchetto di distribuzione creato in precedenza.
-
Scegli Save (Salva).
Per aggiungere l'estensione Lambda AWS Parameters and Secrets come livello
-
Nella scheda Codice della funzione, scorri verso il basso fino a Livelli.
-
Scegliere Add a layer (Aggiungi un livello).
-
Seleziona AWS i livelli.
-
Scegliete AWS-parameters-and-Secrets-Lambda-Extension.
-
Seleziona la versione più recente.
-
Scegli Aggiungi.
Per aggiungere le autorizzazioni di Secrets Manager al tuo ruolo di esecuzione
-
Quindi, seleziona la scheda Configuration (Configurazione) e poi Permissions (Autorizzazioni).
-
In Nome del ruolo, scegli il link al tuo ruolo di esecuzione. Questo ruolo si apre nella console IAM.
-
Scegli Aggiungi autorizzazioni, quindi seleziona Crea policy in linea.
-
Scegli la scheda JSON e aggiungi la seguente politica. Per
Resource, inserisci l'ARN del tuo segreto. -
Scegli Next (Successivo).
-
Inserisci un nome per la policy.
-
Scegli Crea policy.
Per testare la funzione
-
Torna alla console Lambda.
-
Seleziona la scheda Test.
-
Scegli Test (Esegui test). Dovrebbe essere visualizzata la seguente risposta:
Variabili di ambiente
L'estensione Lambda AWS Parameters and Secrets utilizza le seguenti impostazioni predefinite. È possibile sovrascrivere queste impostazioni creando le variabili di ambiente corrispondenti. Per visualizzare le impostazioni correnti di una funzione, PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL impostare DEBUG su. L'estensione registrerà le informazioni di configurazione in CloudWatch Logs all'inizio di ogni chiamata di funzione.
| Impostazione | Valore predefinito | Valori validi | Variabile di ambiente | Dettagli |
|---|---|---|---|---|
| Porta HTTP | 2773 | 1 - 65535 | PARAMETERS_SECRETS_EXTENSION_HTTP_PORT | Porta per il server HTTP locale |
| Cache abilitata | TRUE | TRUE | FALSE | PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED | Abilita o disabilita la cache |
| Dimensioni della cache | 1000 | 0 - 1000 | PARAMETRI_SECRETS_EXTENSION_CACHE_SIZE | Imposta su 0 per disabilitare la memorizzazione nella cache |
| Secrets Manager TTL | 300 secondi | 0-300 secondi | SECRETS_MANAGER_TTL | Time-to-live per segreti memorizzati nella cache. Impostare su 0 per disabilitare la memorizzazione nella cache. Questa variabile viene ignorata se il valore di PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE è 0. |
| Parameter Store TTL | 300 secondi | 0-300 secondi | SSM_PARAMETER_STORE_TTL | Time-to-live per i parametri memorizzati nella cache. Impostare su 0 per disabilitare la memorizzazione nella cache. Questa variabile viene ignorata se il valore di PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE è 0. |
| Livello log | INFO | DEBUG | INFO | WARN | ERRORE | NESSUNO | PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL | Il livello di dettaglio riportato nei log dell'estensione |
| Numero massimo di connessioni | 3 | Uguale o maggiore di 1 | PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS | Numero massimo di connessioni HTTP per le richieste a Parameter Store o Secrets Manager |
| Timeout di Secrets Manager | 0 (nessun timeout) | Tutti i numeri interi | SECRETS_MANAGER_TIMEOUT_MILLIS | Timeout per le richieste a Secrets Manager (in millisecondi) |
| Timeout dell'archivio dei parametri | 0 (nessun timeout) | Tutti i numeri interi | SSM_PARAMETER_STORE_TIMEOUT_MILLIS | Timeout per le richieste a Parameter Store (in millisecondi) |
Lavorare con rotazione segreta
Se ruotate spesso i segreti, la durata predefinita di 300 secondi della cache potrebbe far sì che la funzione utilizzi segreti obsoleti. Sono disponibili due opzioni per garantire che la funzione utilizzi il valore segreto più recente:
-
Riduci il TTL della cache impostando la variabile di
SECRETS_MANAGER_TTLambiente su un valore inferiore (in secondi). Ad esempio, impostandolo per60garantire che la funzione non utilizzi mai un segreto vecchio di più di un minuto. -
Usa le etichette
AWSCURRENToAWSPREVIOUSstaging nella tua richiesta segreta per assicurarti di ottenere la versione specifica che desideri:secretsmanager/get?secretId=YOUR_SECRET_NAME&versionStage=AWSCURRENT
Scegliete l'approccio che meglio bilancia le vostre esigenze di prestazioni e freschezza. Un TTL inferiore significa chiamate più frequenti a Secrets Manager, ma garantisce l'utilizzo dei valori segreti più recenti.
Utilizzo dell'utilità per i parametri di Powertools per AWS Lambda
L'utilità dei parametri di Powertools for AWS Lambda fornisce un'interfaccia unificata per il recupero di segreti da più provider, tra cui Secrets Manager, Parameter Store e. AppConfig Gestisce la memorizzazione nella cache, le trasformazioni e offre un'esperienza di sviluppo più integrata rispetto all'approccio di estensione.
Vantaggi dell'utilità Parameters
Provider multipli: recupera i parametri da Secrets Manager, Parameter Store e AppConfig utilizza la stessa interfaccia
Trasformazioni integrate: analisi JSON automatica, decodifica base64 e altre trasformazioni dei dati
Caching integrato: caching configurabile con supporto TTL per ridurre le chiamate API
Sicurezza dei tipi: forte supporto alla digitazione in runtime e in altri runtime supportati TypeScript
Gestione degli errori: logica di riprova e gestione degli errori integrate
Esempi di codice
Gli esempi seguenti mostrano come recuperare i segreti utilizzando l'utilità Parameters in diversi runtime:
- Python
-
Nota
Per esempi completi e istruzioni di configurazione, consultate la documentazione dell'utilità Parameters
. Recupero di segreti da Secrets Manager con l'utilità Powertools for AWS Lambda Parameters.
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
Per esempi completi e istruzioni di configurazione, consultate la documentazione dell'utilità Parameters
. Recupero di segreti da Secrets Manager con l'utilità Powertools for AWS Lambda Parameters.
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
Per esempi completi e istruzioni di configurazione, consultate la documentazione dell'utilità Parameters
. Recupero di segreti da Secrets Manager con l'utilità Powertools for AWS Lambda Parameters.
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
Per esempi completi e istruzioni di configurazione, consultate la documentazione dell'utilità Parameters
. Recupero di segreti da Secrets Manager con l'utilità Powertools for AWS Lambda Parameters.
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 } }
Configurazione e autorizzazioni
Per utilizzare l'utilità Parametri, è necessario:
Installa Powertools AWS Lambda per il tuo runtime. Per informazioni dettagliate, vedi Utensili elettrici per AWS Lambda.
Aggiungi le autorizzazioni IAM necessarie al ruolo di esecuzione della tua funzione. Fare riferimento a Gestione delle autorizzazioni in AWS Lambda per ulteriori dettagli.
Configura eventuali impostazioni opzionali tramite variabili di ambiente.
Le autorizzazioni IAM richieste sono le stesse dell'approccio di estensione. L'utilità gestirà automaticamente la memorizzazione nella cache e le chiamate API a Secrets Manager in base alla configurazione dell'utente.