Creare credenziali di breve durata per un account di servizio

In questa pagina viene spiegato come creare credenziali di breve durata per un account di servizio, che puoi utilizzare per impersonare l'account di servizio. A seconda del tipo di token creato, il token di breve durata fornisce l'identità (per i token ID) o le autorizzazioni (per i token di accesso) associate all'account di servizio.

Se l'architettura del sistema richiede l'utilizzo di una serie di chiamate per la generazione di token, puoi utilizzare una catena di delega composta da più account servizio. Nella maggior parte dei casi, il metodo diretto, come spiegato in questa pagina, è sufficiente.

Prima di iniziare

  • Enable the IAM and Service Account Credentials APIs:

    gcloud services enable iam.googleapis.com iamcredentials.googleapis.com
  • Configurare l'autenticazione.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    Vai

    Per utilizzare gli Go esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Java

    Per utilizzare gli Java esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Node.js

    Per utilizzare gli Node.js esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Python

    Per utilizzare gli Python esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    REST

    Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Per saperne di più, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

  • Scopri di più sugli account di servizio IAM.

  • Scopri di più sulla rappresentazione dell'account di servizio.

  • Scopri di che tipo di token hai bisogno e segui i passaggi appropriati indicati nelle sezioni seguenti:

Creare un token di accesso di breve durata

La maggior parte delle API Google accetta i token di accesso per l'autenticazione. Quando generi un token di accesso utilizzando l'usurpazione dell'identità del account di servizio, il token di accesso non è associato a un token di aggiornamento, il che significa che quando il token scade, devi ripetere la procedura di usurpazione dell'identità per generarne uno nuovo.

Per ulteriori informazioni, vedi Token di accesso.

Per creare un token di accesso di breve durata, completa le seguenti attività:

Fornire le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: l'utente chiamante che richiede la credenziale e l'account di servizio per cui viene creata la credenziale. La modalità di configurazione delle autorizzazioni dipende dal fatto che il chiamante si autentichi come account di servizio o come account utente.

Se vuoi eseguire un comando REST o gcloud CLI in questa pagina in un ambiente di sviluppo locale, il chiamante può essere rappresentato dalle credenziali dell'utente. Per i workload automatizzati, ad esempio un'applicazione in esecuzione su Compute Engine, il chiamante deve essere rappresentato da un account di servizio.

Service account

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolti i seguenti principali:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta per le credenziali di breve durata.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per concedere a CALLER_SA le autorizzazioni per creare credenziali di breve durata per PRIV_SA, concedi a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio dell'utente che chiama, CALLER_SA.

    Ad esempio, demo@my-project.iam.gserviceaccount.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account di servizio.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_SA: l'indirizzo email dell'account di servizio che rappresenta l'applicazione che richiede il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_SA è l'account di servizio che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Credenziali utente

Quando vuoi utilizzare Google Cloud CLI per generare token di breve durata o vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generarli. Spesso puoi utilizzare il tuo account utente.

Quando utilizzi un account utente per generare token di breve durata, sono coinvolte le seguenti identità:

  • Account chiamante (CALLER_ACCOUNT)

    Questo account utente viene utilizzato per generare credenziali di breve durata per l'account di servizio con privilegi.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per consentire a CALLER_ACCOUNT di creare credenziali di breve durata per PRIV_SA, concedi a CALLER_ACCOUNT il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'identificatore principale dell'account chiamante, CALLER_ACCOUNT.

    Ad esempio, my-user@example.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account utente.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_ACCOUNT: l'indirizzo email dell'account utente utilizzato per richiedere il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere CALLER_ACCOUNT il ruolo Creatore token account di servizio ( roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_ACCOUNT è l'account utente che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Genera il token di accesso

Puoi generare un token di accesso OAuth 2.0 utilizzando l'interfaccia alla gcloud CLI, l'API REST o le librerie client di Cloud e le librerie client dell'API di Google.

Se utilizzi l'API REST e il tuo sistema è configurato per consentire durate dei token estese, puoi creare un token con una durata superiore a quella predefinita. L'interfaccia a riga di comando Google Cloud non supporta l'impostazione di una durata per il token.

I sample riportati di seguito sono progettati per essere utilizzati in un ambiente di sviluppo locale. Il chiamante deve essere rappresentato da un account utente anziché da un account di servizio.

Genera un token di accesso OAuth 2.0 per un account di servizio:

gcloud

  1. Assicurati di aver eseguito l'accesso alla CLI gcloud con l'account utente dell'utente che chiama.

  2. Genera un token per l'account di servizio utilizzando il comando gcloud auth print-access-token.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.

    Esegui il seguente comando:

    Linux, macOS o Cloud Shell

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Windows (PowerShell)

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Windows (cmd.exe)

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Dovresti ricevere una risposta simile alla seguente:

    WARNING: This command is using service account impersonation. All API calls will be executed as
    [my-sa@my-project.iam.gserviceaccount.com].
    ya29.c.b0AXv0zTPnzTnDV8F8Aj5Fgy46Yf2v_v8eZIoKq7xGpfbpXuy23aQ1693m3gAuE8AZga7w6kdagN7a9bfdDYbdeoGY0CMHOClsCwIdutL7k_RFC672lOCbUgF5hS8Iu2nCA8hle-11LJXBLmaxFmH08ZTBJLuDrWSNd8cYqGYFunSC1K1qLIPBF18tsa0hxVgKPucI8b1A9L8_MK1JGLGcr0n7-zY77_lmbcdODG3NmIbLOGWOutjJgqSO_YoeCKK2QTUZIp5PG7RkKlXWnmYJA9pEahzNoQrs5sWZctc2bia9af_ITzqqlXC9h1Kj5-me6e8rd734MJvpagqYazRk0gGWpMb03XmMGpgPc_FBp4pnX9rGOzW83SNpcDz8zeFO1Q0Bo3N7CuZougjRce0y8I2_4rtw5ME_nV3wrCWa..................................................................................................................................................................................................................................................................................................
    

REST

Il metodo serviceAccounts.generateAccessToken dell'API Credenziali account di servizio genera un token di accesso OAuth 2.0 per un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
  • LIFETIME: il tempo che rimane fino alla scadenza del token di accesso, in secondi. Ad esempio, 300s.

    Per impostazione predefinita, la durata massima del token è di 1 ora (3600 secondi). Per estendere la durata massima di questi token a 12 ore (43.200 secondi), aggiungi l'account di servizio a un criterio dell'organizzazione che includa il vincolo dell'elenco constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Metodo HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken

Corpo JSON della richiesta:

{
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

Per inviare la richiesta, espandi una di queste opzioni:

Se la richiesta generateAccessToken è andata a buon fine, il corpo della risposta contiene un token di accesso OAuth 2.0 e una data di scadenza. Il token accessToken può quindi essere utilizzato per autenticare una richiesta per conto dell'account di servizio fino a quando non viene raggiunto il token expireTime:

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

Vai

import (
	"context"
	"fmt"
	"io"
	"time"

	"golang.org/x/oauth2/google"
	"google.golang.org/api/impersonate"
	"google.golang.org/api/option"
)

// getAccessTokenFromImpersonatedCredentials uses a service account (SA1) to impersonate
// another service account (SA2) and obtain OAuth2 token for the impersonated account.
// To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator" permission on SA2.
func getAccessTokenFromImpersonatedCredentials(w io.Writer, impersonatedServiceAccount, scope string) error {
	// impersonatedServiceAccount := "name@project.service.gserviceaccount.com"
	// scope := "https://www.googleapis.com/auth/cloud-platform"

	ctx := context.Background()

	// Construct the GoogleCredentials object which obtains the default configuration from your
	// working environment.
	credentials, err := google.FindDefaultCredentials(ctx, scope)
	if err != nil {
		fmt.Fprintf(w, "failed to generate default credentials: %v", err)
		return fmt.Errorf("failed to generate default credentials: %w", err)
	}

	ts, err := impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{
		TargetPrincipal: impersonatedServiceAccount,
		Scopes:          []string{scope},
		Lifetime:        300 * time.Second,
		// delegates: The chained list of delegates required to grant the final accessToken.
		// For more information, see:
		// https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
		// Delegates is NOT USED here.
		Delegates: []string{},
	}, option.WithCredentials(credentials))
	if err != nil {
		fmt.Fprintf(w, "CredentialsTokenSource error: %v", err)
		return fmt.Errorf("CredentialsTokenSource error: %w", err)
	}

	// Get the OAuth2 token.
	// Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
	t, err := ts.Token()
	if err != nil {
		fmt.Fprintf(w, "failed to receive token: %v", err)
		return fmt.Errorf("failed to receive token: %w", err)
	}
	fmt.Fprintf(w, "Generated OAuth2 token with length %d.\n", len(t.AccessToken))

	return nil
}

Java


package com.google.cloud.auth.samples;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ImpersonatedCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class AccessTokenFromImpersonatedCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Replace the below variables before running the code.

    // Provide the scopes that you might need to request access to Google APIs,
    // depending on the level of access you need.
    // This example uses the cloud-wide scope and uses IAM to narrow the permissions.
    // https://cloud.google.com/docs/authentication/external/authorization-gcp
    // For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    String scope = "https://www.googleapis.com/auth/cloud-platform";

    // The name of the privilege-bearing service account for whom the credential is created.
    String impersonatedServiceAccount = "name@project.service.gserviceaccount.com";

    getAccessToken(impersonatedServiceAccount, scope);
  }

  // Use a service account (SA1) to impersonate another service account (SA2) and obtain an ID token
  // for the impersonated account.
  // To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator"
  // permission on SA2.
  public static void getAccessToken(
      String impersonatedServiceAccount, String scope) throws IOException {

    // Construct the GoogleCredentials object which obtains the default configuration from your
    // working environment.
    GoogleCredentials googleCredentials = GoogleCredentials.getApplicationDefault();

    // delegates: The chained list of delegates required to grant the final accessToken.
    // For more information, see:
    // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
    // Delegate is NOT USED here.
    List<String> delegates = null;

    // Create the impersonated credential.
    ImpersonatedCredentials impersonatedCredentials =
        ImpersonatedCredentials.newBuilder()
            .setSourceCredentials(googleCredentials)
            .setTargetPrincipal(impersonatedServiceAccount)
            .setScopes(Arrays.asList(scope))
            .setLifetime(300)
            .setDelegates(delegates)
            .build();

    // Get the OAuth2 token.
    // Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
    impersonatedCredentials.refresh();
    String accessToken = impersonatedCredentials.getAccessToken().getTokenValue();
    System.out.println("Generated access token.");
  }
}

Node.js

/**
 * TODO(developer):
 *  Uncomment and replace these variables before running the sample.
 */
// const impersonatedServiceAccount = 'name@project.service.gserviceaccount.com';
// const scope = 'https://www.googleapis.com/auth/cloud-platform';

const {GoogleAuth, Impersonated} = require('google-auth-library');

async function getAccessTokenFromImpersonatedCredentials() {
  const googleAuth = new GoogleAuth({
    scopes: scope,
  });
  // Construct the GoogleCredentials object which obtains the default configuration from your
  // working environment.
  const {credential} = await googleAuth.getApplicationDefault();

  // delegates: The chained list of delegates required to grant the final accessToken.
  // For more information, see:
  // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
  // Delegate is NOT USED here.
  const delegates = [];

  // Create the impersonated credential.
  const impersonatedCredentials = new Impersonated({
    sourceClient: credential,
    delegates,
    targetPrincipal: impersonatedServiceAccount,
    targetScopes: [scope],
    lifetime: 300,
  });

  // Get the OAuth2 token.
  // Once you've obtained the OAuth2 token, you can use it to make an authenticated call
  // to the target audience.
  const resp = await impersonatedCredentials.getAccessToken();
  // Token is in resp.token.
  console.log('Generated OAuth2 token with length %s', resp.token.length);
}

getAccessTokenFromImpersonatedCredentials();

Python

def accesstoken_from_impersonated_credentials(
    impersonated_service_account: str, scope: str
):
    from google.auth import impersonated_credentials
    import google.auth.transport.requests

    """
      Use a service account (SA1) to impersonate another service account (SA2)
      and obtain an ID token for the impersonated account.
      To obtain a token for SA2, SA1 should have the
      "roles/iam.serviceAccountTokenCreator" permission on SA2.

    Args:
        impersonated_service_account: The name of the privilege-bearing service account for whom the credential is created.
            Examples: name@project.service.gserviceaccount.com

        scope: Provide the scopes that you might need to request to access Google APIs,
            depending on the level of access you need.
            For this example, we use the cloud-wide scope and use IAM to narrow the permissions.
            https://cloud.google.com/docs/authentication#authorization_for_services
            For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    """

    # Construct the GoogleCredentials object which obtains the default configuration from your
    # working environment.
    credentials, project_id = google.auth.default()

    # Create the impersonated credential.
    target_credentials = impersonated_credentials.Credentials(
        source_credentials=credentials,
        target_principal=impersonated_service_account,
        # delegates: The chained list of delegates required to grant the final accessToken.
        # For more information, see:
        # https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
        # Delegate is NOT USED here.
        delegates=[],
        target_scopes=[scope],
        lifetime=300,
    )

    # Get the OAuth2 token.
    # Once you've obtained the OAuth2 token, use it to make an authenticated call
    # to the target audience.
    request = google.auth.transport.requests.Request()
    target_credentials.refresh(request)
    # The token field is target_credentials.token.
    print("Generated OAuth2 token.")

Crea un token ID OpenID Connect (OIDC)

I token ID rispettano la specifica OpenID Connect (OIDC). I token ID sono accettati da un numero limitato di servizi e applicazioni.

Per ulteriori informazioni, consulta Token di identità e Autenticazione per le applicazioni ospitate su Cloud Run o Cloud Run Functions.

Per creare un token ID:

Fornire le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: l'utente chiamante che richiede la credenziale e l'account di servizio per cui viene creata la credenziale. La modalità di configurazione delle autorizzazioni dipende dal fatto che il chiamante si autentichi come account di servizio o come account utente.

Se vuoi eseguire un comando REST o gcloud CLI in questa pagina in un ambiente di sviluppo locale, il chiamante può essere rappresentato dalle credenziali dell'utente. Per i workload automatizzati, ad esempio un'applicazione in esecuzione su Compute Engine, il chiamante deve essere rappresentato da un account di servizio.

Service account

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolti i seguenti principali:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta per le credenziali di breve durata.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per concedere a CALLER_SA le autorizzazioni per creare credenziali di breve durata per PRIV_SA, concedi a CALLER_SA il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio dell'utente che chiama, CALLER_SA.

    Ad esempio, demo@my-project.iam.gserviceaccount.com.

  7. Seleziona il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account di servizio.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_SA: l'indirizzo email dell'account di servizio che rappresenta l'applicazione che richiede il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere a CALLER_SA il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_SA è l'account di servizio che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Credenziali utente

Quando vuoi utilizzare Google Cloud CLI per generare token di breve durata o vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generarli. Spesso puoi utilizzare il tuo account utente.

