Salta al contenuto

Come posso risolvere gli errori che ricevo quando utilizzo l'autenticazione IAM per connettermi a un'istanza Amazon RDS per PostgreSQL o a un cluster Aurora PostgreSQL?

5 minuti di lettura
0

Riscontro errori quando utilizzo l'autenticazione AWS Identity Access Management (AWS IAM) per connettermi alla mia istanza Amazon Relational Database Service (Amazon RDS) per PostgreSQL o al cluster Amazon Aurora compatibile con PostgreSQL.

Breve descrizione

Potresti ricevere il messaggio di errore "PAM authentication failed for user" quando si verifica quanto segue:

  • L'autenticazione IAM è disattivata
  • La policy IAM non include l'azione rds-db:connection
  • Il ruolo rds_iam non è associato all'utente del database
  • La connessione non è corretta
  • Viene utilizzato un ruolo IAM errato

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

L'autenticazione IAM è disattivata

Per impostazione predefinita, l'autenticazione IAM è disattivata. Attiva l'autenticazione IAM per l'istanza Amazon RDS per PostgreSQL o per il cluster Aurora compatibile con PostgreSQL.

La policy IAM non include l'azione rds-db:connect

Per utilizzare l'autenticazione del database IAM per connetterti all'istanza database, aggiorna la policy per includere l'azione rds-db:connect.

Di seguito è riportato un esempio di output:

{    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Action": [  
                "rds-db:connect"  
            ],  
            "Resource": [  
                " arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId for RDS PostgreSQL or DbClusterResourceId for Aurora PostgreSQL)/db_user_name"  
            ]  
        }  
    ]  
}

Nota: assicurati di utilizzare l'ID della risorsa e il nome della risorsa Amazon (ARN) corretti nella policy.

Per trovare l'ID della risorsa di un'istanza database, seleziona l'istanza database o il cluster sulla console Amazon RDS, quindi scegli la scheda Configurazione. Per ulteriori informazioni, consulta Creazione e utilizzo di una policy IAM per l'accesso al database IAM.

Nota: l'autenticazione IAM non supporta chiavi di contesto con condizioni globali o specifiche del servizio o nell'elemento condizione delle istruzioni di una policy.

Il ruolo rds_iam non è associato all'utente del database

Per utilizzare l'autenticazione IAM con PostgreSQL, l'utente del database deve assumere il ruolo rds_iam. Per verificare se questo ruolo è associato all'utente, esegui questo comando nel client PostgreSQL:

\du

Di seguito è riportato l'output previsto:


                                         List of rolesRole name       |                         Attributes                         | Member of                            
----------------+------------------------------------------------------------+-------------------------------------------------------------  
db_user_name    |                                                            | {rds_iam}                                  
postgres        | Create role, Create DB                                     | {rds_superuser}            
                | Password valid until infinity                              |

Puoi anche eseguire questa query su qualsiasi piattaforma:

SELECT r.rolname,       ARRAY(  
           SELECT b.rolname  
           FROM pg_catalog.pg_auth_members m  
           JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)  
           WHERE m.member = r.oid  
       ) AS memberof  
FROM pg_catalog.pg_roles r  
WHERE r.rolname !~ '^pg_'  
ORDER BY 1;

Per creare un utente e concedergli il ruolo rds_iam, esegui il seguente comando:

CREATE USER db_user_name WITH LOGIN;GRANT rds_iam TO db_user_name;

La connessione non è corretta

I token di autenticazione includono diversi caratteri che possono essere difficili da utilizzare nella linea di comando. Salva piuttosto il token di autenticazione in una variabile di ambiente. Quindi utilizza la variabile di ambiente quando ti connetti al cluster Aurora PostgreSQL.

Di seguito è riportato un esempio di generazione di token di autenticazione con variabili di ambiente:

export RDSHOST='aurorapostgresql.cluster-abcdef12ghi.us-east-1.rds.amazonaws.com'export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-east-1 --username db_user_name)"  
psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=global-bundle.pem dbname=postgres user=db_user_name password=$PGPASSWORD"

Quando il client tenta di connettersi all'istanza database senza una connessione SSL/TLS, ricevi il seguente errore:

"FATAL: no pg_hba.conf entry for host "host.ip", user "<username>", database "postgres", SSL off FATAL: password authentication failed for user "db_user_name""

L'autenticazione del database IAM richiede una connessione SSL/TLS perché tutti i dati trasmessi da e verso l'istanza database sono crittografati. Per evitare l'errore precedente, assicurati di utilizzare una connessione SSL/TLS. È consigliabile utilizzare l'opzione sslmode come verify-full e fornire il certificato nell'opzione sslrootcert della stringa di connessione.

Per scaricare il certificato più recente dell'autorità di certificazione (CA), consulta Utilizzo di SSL/TLS per crittografare una connessione a un cluster di database.

Viene utilizzato un ruolo IAM errato

Potresti ricevere un messaggio di errore perché stai utilizzando un ruolo IAM non corretto per generare il token di autenticazione. Per verificare il ruolo assunto dall'utente IAM corrente, esegui il comando get-caller-identity:

aws sts get-caller-identity

Se il ruolo assunto non è corretto, passa da un utente IAM al ruolo IAM corretto oppure assumi il ruolo corretto. Se continui a ricevere un messaggio di errore, controlla se l'account AWS fa parte di un'organizzazione di AWS Organizations. Se l'account fa parte di un'organizzazione, crea una policy di controllo dei servizi che consenta rds-db:. Per ulteriori informazioni sulle SCP, consulta Effetti delle policy di controllo dei servizi sulle autorizzazioni.

Inoltre, controlla se esiste una gerarchia dell'utente IAM che non ha l'autorizzazione rds-db:. Per ulteriori informazioni, consulta How to use service control policies to set permission guardrails across accounts in your AWS Organization (Come utilizzare le policy di controllo dei servizi per impostare i guardrail delle autorizzazioni tra gli account in AWS Organizations).
Se utilizzi i limiti delle autorizzazioni per le entità IAM, consenti l'azione rds-db:connect per l'utente o il ruolo IAM. Per modificare i limiti delle autorizzazioni per un utente, consulta Modifica delle autorizzazioni per un utente.