Come faccio a connettermi ad Amazon RDS per PostgreSQL o Amazon Aurora PostgreSQL utilizzando l'autenticazione IAM?

5 minuti di lettura
0

Ho un'istanza database Amazon Relational Database Service (Amazon RDS) per PostgreSQL o un'istanza database in edizione compatibile con Amazon Aurora PostgreSQL. Desidero utilizzare l'autenticazione AWS Identity and Access Management (IAM) per connettermi alla mia istanza.

Breve descrizione

L'autenticazione del database IAM è più sicura dei metodi di autenticazione nativi per i seguenti motivi:

  • IAM utilizza le tue chiavi di accesso AWS per generare token di autenticazione del database. 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. In questo modo vengono crittografati tutti i dati che trasmetti da e verso la tua istanza database Amazon RDS.
  • Se la tua applicazione viene eseguita su Amazon Elastic Compute Cloud (Amazon EC2), puoi utilizzare le credenziali del profilo di istanza Amazon 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 utente IAM e allega una policy IAM che associ l'utente del database al ruolo IAM.
  3. Associa il ruolo IAM all'istanza EC2.
  4. Genera un token di autenticazione AWS per identificare il ruolo IAM.
  5. Scarica il file del certificato root SSL o il file del pacchetto di certificati.
  6. Per connetterti all'istanza database RDS, utilizza le credenziali del tuo ruolo IAM e il token di autenticazione o un certificato SSL.

Se esegui MySQL, consulta Come faccio a consentire agli utenti di autenticarsi su un'istanza database di Amazon RDS per MySQL utilizzando le loro credenziali IAM?

Risoluzione

Prima di iniziare, completa i seguenti prerequisiti:

  • Avvia un'istanza database Amazon RDS per PostgreSQL o un cluster compatibile con Aurora PostgreSQL che supporti l'autenticazione del database IAM
  • Avvia un'istanza EC2 per connetterti al database

Per ulteriori informazioni, consulta Autenticazione del database IAM per Aurora e Autenticazione del database IAM per Amazon RDS.

Per connetterti a un'istanza database RDS o a un cluster di database compatibile con Aurora PostgreSQL, usa l'autenticazione del database IAM per PostgreSQL:

  1. Attiva l'autenticazione IAM sulla tua istanza database RDS o sul tuo cluster Aurora.

  2. Crea un utente IAM, quindi allega la seguente policy:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "rds-db:connect"
          ],
          "Resource": [
            "arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
          ]
        }
      ]
    }

    Nota: Sostituisci iamuser con le informazioni dell’utente IAM.

  3. Accedi alla tua istanza database Amazon RDS per PostgreSQL o al cluster compatibile con Aurora PostgreSQL come utente principale:

    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    Seleziona Server dal pannello di navigazione di pgAdmin. Quindi, scegli il nome del server e inserisci la password dell'utente principale.

  4. Crea un utente secondario con lo stesso nome dell'utente IAM:

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. Esegui generate-db-auth-token con il nome utente che hai creato. In questo modo verrà creata una password temporanea da utilizzare in una fase successiva:

    [ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"
    [ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
    [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
    aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
    [ec2-user@ip-172-31-24-237 ~]$
  6. Per creare una nuova connessione al server in pgAdmin, scegli la scheda Generale e deseleziona la casella Connetti ora. Nella scheda Connessione, inserisci il nome host, la porta e il nome utente, ma non inserire ancora la password. Dalla scheda SSL, imposta la modalità SSL su Richiedi e salva la connessione al server.

  7. (Facoltativo) Dalla scheda SSL, puoi modificare la modalità SSL in modalità verify-full. Inserisci il percorso del certificato per la modalità SSL selezionata. Per scaricare il percorso, esegui il seguente comando:

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

    Nota: I certificati root 2015 sono scaduti a partire dal 2020. Per passare a un certificato root 2019, consulta Sostituzione del certificato SSL/TLS.

    Se la tua applicazione non accetta catene di certificati, scarica il pacchetto di certificati che include sia i vecchi che i nuovi certificati root:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Dopo aver creato il server, effettua la connessione. Inserisci il token temporaneo che generate-db-auth-token ha generato per l'utente iamuser, quando richiesto.

Per psql, esegui il seguente comando per connetterti. Questo esempio utilizza la variabile di ambiente $PGPASSWORD che hai impostato quando hai generato il token. Questa variabile avvia la connessione:

psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"

Nota: Ogni token scade 15 minuti dopo la generazione. Se provi a ristabilire la connessione con lo stesso token, la connessione fallisce. Devi generare un nuovo token.

Se ricevi ancora un errore simile a autenticazione PAM non riuscita per il tuo utente, controlla se l'account AWS fa parte di un'organizzazione AWS Organizations. Se l'account fa parte di un'organizzazione, aggiungi rds-db:* alla policy di controllo dei servizi dell'organizzazione a cui appartiene l'account. Inoltre, controlla se esiste una gerarchia dell'utente o del ruolo IAM che non dispone dell'autorizzazione rds-db. Per ulteriori informazioni, consulta Come utilizzare le policy di controllo dei servizi per impostare i guardrail di autorizzazione tra gli account della tua organizzazione AWS.

Informazioni correlate

Utilizzare l'autenticazione IAM con Aurora PostgreSQL compatibile