Autenticazione per l'utilizzo di REST

Questa pagina descrive come eseguire l'autenticazione quando invii una richiesta REST a un'API di Google.

Per informazioni su come eseguire l'autenticazione quando utilizzi le librerie client di Google, consulta Autenticazione tramite librerie client.

Prima di iniziare

Per eseguire gli esempi su questa pagina, segui questi passaggi:

  1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

    gcloud init
  2. Abilita le API Cloud Resource Manager and Identity and Access Management (IAM).

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com

Se non vuoi utilizzare gcloud CLI, puoi saltare questi passaggi e utilizzare il server dei metadati per restituire un token.

Tipi di credenziali

Puoi utilizzare i seguenti tipi di credenziali per autenticare una chiamata REST:

  • Le credenziali dell'interfaccia a riga di comando gcloud.

    Questo è 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 credenziali gcloud non corrispondono a quelle che fornisci ad ADC tramite lgcloud CLI. Per maggiori informazioni, consulta Configurazione dell'autenticazione e della configurazione ADC di gcloud CLI.

  • Le credenziali fornite per le Credenziali predefinite dell'applicazione (ADC).

    Questo metodo è l'opzione preferita per autenticare una chiamata REST in un ambiente di produzione, perché ADC trova le credenziali della risorsa su cui è in esecuzione il tuo codice, ad esempio una macchina virtuale Compute Engine. Puoi anche utilizzare ADC 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 dall'identità di un account di servizio.

    Questo metodo richiede un'ulteriore configurazione. Usa questo approccio se vuoi usare le credenziali esistenti per ottenere credenziali di breve durata per un altro account di servizio, ad esempio per eseguire test locali con un account di servizio o richiedere privilegi elevati temporanei.

  • Le credenziali restituite dal server dei metadati.

    Questo metodo funziona solo negli ambienti con accesso a un server di metadati. Le credenziali restituite dal server dei metadati corrispondono alle credenziali che si trovano in Credenziali predefinite dell'applicazione utilizzando l'account di servizio associato, ma richiedi esplicitamente il token di accesso al server dei metadati e poi lo fornisci con la richiesta REST. L'esecuzione di una query sul server di metadati per ottenere le credenziali richiede una richiesta HTTP GET; questo metodo non si basa su Google Cloud CLI.

Credenziali interfaccia alla 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).

  1. Utilizza il comando gcloud auth print-access-token per inserire un token di accesso generato dalle tue credenziali utente.

    L'esempio seguente restituisce i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID o il nome del tuo progetto Google Cloud.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    arricciatura

    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 Content

    Vengono restituiti i dettagli del progetto.

Per le API che richiedono un progetto di quota, devi impostarne una esplicitamente per la richiesta. Per maggiori informazioni, consulta Impostare 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 fornite ad ADC richiede l'autorizzazione resourcemanager.projects.get nel progetto. L'autorizzazione resourcemanager.projects.get è inclusa in una serie di ruoli, ad esempio il ruolo Browser (roles/browser).

  1. Fornisci le credenziali ad ADC.

    Se l'esecuzione avviene su una risorsa di computing Google Cloud, non devi fornire le tue credenziali utente ad ADC. Utilizza invece l'account di servizio associato per fornire le credenziali. Per maggiori informazioni, consulta i servizi che supportano il collegamento di un account di servizio.

  2. 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 restituisce i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID o il nome del tuo progetto Google Cloud.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    arricciatura

    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 Content

    Vengono restituiti i dettagli del progetto.

    Se la 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

Per ulteriori informazioni sull'identità di un account di servizio, consulta Utilizzare il furto dell'identità degli account di servizio.

  1. Rivedi le autorizzazioni richieste.

    • Il tuo account utente deve disporre dell'autorizzazione iam.serviceAccounts.getAccessToken per l'account di servizio impersonato (chiamato anche account di servizio che determina i privilegi). L'autorizzazione iam.serviceAccounts.getAccessToken è inclusa nel ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator). Questa autorizzazione è necessaria anche se disponi del ruolo Proprietario (roles/owner) per il progetto. Per ulteriori informazioni, consulta Impostazione delle autorizzazioni richieste.

    • Nell'esempio riportato di seguito, l'account di servizio che stai impersonando 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).

  2. Identifica o crea l'account di servizio con privilegi, ovvero l'account di servizio che vuoi impersonare.

    L'account di servizio con privilegi deve avere le autorizzazioni necessarie per effettuare la chiamata al metodo API.

  3. 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 restituisce i dettagli del progetto specificato. Puoi utilizzare lo stesso pattern per qualsiasi richiesta REST.

    Per eseguire questo esempio, l'account di servizio che usi deve avere l'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 dell'account di servizio che dispone dei privilegi. Ad esempio, my-sa@my-project.iam.gserviceaccount.com.

    • PROJECT_ID: l'ID o il nome del tuo 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"
    

Server 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 di metadati:

Utilizza uno strumento a riga di comando come curl per ottenere un token di accesso e quindi inseriscilo nella richiesta REST.

  1. Esegui una query sul server metadati per trovare 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 all'esempio seguente:

    {
          "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAi85nHq39HE3C2LTrCARA",
          "expires_in":3599,
          "token_type":"Bearer"
     }
    
  2. Inserisci il token di accesso nella richiesta REST, apportando le seguenti sostituzioni:

    • ACCESS_TOKEN: il token di accesso restituito nel passaggio precedente.
    • PROJECT_ID: l'ID o il nome del tuo progetto Google Cloud.
    curl -X GET \
        -H "Authorization: Bearer ACCESS_TOKEN" \
        "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"
    

Imposta il progetto della quota con una richiesta REST

Per chiamare alcune API con credenziali utente, devi anche impostare il progetto che viene fatturato per il tuo utilizzo e utilizzato per monitorare la quota. Se la chiamata API restituisce un messaggio di errore in cui viene indicato che le credenziali utente non sono supportate o che il progetto di quota non è impostato, devi impostare esplicitamente il progetto della quota per la richiesta. Per impostare il progetto della quota, includi l'intestazione x-goog-user-project nella richiesta.

Per ulteriori informazioni su quando potresti riscontrare questo problema, consulta Le credenziali utente non funzionano.

Devi disporre dell'autorizzazione IAM serviceusage.services.use affinché un progetto possa designarlo come progetto di fatturazione. L'autorizzazione serviceusage.services.use è inclusa nel ruolo IAM consumer di Service Usage. Se non hai l'autorizzazione serviceusage.services.use per alcun progetto, contatta l'amministratore della sicurezza o un proprietario del progetto che può concederti il ruolo consumer utilizzo dei servizi 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 l'indicazione di un progetto quota. Per eseguire l'esempio, crea un file denominato request.json con il contenuto del corpo della richiesta.

Prima di utilizzare i dati della richiesta, effettua 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 delle seguenti opzioni:

arricciatura

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

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 ed esegui questo comando:

$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 è andata a buon fine. Puoi provare il comando senza l'intestazione x-goog-user-project per vedere cosa succede quando non specifichi il progetto di fatturazione.

Passaggi successivi