Questa pagina descrive come eseguire l'autenticazione quando effettui una richiesta REST a un'API di Google.
Per informazioni su come eseguire l'autenticazione quando utilizzi le librerie client di Google, consulta Autenticazione mediante librerie client.
Prima di iniziare
Per eseguire gli esempi in questa pagina, completa i seguenti passaggi:
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs:
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com
Se non vuoi utilizzare gcloud CLI, puoi saltare questi passaggi e utilizzare l'imitazione dell'account di servizio o il server di metadati per generare un token.
Tipi di credenziali
Puoi utilizzare i seguenti tipi di credenziali per autenticare una chiamata REST:
Le tue credenziali gcloud CLI.
Questo approccio è il modo più semplice e sicuro per fornire le credenziali a un metodo REST in un ambiente di sviluppo locale. Se il tuo account utente dispone delle autorizzazioni IAM (Identity and Access Management) necessarie per il metodo che vuoi chiamare, questo è l'approccio preferito.
Le tue credenziali gcloud non sono le stesse che fornisci ad ADC utilizzando gcloud CLI. Per ulteriori informazioni, consulta la pagina Configurazione dell'autenticazione dell'interfaccia a riga di comando gcloud CLI e configurazione di ADC.
Le credenziali fornite alle Credenziali predefinite dell'applicazione (ADC).
Questo metodo è l'opzione preferita per l'autenticazione di una chiamata REST in un ambiente di produzione, perché ADC trova le credenziali dalla risorsa in cui viene eseguito il codice (ad esempio una macchina virtuale Compute Engine). Puoi utilizzare ADC anche per l'autenticazione in un ambiente di sviluppo locale. In questo scenario, gcloud CLI crea un file contenente le tue credenziali nel file system locale.
Le credenziali fornite dalla rappresentazione di un account di servizio.
Questo metodo richiede una configurazione più complessa. Se vuoi utilizzare le tue credenziali esistenti per ottenere credenziali di breve durata per un altro account di servizio, ad esempio per eseguire test con un account di servizio in locale o richiedere privilegi elevati temporanei, utilizza questo approccio.
Le credenziali restituite dal server dei metadati.
Questo metodo funziona solo in ambienti con accesso a un server dei metadati. Le credenziali restituite dal server di metadati sono le stesse che verrebbero trovate dalle credenziali predefinite dell'applicazione utilizzando il account di servizio collegato, ma richiedi esplicitamente il token di accesso dal server di metadati e poi lo fornisci con la richiesta REST. L'interrogazione del server di metadati per le credenziali richiede una richiesta HTTP GET; questo metodo non si basa sulla Google Cloud CLI.
-
Puoi utilizzare una chiave API con una richiesta REST solo per le API che accettano chiavi API. Inoltre, la chiave API non deve essere limitata per impedirne l'utilizzo con l'API.
Credenziali gcloud CLI
Per eseguire l'esempio seguente, devi disporre dell'autorizzazione resourcemanager.projects.get
sul progetto. L'autorizzazione resourcemanager.projects.get
è
inclusa in una serie di ruoli, ad esempio il
ruolo Browser (roles/browser
).
Utilizza il comando
gcloud auth print-access-token
per inserire un token di accesso generato dalle tue credenziali utente.L'esempio seguente recupera i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: il tuo ID progetto o nome del progetto Google Cloud .
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"PowerShell
Esegui questo comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID" | Select-Object -Expand ContentVengono restituiti i dettagli del tuo progetto.
Per le API che richiedono un progetto di quota, devi impostarne uno esplicitamente per la richiesta. Per ulteriori informazioni, consulta la sezione Imposta il progetto di quota con una richiesta REST in questa pagina.
Credenziali predefinite dell'applicazione
Per eseguire l'esempio seguente, l'entità associata alle credenziali che fornisci ad ADC deve disporre dell'autorizzazione resourcemanager.projects.get
per il progetto. L'autorizzazione resourcemanager.projects.get
è inclusa in una serie di ruoli, ad esempio il ruolo Browser (roles/browser
).
Fornisci le credenziali ad ADC.
Se utilizzi una risorsa di calcolo Google Cloud , non devi fornire le credenziali utente ad ADC. Utilizza invece l'account di servizio allegato per fornire le credenziali. Per maggiori informazioni, vedi Configurare ADC per una risorsa con un service account collegato.
Utilizza il comando
gcloud auth application-default print-access-token
per inserire il token di accesso restituito da ADC nella richiesta REST.L'esempio seguente recupera i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: il tuo ID progetto o nome del progetto Google Cloud .
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"PowerShell
Esegui questo comando:
$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID" | Select-Object -Expand ContentVengono restituiti i dettagli del tuo progetto.
Se la tua richiesta restituisce un messaggio di errore relativo alle credenziali dell'utente finale non supportate da questa API, consulta Impostare il progetto di quota con una richiesta REST in questa pagina.
Account di servizio con identità simulata
Il modo più semplice per impersonare un account di servizio per generare un token di accesso è utilizzare gcloud CLI. Tuttavia, se devi generare il token in modo programmatico o non vuoi utilizzare gcloud CLI, puoi utilizzare la rappresentazione per generare un token di breve durata.
Per ulteriori informazioni sulla rappresentazione di un account di servizio, consulta Utilizzare account di servizio account.
Rivedi le autorizzazioni richieste.
- L'entità che vuoi utilizzare per eseguire la simulazione dell'identità deve disporre dell'autorizzazione
iam.serviceAccounts.getAccessToken
per l'account di servizio simulato (chiamato anche service account con privilegi). L'autorizzazioneiam.serviceAccounts.getAccessToken
è inclusa nel ruolo Creatore token service account (roles/iam.serviceAccountTokenCreator
). Se utilizzi il tuo account utente, devi aggiungere questa autorizzazione anche se disponi del ruolo Proprietario (roles/owner
) nel progetto. Per ulteriori informazioni, vedi Impostazione delle autorizzazioni richieste.
- L'entità che vuoi utilizzare per eseguire la simulazione dell'identità deve disporre dell'autorizzazione
Identifica o crea il account di servizio con privilegi, ovvero il account di servizio che rappresenterai.
Il account di servizio con privilegi deve disporre delle autorizzazioni necessarie per effettuare la chiamata al metodo API.
gcloud
- Utilizza il
comando
gcloud auth print-access-token
con il flag--impersonate-service-account
per inserire un token di accesso per l'account di servizio con privilegi nella richiesta REST.
L'esempio seguente recupera i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.
Per eseguire questo esempio, il account di servizio di cui simuli l'identità deve disporre dell'autorizzazione
resourcemanager.projects.get
. L'autorizzazione resourcemanager.projects.get
è inclusa in una serie di ruoli, ad esempio il
ruolo Browser (roles/browser
).
Effettua le seguenti sostituzioni:
PRIV_SA
: l'indirizzo email del account di servizio con privilegi. Ad esempio,my-sa@my-project.iam.gserviceaccount.com
.PROJECT_ID
: il tuo ID progetto o nome del progetto Google Cloud .
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token --impersonate-service-account=PRIV_SA)" \
"https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"
Token di breve durata
Per generare un token di breve durata utilizzando l'impersonificazione del account di servizio, segui le istruzioni fornite in Crea un token di accesso di breve durata.
Server dei metadati
Per ottenere un token di accesso dal server dei metadati, devi effettuare la chiamata REST utilizzando uno dei servizi che hanno accesso a un server dei metadati:
- Compute Engine
- Ambiente standard di App Engine
- Ambiente flessibile di App Engine
- Cloud Run Functions
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Utilizzi uno strumento a riga di comando come curl
per ottenere un token di accesso, quindi
lo inserisci nella richiesta REST.
Esegui query sul server di metadati per un token di accesso:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"
La richiesta restituisce una risposta simile al seguente esempio:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAi85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
Inserisci il token di accesso nella richiesta REST, apportando le seguenti sostituzioni:
ACCESS_TOKEN
: il token di accesso restituito nel passaggio precedente.PROJECT_ID
: il tuo ID progetto o nome del progetto Google Cloud .
curl -X GET \ -H "Authorization: Bearer ACCESS_TOKEN" \ "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"
Chiavi API
Per includere una chiave API in una chiamata API REST, utilizza l'intestazione HTTP x-goog-api-key
, come mostrato nell'esempio seguente:
curl -X POST \ -H "X-goog-api-key: API_KEY" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://translation.googleapis.com/language/translate/v2"
Se non puoi utilizzare l'intestazione HTTP, puoi utilizzare il parametro di query key
.
Tuttavia, questo metodo include la chiave API nell'URL, esponendola al
furto tramite scansioni dell'URL.
L'esempio seguente mostra come utilizzare il parametro di query key
con una richiesta dell'API Cloud Natural Language per
documents.analyzeEntities
.
Sostituisci API_KEY
con la stringa della chiave API.
POST https://language.googleapis.com/v1/documents:analyzeEntities?key=API_KEY
Imposta il progetto di quota con una richiesta REST
Per chiamare alcune API con le credenziali utente, devi anche impostare il progetto
fatturato per il tuo utilizzo e utilizzato per monitorare la quota. Se la chiamata API restituisce un messaggio di errore che indica che le credenziali utente non sono supportate o che il progetto di quota non è impostato, devi impostare esplicitamente il progetto di quota per la richiesta.
Per impostare il progetto di quota, includi l'intestazione x-goog-user-project
nella tua
richiesta.
Per ulteriori informazioni su quando potresti riscontrare questo problema, vedi Le credenziali utente non funzionano.
Per poter designare un progetto come progetto di fatturazione, devi disporre dell'autorizzazione IAM serviceusage.services.use
. L'autorizzazione
serviceusage.services.use
è inclusa nel ruolo IAM Consumer utilizzo dei servizi. Se non disponi dell'autorizzazione serviceusage.services.use
per alcun progetto, contatta l'amministratore della sicurezza o un proprietario del progetto che possa assegnarti il ruolo Consumer di utilizzo del servizio nel progetto.
L'esempio seguente utilizza l'API Cloud Translation per tradurre la parola "hello" in spagnolo. L'API Cloud Translation è
un'API che richiede la specifica di un progetto di quota. Per eseguire l'esempio, crea un
file denominato request.json
con i contenuti del corpo della richiesta.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- PROJECT_ID: l'ID o il nome del progetto Google Cloud da utilizzare come progetto di fatturazione.
Corpo JSON della richiesta:
{ "q": "hello", "source": "en", "target": "es" }
Per inviare la richiesta, scegli una di queste opzioni:
curl
Salva il corpo della richiesta in un file denominato request.json
,
quindi esegui il comando seguente:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://translation.googleapis.com/language/translate/v2"
PowerShell
Salva il corpo della richiesta in un file denominato request.json
,
quindi esegui il comando seguente:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://translation.googleapis.com/language/translate/v2" | Select-Object -Expand Content
La richiesta di traduzione va a buon fine. Puoi provare il comando senza l'intestazione HTTP x-goog-user-project
per vedere cosa succede quando non specifichi il progetto di fatturazione.
Passaggi successivi
- Consulta una panoramica dell'autenticazione.
- Scopri come autenticarti con le librerie client.
- Comprendi la configurazione dell'autenticazione gcloud CLI e la configurazione ADC .