Come posso consentire agli utenti di autenticarsi in un'istanza database Amazon RDS per MySQL utilizzando le proprie credenziali IAM?

6 minuti di lettura
0

Desidero connettermi a un'istanza database di Amazon Relational Database Service (Amazon RDS) che esegue MySQL. Desidero utilizzare le credenziali di AWS Identity and Access Management (IAM) invece dei metodi di autenticazione nativi.

Breve descrizione

Gli utenti possono connettersi a un'istanza database o a un cluster Amazon RDS utilizzando le credenziali per il ruolo o per l'utente IAM e un token di autenticazione. L'autenticazione del database IAM è più sicura dei metodi di autenticazione nativi per i seguenti motivi:

  • I token di autenticazione del database IAM vengono generati utilizzando le chiavi di accesso AWS. Non è necessario memorizzare le credenziali utente del database.
  • I token di autenticazione hanno una durata di 15 minuti, quindi non è necessario imporre la reimpostazione della password.
  • L'autenticazione del database IAM richiede una connessione SSL (Secure Socket Layer). Tutti i dati trasmessi da e verso l'istanza database sono crittografati.
  • Se la tua applicazione è in esecuzione su Amazon Elastic Compute Cloud (Amazon EC2), puoi utilizzare le credenziali del profilo dell'istanza EC2 per accedere al database. Non è necessario memorizzare le password del database sulla tua istanza.

Per configurare l'autenticazione del database IAM utilizzando i ruoli IAM, segui questi passaggi:

  1. Attiva l'autenticazione del database IAM sull'istanza database RDS.
  2. Crea un account utente del database che utilizzi un token di autenticazione AWS.
  3. Aggiungi una policy IAM che associ l'utente del database al ruolo IAM.
  4. Crea un ruolo IAM che consenta l'accesso ad Amazon RDS.
  5. Associa il ruolo IAM all'istanza Amazon EC2.
  6. Genera un token di autenticazione AWS per identificare il ruolo IAM.
  7. Scarica il file del certificato root SSL o il file del pacchetto di certificati.
  8. Connettiti all'istanza database RDS utilizzando le credenziali del ruolo IAM e il token di autenticazione.
  9. Connettiti all'istanza database RDS utilizzando le credenziali del ruolo IAM e i certificati SSL.

Risoluzione

Prima di iniziare, devi avviare un'istanza database che supporti l'autenticazione del database IAM e un'istanza Amazon EC2 per connetterti al database.

Attiva l'autenticazione del database IAM sull'istanza database RDS

Puoi attivare l'autenticazione del database IAM utilizzando la console Amazon RDS, l'interfaccia della linea di comando AWS (AWS CLI) o l'API Amazon RDS. Se utilizzi la console Amazon RDS per modificare l'istanza database, scegli Applica immediatamente per attivare l'autenticazione del database IAM. L'attivazione dell'autenticazione IAM richiede una breve interruzione. Per ulteriori informazioni sulle modifiche che richiedono interruzioni, consulta la sezione Istanze DB Amazon RDS.

Nota: se scegli l'opzione Applica immediatamente, anche tutte le modifiche in sospeso verranno applicate immediatamente anziché durante il periodo di manutenzione. Ciò può causare un'interruzione prolungata dell'istanza. Per ulteriori informazioni, consulta la sezione Utilizzo dell'impostazione Applica immediatamente.

Crea un account utente del database che utilizzi un token di autenticazione AWS

1.    Connettiti all'istanza database o all'endpoint del cluster eseguendo il comando seguente. Inserisci la password principale per accedere.

$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

2.    Crea un account utente del database che utilizzi un token di autenticazione AWS anziché una password:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

3.    Per impostazione predefinita, l'utente del database viene creato senza privilegi. Questo verrà visualizzato come GRANT USAGE quando si esegue il comando SHOW GRANTS FOR {dbusername}. Per richiedere a un account utente di connettersi tramite SSL, esegui questo comando:

ALTER USER {dbusername} REQUIRE SSL;

4.    Esegui il comando exit per chiudere MySQL. Quindi disconnettiti dall'istanza database.

Aggiungi una policy IAM che associ l'utente del database al ruolo IAM

1.    Apri la console IAM.

2.    Scegli Policy dal pannello di navigazione.

3.    Scegli Crea policy.

4.    Inserisci una policy che consenta l'operazione rds-db:connect all'utente richiesto. Per ulteriori informazioni sulla creazione di questa policy, consulta la sezione Creazione e utilizzo di una policy IAM per l'accesso al database IAM.

Nota: assicurati di modificare il valore Risorsa con i dettagli delle risorse del tuo database, come ad esempio l'identificativo dell'istanza database e il nome utente del database.

5.    Scegli Successivo: Tag.

6.    Scegli Successivo: Rivedi.

7.    In Nome, inserisci un nome per la policy.

8.    Scegli Crea policy.

Crea un ruolo IAM che consenta l'accesso ad Amazon RDS

1.    Apri la console IAM.

2.    Dal pannello di navigazione scegli Ruoli.

3.    Scegli Crea ruolo.

4.    Scegli Servizio AWS.

5.    Scegli EC2.

6.    In Seleziona il tuo caso d'uso, scegli EC2, quindi scegli Successivo: Autorizzazioni.

7.    Nella barra di ricerca, trova la policy IAM che hai creato in precedenza nella sezione "Aggiungi una policy IAM che associ l'utente del database".

8.    Scegli Successivo: Tag.

9.    Scegli Successivo: Rivedi.

10.    In Nome ruolo, inserisci un nome per questo ruolo IAM.

11.    Scegli Crea ruolo.

Associa il ruolo IAM all'istanza Amazon EC2

1.    Apri la console Amazon EC2.

2.    Scegli l'istanza EC2 che usi per connetterti ad Amazon RDS.

3.    Associa il ruolo IAM appena creato all'istanza EC2.

4.    Connettiti alla tua istanza EC2 tramite SSH.

Genera un token di autenticazione AWS per identificare il ruolo IAM

Dopo esserti connesso alla tua istanza Amazon EC2, esegui il seguente comando AWS CLI per generare un token di autenticazione.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare una versione recente di AWS CLI.

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

Copia e archivia questo token di autenticazione per un uso successivo. Il token scade entro 15 minuti dalla creazione.

In alternativa, puoi generare un token utilizzando un SDK AWS.

Scarica il file del certificato root SSL o il file del pacchetto di certificati

Esegui questo comando per scaricare un certificato root che funzioni per tutte le regioni:

$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

Connettiti all'istanza database RDS utilizzando le credenziali del ruolo IAM e il token di autenticazione

Dopo aver scaricato il file del certificato, esegui uno dei seguenti comandi per connetterti all'istanza database con SSL.

Nota: se la tua applicazione non accetta catene di certificati, esegui il comando seguente per scaricare il pacchetto di certificati:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

A seconda del certificato che stai utilizzando (RootCA oppure Bundle), esegui uno dei seguenti comandi:

Comando per RootCA:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Comando per Bundle:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Nota: se utilizzi un client MariaDB, l'opzione --enable-cleartext-plugin non è richiesta.

Connettiti all'istanza database RDS utilizzando le credenziali del ruolo IAM e i certificati SSL

Dopo aver scaricato il file del certificato, connettiti all'istanza database con SSL. Per ulteriori informazioni, consulta la sezione Connessione a un'istanza database che esegue il motore di database di MySQL.

Informazioni correlate

Autenticazione del database IAM per MariaDB, MySQL e PostgreSQL

Quali sono i privilegi minimi richiesti a un utente per eseguire azioni di creazione, eliminazione, modifica, backup e ripristino per un'istanza database Amazon RDS?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa