Ruota le credenziali del database senza riavviare i contenitori - Prontuario AWS

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à.

Ruota le credenziali del database senza riavviare i contenitori

Creato da Josh Joy (AWS)

Ambiente: produzione

Tecnologie: contenitori e microservizi; database DevOps; infrastruttura; sicurezza, identità, conformità; gestione e governance

Servizi AWS: Amazon ECS; Amazon Aurora; AWS Fargate; AWS Secrets Manager; Amazon VPC

Riepilogo

Sul cloud Amazon Web Services (AWS), puoi usare AWS Secrets Manager per ruotare, gestire e recuperare le credenziali del database durante il loro ciclo di vita. Gli utenti e le applicazioni recuperano i segreti con una chiamata all'API Secrets Manager, eliminando la necessità di codificare le informazioni sensibili in testo non crittografato.

Se utilizzi contenitori per carichi di lavoro di microservizi, puoi archiviare in modo sicuro le credenziali in AWS Secrets Manager. Per separare la configurazione dal codice, queste credenziali vengono generalmente inserite nel contenitore. Tuttavia, è importante ruotare le credenziali periodicamente e automaticamente. È inoltre importante supportare la possibilità di aggiornare le credenziali dopo la revoca. Allo stesso tempo, le applicazioni richiedono la possibilità di ruotare le credenziali riducendo al contempo qualsiasi potenziale impatto sulla disponibilità a valle.

Questo modello descrive come ruotare i segreti protetti con AWS Secrets Manager all'interno dei contenitori senza richiederne il riavvio. Inoltre, questo modello riduce il numero di ricerche di credenziali in Secrets Manager utilizzando il componente di caching lato client di Secrets Manager. Quando si utilizza il componente di memorizzazione nella cache lato client per aggiornare le credenziali all'interno dell'applicazione, non è necessario riavviare il contenitore per recuperare una credenziale ruotata.

Questo approccio funziona per Amazon Elastic Kubernetes Service (Amazon EKS) e Amazon Elastic Container Service (Amazon ECS).

Sono coperti due scenari. Nello scenario a utente singolo, la credenziale del database viene aggiornata a rotazione segreta rilevando la credenziale scaduta. La cache delle credenziali viene istruita ad aggiornare il segreto, quindi l'applicazione ristabilisce la connessione al database. Il componente di caching lato client memorizza nella cache le credenziali all'interno dell'applicazione e aiuta a evitare di contattare Secrets Manager per ogni ricerca di credenziali. La credenziale viene ruotata all'interno dell'applicazione senza la necessità di forzare l'aggiornamento delle credenziali riavviando il contenitore.

Il secondo scenario ruota il segreto alternando due utenti. La presenza di due utenti attivi riduce i potenziali tempi di inattività, poiché le credenziali di un utente sono sempre attive. La rotazione delle credenziali per due utenti è utile quando si dispone di una distribuzione di grandi dimensioni con cluster in cui potrebbe verificarsi un piccolo ritardo di propagazione degli aggiornamenti delle credenziali.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

Architettura

Architettura Target

Scenario 1 — Rotazione di una credenziale per un singolo utente

Diagramma che mostra i processi da Secrets Manager all'applicazione e da Fargate ad Aurora.

Nel primo scenario, una singola credenziale del database viene ruotata periodicamente da Secrets Manager. Il contenitore dell'applicazione viene eseguito in Fargate. Quando viene stabilita la prima connessione al database, il contenitore dell'applicazione recupera le credenziali del database per Aurora. Il componente di caching di Secrets Manager memorizza quindi nella cache le credenziali per la creazione di connessioni future. Una volta trascorso il periodo di rotazione, la credenziale scade e il database restituisce un errore di autenticazione. L'applicazione recupera quindi la credenziale ruotata, invalida la cache e aggiorna la cache delle credenziali tramite il componente di caching lato client Secrets Manager.

In questo scenario, potrebbe verificarsi un'interruzione minima durante la rotazione della credenziale e le connessioni obsolete utilizzano la credenziale obsoleta. Questo problema può essere risolto utilizzando lo scenario a due utenti.

Scenario 2 — Rotazione delle credenziali per due utenti

Diagramma che mostra il cluster Fargate, Aurora e Secrets Manager, con le credenziali per Alice e Bob.

Nel secondo scenario, due credenziali utente del database (Alice e Bob) vengono ruotate periodicamente da Secrets Manager. Il contenitore dell'applicazione viene eseguito in un cluster Fargate. Quando viene stabilita la prima connessione al database, il contenitore dell'applicazione recupera le credenziali del database Aurora per il primo utente (Alice). Il componente di caching di Secrets Manager memorizza quindi nella cache le credenziali per la creazione di connessioni future.

