Creare credenziali di breve durata per un account di servizio

Questa pagina spiega 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 tuo sistema richiede l'utilizzo di una serie di chiamate per la generazione di token, puoi utilizzare una catena di delega composta da più account di servizio. Nella maggior parte dei casi, è sufficiente utilizzare il metodo diretto, come spiegato in questa pagina.

Prima di iniziare

Creare un token di accesso di breve durata

I token di accesso sono accettati per l'autenticazione dalla maggior parte delle API di Google. Quando generi un token di accesso utilizzando la rappresentazione degli account di servizio, il token di accesso viene fornito senza un token di aggiornamento, il che significa che, alla scadenza del token, devi ripetere il processo di rappresentazione per generarne uno nuovo.

Per ulteriori informazioni, consulta la sezione Token di accesso.

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

Fornisci le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: il chiamante che richiede la credenziale e l'account di servizio per il quale è stata creata. La modalità di configurazione delle autorizzazioni dipende dall'autenticazione del chiamante come account di servizio o Account Google.

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

Account di servizio

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolte le seguenti entità:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta delle 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio del chiamante, 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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio che dispone dei privilegi per cui 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 questo 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 ottiene il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo per l'account di servizio, la risposta contiene solo un valore etag. Includi quel 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 al passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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

Se vuoi utilizzare Google Cloud CLI per generare token di breve durata o se vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generare i token. Spesso puoi usare il tuo Account Google.

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

  • Account Google del 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'Account Google del chiamante, CALLER_ACCOUNT.

    Ad esempio, username@google.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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

Esegui questo 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:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

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

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

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

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

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user: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.

Generare il token di accesso

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

Se utilizzi l'API REST e il tuo sistema è configurato in modo da consentire una durata estesa dei token, puoi creare un token con una durata superiore a quella predefinita. Google Cloud CLI non supporta l'impostazione di una durata per il token.

Gli esempi 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. Accedi a Google Cloud CLI come Account Google del chiamante.

    gcloud auth login CALLER_ACCOUNT
    
  2. Genera un token per l'account di servizio.

    Il comando gcloud auth print-access-token genera un token di accesso OAuth 2.0 per un account di servizio.

    Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

    Esegui questo 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 Service Account Credentials genera un token di accesso OAuth 2.0 per un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
  • LIFETIME: il tempo 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 ha esito positivo, il corpo della risposta contiene un token di accesso OAuth 2.0 e una data di scadenza. accessToken può quindi essere utilizzato per autenticare una richiesta per conto dell'account di servizio fino al raggiungimento di expireTime:

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

Go

Prima di poter utilizzare questo codice campione, devi configurare le Credenziali predefinite dell'applicazione per l'Account Google del chiamante a cui hai concesso in precedenza il ruolo richiesto per rubare l'identità dell'account di servizio con privilegi.

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

Prima di poter utilizzare questo codice campione, devi configurare le Credenziali predefinite dell'applicazione per l'Account Google del chiamante a cui hai concesso in precedenza il ruolo richiesto per rubare l'identità dell'account di servizio con privilegi.


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

Prima di poter utilizzare questo codice campione, devi configurare le Credenziali predefinite dell'applicazione per l'Account Google del chiamante a cui hai concesso in precedenza il ruolo richiesto per rubare l'identità dell'account di servizio con privilegi.

/**
 * 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

Prima di poter utilizzare questo codice campione, devi configurare le Credenziali predefinite dell'applicazione per l'Account Google del chiamante a cui hai concesso in precedenza il ruolo richiesto per rubare l'identità dell'account di servizio con privilegi.

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 sono conformi alla specifica OpenID Connect (OIDC). I token ID sono accettati da un numero limitato di servizi e applicazioni.

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

Per creare un token ID, completa queste attività:

Fornisci le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: il chiamante che richiede la credenziale e l'account di servizio per il quale è stata creata. La modalità di configurazione delle autorizzazioni dipende dall'autenticazione del chiamante come account di servizio o Account Google.

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

Account di servizio

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolte le seguenti entità:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta delle 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. Questo è l'account di servizio per il quale viene creato il token di breve durata.

Per concedere a CALLER_SA le autorizzazioni necessarie per creare credenziali di breve durata per PRIV_SA, concedi a CALLER_SA il ruolo Creatore token identità OpenID Connect dell'account di servizio (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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio del chiamante, CALLER_SA.

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

  7. Seleziona il ruolo Creatore token identità OpenID Connect dell'account di servizio (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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio che dispone dei privilegi per cui 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 questo 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 ottiene il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. Modifica il criterio di autorizzazione per concedere a CALLER_SA il ruolo Creatore token identità OpenID Connect dell'account di servizio (roles/iam.serviceAccountOpenIdTokenCreator).

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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

Se vuoi utilizzare Google Cloud CLI per generare token di breve durata o se vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generare i token. Spesso puoi usare il tuo Account Google.

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

  • Account Google del 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. Questo è l'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 identità OpenID Connect dell'account di servizio (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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'Account Google del chiamante, CALLER_ACCOUNT.

    Ad esempio, username@google.com.

  7. Seleziona il ruolo Creatore token identità OpenID Connect dell'account di servizio (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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

Esegui questo 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:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

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

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. Modifica il criterio di autorizzazione per concedere a CALLER_ACCOUNT il ruolo Creatore token identità OpenID Connect dell'account di servizio ( roles/iam.serviceAccountOpenIdTokenCreator).

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "user: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.

Generare il token ID

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

Gli esempi 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. Accedi a Google Cloud CLI come Account Google del chiamante.

    gcloud auth login CALLER_ACCOUNT
    
  2. Genera un token per l'account di servizio.

    Il comando gcloud auth print-identity-token genera un token ID OIDC per un account di servizio.

    Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • AUDIENCE_NAME: il pubblico del token, in genere l'URL dell'applicazione o del servizio a cui il token verrà utilizzato per accedere.
      • Esegui questo 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, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
  • AUDIENCE_NAME: il pubblico del token, in genere l'URL dell'applicazione o del servizio a cui il token verrà utilizzato 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 ha esito positivo, 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"
}

Crea un token JWT (JSON Web Token) autofirmato

I token JWT (JSON Web Tokens) autofirmati sono utili in diversi scenari:

  • Autenticazione in un'API di cui è stato eseguito il deployment con API Gateway.
  • Autenticazione di una chiamata a un'API di Google come descritto nella Guida all'autenticazione di Google.
  • Comunicare in sicurezza tra le tue applicazioni. In questo scenario, un'applicazione può firmare un token che può essere verificato da un'altra applicazione per scopi di autenticazione.
  • Trattare un account di servizio come un provider di identità firmando un JWT che contiene rivendicazioni arbitrarie su un utente, un account o un dispositivo.

Per creare un JWT, completa queste attività:

Fornisci le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: il chiamante che richiede la credenziale e l'account di servizio per il quale è stata creata. La modalità di configurazione delle autorizzazioni dipende dall'autenticazione del chiamante come account di servizio o Account Google.

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

Account di servizio

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolte le seguenti entità:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta delle 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio del chiamante, 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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio che dispone dei privilegi per cui 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 questo 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 ottiene il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo per l'account di servizio, la risposta contiene solo un valore etag. Includi quel 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 al passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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

Se vuoi utilizzare Google Cloud CLI per generare token di breve durata o se vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generare i token. Spesso puoi usare il tuo Account Google.

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

  • Account Google del 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'Account Google del chiamante, CALLER_ACCOUNT.

    Ad esempio, username@google.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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

Esegui questo 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:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

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

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

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

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

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user: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 Service Account Credentials firma un JWT utilizzando la chiave privata gestita dal sistema di un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
  • JWT_PAYLOAD: il payload JWT da firmare, ovvero un oggetto JSON che contiene un set di attestazioni JWT. Includi le attestazioni necessarie per il caso d'uso desiderato e per soddisfare i requisiti di convalida per il servizio che stai chiamando. Se chiami un'API di Google, consulta la guida all'autenticazione di Google per i requisiti delle richieste.

    La rivendicazione di exp (data di scadenza) deve essere presentata al massimo entro 12 ore. Se chiami un'API di Google, la rivendicazione exp deve essere impostata su un massimo di un'ora nel futuro.

    Il seguente payload di esempio contiene rivendicazioni per chiamare un'API di Google, dove EXP è un timestamp numero intero che rappresenta la data 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 ha avuto esito positivo, il corpo della risposta contiene un JWT firmato e l'ID della chiave di firma utilizzato per firmare il JWT. Puoi utilizzare il valore signedJwt come token di connessione per autenticare direttamente una richiesta per conto dell'account di servizio. Il token è valido fino alla scadenza specificata nella richiesta:

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

Creare un oggetto binario autofirmato (blob)

Gli oggetti binari autofirmati, o BLOB, vengono utilizzati per trasmettere dati binari in modo che l'autore dei dati sia noto (perché il BLOB è autofirmato. 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, completa queste attività:

Fornisci le autorizzazioni richieste

Una richiesta diretta coinvolge due identità: il chiamante che richiede la credenziale e l'account di servizio per il quale è stata creata. La modalità di configurazione delle autorizzazioni dipende dall'autenticazione del chiamante come account di servizio o Account Google.

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

Account di servizio

Quando l'applicazione chiamante utilizza un account di servizio come identità, sono coinvolte le seguenti entità:

  • Account di servizio del chiamante (CALLER_SA)

    Questo account di servizio rappresenta l'applicazione chiamante, che emette la richiesta delle 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'account di servizio del chiamante, 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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • PRIV_SA: l'indirizzo email dell'account di servizio che dispone dei privilegi per cui 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 questo 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 ottiene il criterio di autorizzazione di un account di servizio.

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

    Se non hai concesso alcun ruolo per l'account di servizio, la risposta contiene solo un valore etag. Includi quel 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 al passaggio precedente, aggiungi quanto segue:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@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

Se vuoi utilizzare Google Cloud CLI per generare token di breve durata o se vuoi generare token di breve durata da un ambiente di sviluppo locale, puoi utilizzare un account utente per generare i token. Spesso puoi usare il tuo Account Google.

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

  • Account Google del 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. Questo è l'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 privilegi, PRIV_SA.
  4. Fai clic sulla scheda Autorizzazioni.
  5. In Entità con accesso a questo account di servizio, fai clic su Concedi l'accesso.
  6. Inserisci l'indirizzo email dell'Account Google del chiamante, CALLER_ACCOUNT.

    Ad esempio, username@google.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 in un account di servizio.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

Esegui questo 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:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leggi il criterio di autorizzazione per PRIV_SA:

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

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

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

    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:admin@example.com"
          ]
        }
      ]
    }
    

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

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

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  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, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
    • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
    • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.
    • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user: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 Service Account Credentials firma un BLOB utilizzando la chiave privata gestita dal sistema di un account di servizio.

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

  • PRIV_SA: l'indirizzo email dell'account di servizio con privilegi per cui è stato creato il token di breve durata.
  • BLOB_PAYLOAD: una stringa di byte con codifica 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 ha esito positivo, il corpo della risposta contiene un BLOB firmato e l'ID della chiave di firma utilizzato per firmare il BLOB. Puoi utilizzare il valore signedBlob come token di connessione 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"
}