Quando utilizzi un account utente per generare token di breve durata, sono coinvolte le seguenti identità:

  • Account chiamante (CALLER_ACCOUNT)

    Questo account utente viene utilizzato per generare credenziali di breve durata per l'account di servizio con privilegi.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per consentire a CALLER_ACCOUNT di creare credenziali di breve durata per PRIV_SA, devi concedere a CALLER_ACCOUNT il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'identificatore principale dell'account chiamante, CALLER_ACCOUNT.

    Ad esempio, my-user@example.com.

  7. Seleziona il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account utente.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_ACCOUNT: l'indirizzo email dell'account utente utilizzato per richiedere il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere CALLER_ACCOUNT il ruolo Service Account OpenID Connect Identity Token Creator (roles/iam.serviceAccountOpenIdTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_ACCOUNT è l'account utente che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Genera il token ID

Puoi generare un token ID OpenID Connect (OIDC) utilizzando gcloud CLI, l'API REST o le librerie client Cloud e le librerie client dell'API di Google.

I sample riportati di seguito sono progettati per essere utilizzati in un ambiente di sviluppo locale. Il chiamante deve essere rappresentato da un account utente anziché da un account di servizio.

I token ID OIDC sono validi per 1 ora (3600 secondi).

Genera un token ID OIDC firmato da Google per un account di servizio:

gcloud

  1. Assicurati di aver eseguito l'accesso a gcloud CLI con l'account utente dell'utente che chiama.

  2. Genera un token per l'account di servizio utilizzando il comando gcloud auth print-identity-token.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • AUDIENCE_NAME: il segmento di pubblico del token, in genere l'URL dell'applicazione o del servizio a cui verrà utilizzato il token per accedere.
      • Esegui il seguente comando:

        Linux, macOS o Cloud Shell

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (PowerShell)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (cmd.exe)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Dovresti ricevere una risposta simile alla seguente:

        WARNING: This command is using service account impersonation. All API calls will be executed as
        [my-sa@my-project.iam.gserviceaccount.com].
        eyJhbGciOiJSUzI1NiIsImtpZDNhMDg4ZDRmZmMjJkYTVmZTM5MDZjY2MiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ3d3cuZXhhbXBsJhenAiOiIxMTYzwNDYyMDk0ODIiLCJleHAiOjE2NTQ4ODU0MzEsImlhdCI6MTY1NDg4MTgzMSwiaXN6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIMDQ2MjA5NDgyIn0.F7mu8IHj5VQdu7ItFrnYAKyGd7YqXuOP_rFLc98q8BaFBycAF1zAQnSnwqnSUXba0UK9PDT_-IOry68qLwBObz4XlX9lk0ehpN0O0W9FcFToKLB6wefXXPd4h7xtuPe5KzmpSOqj2Qqv34HriGw00Nqd-oGSgNY_lZ4wGEf4rT4oQa_kEcrY57Q2G6pwd769BhgeFwoLi5aK_Cv2kvf_zfMszC-xlkP9zwWQ8XinJBwe-qcQBa4NTgrbueNtXsEjccBS366zmw
        

REST

Il metodo serviceAccounts.generateIdToken dell'API Service Account Credentials genera un token ID OIDC per un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
  • AUDIENCE_NAME: il segmento di pubblico del token, in genere l'URL dell'applicazione o del servizio a cui verrà utilizzato il token per accedere.

Metodo HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken

Corpo JSON della richiesta:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

Per inviare la richiesta, espandi una di queste opzioni:

Se la richiesta generateId è andata a buon fine, il corpo della risposta contiene un token ID valido per 1 ora. token può quindi essere utilizzato per autenticare una richiesta per conto dell'account di servizio:

{
  "token": "eyJ0eXAi...NiJ9"
}

Creare un token web JSON (JWT) autofirmato

I token web JSON (JWT) autofirmati sono utili in una serie di scenari:

  • Comunicazione sicura tra le tue applicazioni. In questo scenario, un'applicazione può firmare un token che può essere verificato da un'altra applicazione a scopo di autenticazione.
  • Autenticazione di una chiamata a un'API di Google come descritto in Autorizzazione dell'account di servizio senza OAuth.
  • Autenticazione in un'API di cui è stato eseguito il deployment con API Gateway.
  • Trattare un account di servizio come un provider di identità firmando un JWT che contiene claim arbitrari su un utente, un account o un dispositivo.

Per creare un JWT, completa le seguenti attività:

Fornire le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: l'utente chiamante che richiede la credenziale e l'account di servizio per cui viene creata la credenziale. La modalità di configurazione delle autorizzazioni dipende dal fatto che il chiamante si autentichi come account di servizio o come account utente.

Se vuoi eseguire un comando REST o gcloud CLI in questa pagina in un ambiente di sviluppo locale, il chiamante può essere rappresentato dalle credenziali dell'utente. Per i workload automatizzati, ad esempio un'applicazione in esecuzione su Compute Engine, il chiamante deve essere rappresentato da un account di servizio.

Service account

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolti i seguenti principali:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta per le credenziali di breve durata.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per concedere a CALLER_SA le autorizzazioni per creare credenziali di breve durata per PRIV_SA, concedi a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio dell'utente che chiama, CALLER_SA.

    Ad esempio, demo@my-project.iam.gserviceaccount.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account di servizio.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_SA: l'indirizzo email dell'account di servizio che rappresenta l'applicazione che richiede il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_SA è l'account di servizio che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Credenziali utente

Quando vuoi utilizzare Google Cloud CLI per generare token di breve durata o vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generarli. Spesso puoi utilizzare il tuo account utente.

Quando utilizzi un account utente per generare token di breve durata, sono coinvolte le seguenti identità:

  • Account chiamante (CALLER_ACCOUNT)

    Questo account utente viene utilizzato per generare credenziali di breve durata per l'account di servizio con privilegi.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per consentire a CALLER_ACCOUNT di creare credenziali di breve durata per PRIV_SA, concedi a CALLER_ACCOUNT il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'identificatore principale dell'account chiamante, CALLER_ACCOUNT.

    Ad esempio, my-user@example.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account utente.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_ACCOUNT: l'indirizzo email dell'account utente utilizzato per richiedere il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere CALLER_ACCOUNT il ruolo Creatore token account di servizio ( roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_ACCOUNT è l'account utente che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Genera il JWT

Genera un JWT autofirmato:

REST

Il metodo serviceAccounts.signJwt dell'API Credenziali account di servizio firma un JWT utilizzando la chiave privata gestita dal sistema di un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
  • JWT_PAYLOAD: il payload JWT da firmare, ovvero un oggetto JSON che contiene un insieme di attestazioni JWT. Includi le rivendicazioni necessarie per il tuo caso d'uso e per soddisfare i requisiti di convalida del servizio che stai chiamando. Se chiami un'API Google, consulta la Guida all'autenticazione di Google per i requisiti per la rivendicazione.

    La rivendicazione exp (ora di scadenza) non deve essere successiva di più di 12 ore. Se chiami un'API Google, il claim exp deve essere impostato non più di 1 ora in futuro.

    Il seguente payload di esempio contiene rivendicazioni per chiamare un'API Google, dove EXP è un timestamp intero che rappresenta la data e l'ora di scadenza:

    { \"iss\": \"PRIV_SA\", \"sub\": \"PRIV_SA\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

Metodo HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signJwt

Corpo JSON della richiesta:

{
  "payload": "JWT_PAYLOAD"
}

Per inviare la richiesta, espandi una di queste opzioni:

Se la richiesta signJwt è andata a buon fine, il corpo della risposta contiene un JWT firmato e l'ID chiave di firma utilizzato per firmare il JWT. Puoi utilizzare il valore signedJwt come token di trasporto per autenticare direttamente una richiesta per conto dell'account di servizio. Il token è valido fino all'ora di scadenza specificata nella richiesta:

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

Creare un oggetto binario (blob) autofirmato

Gli oggetti binari o i blob con firma autografa vengono utilizzati per trasmettere dati binari in modo che l'autore dei dati sia noto (poiché il blob è con firma autografa). I blob possono essere utilizzati per creare firme, un oggetto Cloud Storage necessario per vari flussi di autenticazione, inclusi gli URL firmati. Per informazioni sulle firme, consulta la documentazione di Cloud Storage.

Per creare un oggetto binario autofirmato:

Fornire le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: l'utente chiamante che richiede la credenziale e l'account di servizio per cui viene creata la credenziale. La modalità di configurazione delle autorizzazioni dipende dal fatto che il chiamante si autentichi come account di servizio o come account utente.

Se vuoi eseguire un comando REST o gcloud CLI in questa pagina in un ambiente di sviluppo locale, il chiamante può essere rappresentato dalle credenziali dell'utente. Per i workload automatizzati, ad esempio un'applicazione in esecuzione su Compute Engine, il chiamante deve essere rappresentato da un account di servizio.

Service account

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolti i seguenti principali:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta per le credenziali di breve durata.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per concedere a CALLER_SA le autorizzazioni per creare credenziali di breve durata per PRIV_SA, concedi a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio dell'utente che chiama, CALLER_SA.

    Ad esempio, demo@my-project.iam.gserviceaccount.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account di servizio.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_SA: l'indirizzo email dell'account di servizio che rappresenta l'applicazione che richiede il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere a CALLER_SA il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_SA è l'account di servizio che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Credenziali utente

Quando vuoi utilizzare Google Cloud CLI per generare token di breve durata o vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generarli. Spesso puoi utilizzare il tuo account utente.

Quando utilizzi un account utente per generare token di breve durata, sono coinvolte le seguenti identità:

  • Account chiamante (CALLER_ACCOUNT)

    Questo account utente viene utilizzato per generare credenziali di breve durata per l'account di servizio con privilegi.

  • Account di servizio con privilegi (PRIV_SA)

    A questo account di servizio vengono concessi i ruoli IAM necessari per il token di breve durata. Si tratta dell'account di servizio per il quale viene creato il token di breve durata.

Per consentire a CALLER_ACCOUNT di creare credenziali di breve durata per PRIV_SA, concedi a CALLER_ACCOUNT il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) su PRIV_SA.

Concedi il ruolo richiesto su PRIV_SA:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.
  3. Fai clic sull'indirizzo email dell'account di servizio con i privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Enti con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'identificatore principale dell'account chiamante, CALLER_ACCOUNT.

    Ad esempio, my-user@example.com.

  7. Seleziona il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).
  8. Fai clic su Salva per concedere il ruolo all'account utente.

gcloud

Il comando gcloud iam service-accounts add-iam-policy-binding concede un ruolo a un account di servizio.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene generato il token.
  • CALLER_ACCOUNT: l'indirizzo email dell'account utente utilizzato per richiedere il token di breve durata.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Dovresti ricevere una risposta simile alla seguente:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

    Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Corpo JSON della richiesta:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo all'account di servizio, la risposta contiene solo un valore etag. Includi il valore etag nel passaggio successivo.

  2. Modifica il criterio di autorizzazione per concedere CALLER_ACCOUNT il ruolo Creatore token account di servizio ( roles/iam.serviceAccountTokenCreator).

    Ad esempio, per modificare la risposta di esempio del passaggio precedente, aggiungi quanto segue:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. Scrivi il criterio di autorizzazione aggiornato:

    Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per il quale viene creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento delle norme.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la pagina Riferimento ai criteri.

      Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue, dove CALLER_ACCOUNT è l'account utente che crea il token di breve durata:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metodo HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene il criterio di autorizzazione aggiornato.

Genera il blob autofirmato

Genera un blob autofirmato per l'account di servizio:

REST

Il metodo serviceAccounts.signBlob dell'API Credentials for Service Account firma un blob utilizzando la chiave privata gestita dal sistema di un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui viene creato il token di breve durata.
  • BLOB_PAYLOAD: una stringa di byte codificata in base64. Ad esempio, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

Metodo HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob

Corpo JSON della richiesta:

{
  "payload": "BLOB_PAYLOAD"
}

Per inviare la richiesta, espandi una di queste opzioni:

Se la richiesta signBlob è andata a buon fine, il corpo della risposta contiene un blob firmato e l'ID chiave di firma utilizzato per firmare il blob. Puoi utilizzare il valore signedBlob come token di accesso per autenticare direttamente una richiesta per conto dell'account di servizio. Il token è valido fino alla scadenza della chiave privata gestita dal sistema dell'account di servizio. L'ID di questa chiave è il valore del campo keyId nella risposta.

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}