Sebbene esistano due utenti e credenziali, una sola credenziale attiva viene gestita da Secrets Manager. In questo caso, il componente di memorizzazione nella cache scade periodicamente e recupera la credenziale più recente. Se il periodo di rotazione di Secrets Manager è più lungo del timeout della cache, il componente di caching raccoglie la credenziale ruotata per il secondo utente (Bob). Ad esempio, se la scadenza della cache viene misurata in minuti e il periodo di rotazione in giorni, il componente di memorizzazione nella cache recupera la nuova credenziale come parte dell'aggiornamento periodico della cache. In questo modo, i tempi di inattività sono ridotti al minimo perché le credenziali di ogni utente sono attive per una rotazione di Secrets Manager.

Automazione e scalabilità

Puoi usare AWS CloudFormation per implementare questo modello utilizzando l'infrastruttura come codice. Questo crea e crea il contenitore delle applicazioni, crea l'attività Fargate, distribuisce il contenitore in Fargate e configura Secrets Manager con Aurora. Per le istruzioni sulla step-by-step distribuzione, consultate il file readme.

Strumenti

Strumenti

  • AWS Secrets Manager consente la sostituzione di credenziali codificate, comprese le password, con una chiamata API a Secrets Manager per recuperare il segreto. Poiché Secrets Manager può ruotare automaticamente il segreto in base a una pianificazione, puoi sostituire i segreti a lungo termine con quelli a breve termine, riducendo il rischio di compromessi.

  • Docker aiuta gli sviluppatori a imballare, spedire ed eseguire qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

Codice

Esempio di codice Python

Questo modello utilizza il componente di caching lato client Python per Secrets Manager per recuperare le credenziali di autenticazione quando si stabilisce la connessione al database. Il componente di caching lato client aiuta a evitare di contattare Secrets Manager ogni volta.

Ora, allo scadere del periodo di rotazione, la credenziale memorizzata nella cache scadrà e la connessione al database genererà un errore di autenticazione. Per MySQL, il codice di errore di autenticazione è 1045. Questo esempio utilizza Amazon Aurora per MySQL, sebbene sia possibile utilizzare un altro motore come PostgreSQL. Dopo l'errore di autenticazione, il codice di gestione delle eccezioni di connessione al database rileva l'errore. Quindi informa il componente di memorizzazione nella cache lato client di Secrets Manager di aggiornare il segreto, quindi di riautenticare e ristabilire la connessione al database. Se si utilizza PostgreSQL o un altro motore, è necessario cercare il codice di errore di autenticazione corrispondente.

L'applicazione contenitore può ora aggiornare la password del database con la password ruotata senza riavviare il contenitore.

Inserite il codice seguente nel codice dell'applicazione che gestisce le connessioni al database. Questo esempio utilizza Django e sottoclasse il backend del database con un wrapper del database per le connessioni. Se utilizzi un linguaggio di programmazione o una libreria di connessioni al database diversi, consulta la tua libreria di connessioni al database per scoprire come aggiungere una sottoclasse al recupero della connessione al database.

    def get_new_connection(self, conn_params):         try:             logger.info("get connection")             databasecredentials.get_conn_params_from_secrets_manager(conn_params)             conn =super(DatabaseWrapper,self).get_new_connection(conn_params)             return conn         except MySQLdb.OperationalError as e:             error_code=e.args[0]             if error_code!=1045:                 raise e               logger.info("Authentication error. Going to refresh secret and try again.")             databasecredentials.refresh_now()             databasecredentials.get_conn_params_from_secrets_manager(conn_params)             conn=super(DatabaseWrapper,self).get_new_connection(conn_params)             logger.info("Successfully refreshed secret and established new database connection.")             return conn

Codice AWS CloudFormation e Python

Epiche

AttivitàDescrizioneCompetenze richieste

Installa il componente di memorizzazione nella cache.

Scarica e installa il componente di caching lato client Secrets Manager per Python. Per il link per il download, consultate la sezione Risorse correlate.

Developer

Memorizza nella cache le credenziali di lavoro.

Utilizzate il componente di caching lato client Secrets Manager per memorizzare nella cache locale le credenziali di lavoro.

Developer

Aggiorna il codice dell'applicazione per aggiornare la credenziale in caso di errore non autorizzato dovuto alla connessione al database.

Aggiorna il codice dell'applicazione per utilizzare Secrets Manager per recuperare e aggiornare le credenziali del database. Aggiungete la logica per gestire i codici di errore non autorizzati, quindi recuperate la nuova credenziale ruotata. Vedi la sezione Codice Python di esempio.

Developer

Risorse correlate

Crea un segreto di Secrets Manager

Crea un cluster Amazon Aurora

Crea i componenti Amazon ECS

Scarica e installa il componente di caching lato client Secrets Manager

Allegati

Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip