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

4 minuti di lettura
0

Desidero connettermi alla mia istanza Amazon Relational Database Service (Amazon RDS) per PostgreSQL o al mio cluster Amazon Aurora PostgreSQL-Compatible Edition. Quando utilizzo l'autenticazione AWS Identity Access Management (IAM) per la connessione, ricevo l'errore "PAM authentication failed for user".

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei 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 la tua istanza RDS per PostgreSQL o per il tuo clusterAurora PostgreSQL-Compatible.

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.

Esempio di policy:

{
    "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 l'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 il seguente comando nel client PostgreSQL:

\du

Output atteso:

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

Puoi anche eseguire la seguente 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 tuo cluster Aurora PostgreSQL.

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, viene visualizzato 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 nella 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.

Stai utilizzando un ruolo IAM non corretto

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 dispone dell'autorizzazione rds-db:. Per ulteriori informazioni, consulta How to use service control policies to set permission guardrails across accounts in your AWS Organization.

Se utilizzi i limiti delle autorizzazioni per le entità IAM, consenti l'azione rds-db:connect per il tuo utente o ruolo IAM. Per modificare i limiti delle autorizzazioni per un utente, consulta Modifica delle autorizzazioni per un utente.

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa