Questa pagina descrive come risolvere i problemi di autenticazione Identity and Access Management (IAM) per AlloyDB per PostgreSQL.
Per determinare la causa di un tentativo di autenticazione basato su IAM non riuscito:
Nella console Google Cloud , vai alla pagina Esplora log:
Nell'elenco a discesa Tutte le risorse, seleziona Istanza AlloyDB.
Nella sezione Gravità, fai clic su Avviso.
Se Avviso non è un'opzione, significa che non sono stati registrati errori di autenticazione nella finestra temporale selezionata. Potrebbe essere necessario 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 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/tokeninfoSostituisci
ACCESS_TOKENcon il token di accesso OAuth 2.0.Questo errore si verifica anche se l'entità abbreviata del account di servizio, ovvero l'indirizzo email senza il suffisso
.gserviceaccount.com, supera i 63 caratteri.PostgreSQL ha un limite di 63 caratteri per gli identificatori di ruoli e utenti. Anche se AlloyDB ti consente di creare l'utente, PostgreSQL tronca il nome del ruolo a 63 byte nel catalogo interno. Durante l'accesso, il livello di autenticazione IAM di AlloyDB confronta l'entità completa e non troncata del token OAuth con il ruolo database troncato, il che comporta una mancata corrispondenza delle stringhe.
Soluzione alternativa: utilizza account di servizio account
Se non riesci ad abbreviare il nome del account di servizio, puoi aggirare questa limitazione utilizzando la simulazione dell'identità dei account di servizio. In questo modo, l'identità che esegue il workload viene separata dall'identità utilizzata per accedere al database:
- Crea un account di servizio proxy con un nome il cui principal abbreviato, escluso il suffisso
.gserviceaccount.com, contenga al massimo 63 caratteri, ad esempiodb-proxy@PROJECT_ID.iam.gserviceaccount.com. - Aggiungi il account di servizio proxy al cluster AlloyDB come utente del database
IAM_BASEDcon il nome utentedb-proxy@PROJECT_ID.iam. - In IAM, concedi all'account di servizio originale del workload il ruolo Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) sull'account di servizio proxy. - Configura l'applicazione, il connettore o il proxy di autenticazione per la connessione utilizzando l'identità proxy.
Ad esempio, puoi connetterti utilizzando il comando
gcloud beta alloydb connectcon il flag--impersonate-service-account:gcloud beta alloydb connect INSTANCE_ID \ --cluster=CLUSTER_ID \ --region=REGION_ID \ --impersonate-service-account=PROXY_SERVICE_ACCOUNT_EMAIL \ --auto-iam-authnSostituisci quanto segue:
INSTANCE_ID: l'ID dell'istanza AlloyDB.CLUSTER_ID: l'ID del cluster che contiene l'istanza.REGION_ID: la regione in cui risiede il cluster.PROXY_SERVICE_ACCOUNT_EMAIL: l'indirizzo email completo del account di servizio proxy.
Nota: l'account di servizio originale non richiede l'accesso diretto alla connessione al database, ma solo l'autorizzazione a rappresentare l'account proxy. Il account di servizio proxy contiene i privilegi del database.
- Crea un account di servizio proxy con un nome il cui principal abbreviato, escluso il suffisso
Request had insufficient scopes.- Il token di accesso non contiene l'ambito
alloydb.logino l'ambitocloud-platform. È necessario almeno uno di questi ambiti.