Questa pagina spiega la procedura di accesso a un'istanza AlloyDB per PostgreSQL utilizzando un account preparato con Identity and Access Management (IAM). Illustra la procedura mostrando come eseguire un accesso basato su IAM utilizzando il client a riga di comando psql.
Per una panoramica della connessione alle istanze AlloyDB, consulta Panoramica della connessione.
Prima di iniziare
Il progetto, il cluster, le istanze e gli account utente IAM richiedono tutti una preparazione prima di poter accedere a un'istanza AlloyDB utilizzando le credenziali IAM.
Per saperne di più, consulta Gestire l'autenticazione IAM.
Autenticare con un token OAuth 2.0
Un utente o un'applicazione può eseguire l'autenticazione con un database AlloyDB seguendo questi passaggi:
Se non l'hai ancora fatto, autorizza la Google Cloud CLI utilizzando lo stesso utente o account di servizio con cui vuoi accedere all'istanza AlloyDB.
Richiedi un token OAuth 2.0 da Google Cloud utilizzando il
gcloud auth print-access-tokencomando:gcloud auth print-access-tokenIl Google Cloud comando stampa un token OAuth 2.0 come output di questo comando.
Per una maggiore sicurezza, puoi limitare l'utilizzo del token solo all'autenticazione AlloyDB seguendo questi passaggi alternativi:
Aggiungi l'ambito
alloydb.loginalle credenziali di accesso dell'ambiente corrente utilizzando ilgcloud auth application-default logincomando, se non l'hai già fatto:gcloud auth application-default login --scopes=https://www.googleapis.com/auth/alloydb.login,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,openidStampa un token OAuth 2.0 limitato utilizzando il
gcloud auth application-default print-access-tokencomando, limitando l'ambito del token solo all'autenticazione AlloyDB:gcloud auth application-default print-access-token –-scopes=https://www.googleapis.com/auth/alloydb.login
Il token OAuth 2.0 consente a te o a chiunque di effettuare richieste autenticate a Google Cloud tuo nome. Tratta il token con lo stesso livello di sicurezza di una password. Archivia il token in modo sicuro o evita di archiviarlo. L'esempio di utilizzo di
psqlpiù avanti in questa pagina dimostra un modo per richiedere, utilizzare ed eliminare un token OAuth 2.0 in un' unica azione.Accedi a un'istanza AlloyDB con le tecniche standard di PostgreSQL, utilizzando queste credenziali:
Presenta il token di accesso acquisito nel passaggio precedente come password.
Per un account utente IAM, il nome utente del database è l'indirizzo email completo dell'account.
Per un account di servizio IAM, il nome utente del database è l'indirizzo email dell'account senza il suffisso
.gserviceaccount.com.
Il seguente comando psql mostra un modo per accedere a un utente IAM dalla riga di comando. Assegna l'output di gcloud
auth print-access-token alla variabile di ambiente PGPASSWORD, che psql
utilizza successivamente come password di accesso al database.
PGPASSWORD=$(gcloud auth print-access-token) psql \
-h INSTANCE_ADDRESS \
-U USERNAME \
-d DATABASESostituisci quanto segue:
INSTANCE_ADDRESS: l'indirizzo IP dell'istanza AlloyDB a cui connetterti.USERNAME: un identificatore per l'utente IAM con cui eseguire l'autenticazione con l'istanza.Per un account utente IAM, fornisci l'indirizzo email completo dell'account utente. Ad esempio,
kai@altostrat.com.Per un account di servizio IAM, fornisci l'indirizzo del account di servizio senza il suffisso
.gserviceaccount.com. Ad esempio, per specificare il account di serviziomy-service@my-project.iam.gserviceaccount.com, devi utilizzare il valoremy-service@my-project.iamqui.DATABASE: il nome del database a cui connetterti.
Tieni presente che psql tronca le password inserite nella riga di comando che superano i 100 caratteri. Per utilizzare psql con un token OAuth 2.0 come password di accesso, devi impostare la variabile di ambiente PGPASSWORD come mostrato in questo esempio, anziché incollarla manualmente quando richiesto.
Autenticare automaticamente
Per autenticare automaticamente un utente AlloyDB basato su IAM senza la necessità di un token OAuth 2.0, hai due opzioni: proxy di autenticazione AlloyDB e connettori di linguaggio AlloyDB.
L'account IAM che utilizzi per eseguire il client proxy o i connettori di linguaggio deve essere lo stesso account che hai aggiunto come utente del database. Ad esempio, se esegui il workload utilizzando l'account utente IAM kai@altostrat.com, puoi utilizzare il client proxy o i connettori di linguaggio per autenticare automaticamente l'utente del database kai@altostrat.com senza specificare un token OAuth 2.0. In questo esempio, l'autenticazione automatica non funziona con nessun altro utente del database, ad eccezione di kai@altostrat.com.
Proxy di autenticazione
L'utilizzo del proxy di autenticazione richiede l'esecuzione del client proxy di autenticazione AlloyDB con il flag --auto-iam-authn abilitato.
Per saperne di più sull'esecuzione del proxy di autenticazione, consulta Connettersi utilizzando il proxy di autenticazione AlloyDB.
Connettori di linguaggio
L'utilizzo dei connettori di linguaggio richiede l'abilitazione dell'autenticazione IAM a livello di programmazione. Esiste un'opzione corrispondente per ogni lingua in Configurare i connettori di linguaggio AlloyDB.
Risolvere i problemi relativi all'autenticazione IAM
Per determinare la causa di un tentativo di autenticazione basato su IAM non riuscito:
Nella Google Cloud console, vai alla pagina Esplora log:
In Tipo di risorsa, fai clic su Istanza AlloyDB.
In Gravità, fai clic su Avviso.
Se Avviso non è un'opzione, significa che non sono stati registrati errori di autenticazione nella finestra temporale selezionata. Potresti dover regolare la finestra utilizzando i controlli di Esplora log.
In Risultati delle query, controlla le voci di log per uno dei seguenti messaggi:
Request had invalid authentication credentials.- Il token di accesso non è valido.
Caller does not have required permission to use project.- L'entità IAM non dispone dei ruoli IAM necessari o delle autorizzazioni. Il messaggio di errore completo specifica i ruoli o le autorizzazioni mancanti.
IAM principal does not match database user.L'entità IAM autenticata specificata dal token di accesso non corrisponde all'utente del database a cui vuoi connetterti.
Per visualizzare l'entità specificata dal token, esegui questo comando:
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=ACCESS_TOKEN" https://www.googleapis.com/oauth2/v1/tokeninfo
Sostituisci
ACCESS_TOKENcon il token di accesso OAuth 2.0.Request had insufficient scopes.- Il token di accesso non contiene l'ambito
alloydb.logino l'ambitocloud-platform. È necessario almeno uno di questi ambiti.