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à.
Funzioni di rotazione Lambda
NelRotazione tramite funzione Lambda, una funzione Lambda fa il lavoro di rotazione del segreto. Secrets Manager utilizza etichette di gestione temporanea per etichettare le versioni dei segreti durante la rotazione.
Se Secrets Manager non fornisce un modello di funzione di rotazione per il tipo di segreto in uso, è possibile creare una funzione di rotazione. Quando scrivi una funzione di rotazione, segui le istruzioni per ogni passaggio.
Suggerimenti per scrivere una funzione di rotazione personalizzata
-
Usa il modello di rotazione generico come punto di partenza per scrivere la tua funzione di rotazione.
-
Quando scrivi una funzione, fai attenzione a includere istruzioni per la registrazione o il debug. Queste istruzioni possono far sì che le informazioni relative alla tua funzione vengano scritte su Amazon CloudWatch, quindi devi assicurarti che il log non includa informazioni sensibili raccolte durante lo sviluppo.
Per esempi di istruzioni di log, consulta il codice sorgente AWS Secrets Manager modelli di funzioni di rotazione.
-
Per motivi di sicurezza, Secrets Manager consente solo a una funzione di rotazione Lambda di ruotare direttamente il segreto. La funzione di rotazione non può richiamare una seconda funzione Lambda per ruotare il segreto.
-
Per suggerimenti di debug, consulta Esecuzione di test e debug di applicazioni serverless.
-
Se utilizzi binari e librerie esterne, ad esempio per connetterti a una risorsa, devi gestire l'applicazione di patch e la loro conservazione. up-to-date
-
Salvate la funzione di rotazione in un file ZIP
my-function.zip
insieme a tutte le dipendenze richieste.
Quattro fasi in una funzione di rotazione
Argomenti
create_secret
: crea una nuova versione del segreto
Il metodo verifica create_secret
innanzitutto se esiste un segreto chiamando get_secret_value
ClientRequestToken
. Se non c'è alcun segreto, crea un nuovo segreto con create_secret
VersionId
Quindi genera un nuovo valore segreto con get_random_password
put_secret_value
di staging. La memorizzazione del nuovo valore del segreto in AWSPENDING
aiuta a garantire l'idempotenza. Se per un motivo qualsiasi la rotazione non viene eseguita, puoi fare riferimento a quel valore del segreto nelle chiamate successive. Consulta Come posso rendere idempotente la mia funzione LambdaAWSPENDING
Suggerimenti per scrivere una funzione di rotazione personalizzata
Assicurati che il nuovo valore segreto includa solo caratteri validi per il database o il servizio. Escludi i caratteri utilizzando il parametro
ExcludeCharacters
.Mentre testate la vostra funzione, utilizzate le fasi AWS CLI per vedere la versione: chiamate
describe-secret
e guardateVersionIdsToStages
.-
Per Amazon RDS MySQL, alternando la rotazione degli utenti, Secrets Manager crea un utente clonato con un nome non più lungo di 16 caratteri. Puoi modificare la funzione di rotazione per consentire nomi utente più lunghi. La mia SQL versione 5.7 e successive supporta nomi utente fino a 32 caratteri, tuttavia Secrets Manager aggiunge «_clone» (sei caratteri) alla fine del nome utente, quindi è necessario mantenere il nome utente a un massimo di 26 caratteri.
set_secret
: Modifica le credenziali nel database o nel servizio
Il metodo set_secret
modifica la credenziale nel database o nel servizio in modo che corrisponda al nuovo valore segreto nella AWSPENDING
versione del segreto.
Suggerimenti per scrivere una funzione di rotazione personalizzata
-
Se passate istruzioni a un servizio che interpreta le istruzioni, ad esempio un database, utilizzate la parametrizzazione delle query. Per ulteriori informazioni, consultate Query Parameterization Cheat
Sheet sul sito Web. OWASP -
La funzione di rotazione è un "privileged deputy" che ha l'autorizzazione ad accedere e modificare le credenziali del cliente sia nel segreto di Gestione dei segreti che nella risorsa di destinazione. Per evitare un potenziale attacco confused deputy, devi assicurarti che un utente malintenzionato non possa utilizzare la funzione per accedere ad altre risorse. Prima di aggiornare le credenziali:
Verifica che la credenziale nella versione
AWSCURRENT
del segreto sia valida. Se la credenzialeAWSCURRENT
non è valida, abbandona il tentativo di rotazione.Verifica che i valori dei segreti
AWSCURRENT
eAWSPENDING
si riferiscano alla stessa risorsa. Per il nome utente e la password, verifica che i nomi utenteAWSCURRENT
eAWSPENDING
siano uguali.Verifica che la risorsa del servizio di destinazione sia la stessa. Per un database, verifica che i nomi degli host
AWSCURRENT
eAWSPENDING
siano uguali.
-
In rari casi, potresti voler personalizzare una funzione di rotazione esistente per un database. Ad esempio, con la rotazione alternata degli utenti, Secrets Manager crea l'utente clonato copiando i parametri di configurazione di runtime
del primo utente. Se desideri includere più attributi o modificare quelli concessi all'utente clonato, devi aggiornare il codice nella funzione set_secret
.
test_secret
: prova la nuova versione segreta
Successivamente, la funzione di rotazione Lambda esegue il test della versione AWSPENDING
del segreto utilizzando questa versione per accedere al database o al servizio. Le funzioni di rotazione basate su Modelli di funzione di rotazione verificano il nuovo segreto utilizzando un accesso in lettura.
finish_secret
: Termina la rotazione
Infine, la funzione di rotazione Lambda sposta l'etichetta AWSCURRENT
dalla precedente versione segreta a questa versione, che rimuove anche l'AWSPENDING
etichetta nella stessa API chiamata. Secrets Manager aggiunge l'etichetta di gestione temporanea AWSPREVIOUS
alla versione precedente, in modo da conservare l'ultima versione nota del segreto.
Il metodo finish_secret
consente update_secret_version_stage
AWSCURRENT
dalla versione segreta precedente alla nuova versione segreta. Gestione dei segreti aggiunge automaticamente l'etichetta di gestione temporanea AWSPREVIOUS
alla versione precedente, in modo da conservare l'ultima versione nota del segreto.
Suggerimenti per scrivere una funzione di rotazione personalizzata
Non rimuovere
AWSPENDING
prima di questo punto e non rimuoverlo utilizzando una API chiamata separata, poiché ciò può indicare a Secrets Manager che la rotazione non è stata completata correttamente. Secrets Manager aggiunge l'etichetta di gestione temporaneaAWSPREVIOUS
alla versione precedente, in modo da conservare l'ultima versione nota del segreto.
Quando la rotazione ha esito positivo, l'etichetta di gestione temporanea AWSPENDING
potrebbe essere collegata alla stessa versione come la versione AWSCURRENT
, oppure potrebbe non essere collegata a nessuna versione. Se l'etichetta di gestione temporanea AWSPENDING
è presente ma non è collegata alla stessa versione come AWSCURRENT
, qualsiasi successiva chiamata di rotazione presuppone che una precedente richiesta di rotazione sia ancora in corso e viene segnalato un errore. Quando la rotazione non ha esito positivo, l'etichetta di gestione temporanea AWSPENDING
potrebbe essere collegata a una versione di un segreto vuota. Per ulteriori informazioni, consulta Risoluzione dei problemi della rotazione.