Kurzlebige Anmeldedaten für ein Dienstkonto erstellen

Auf dieser Seite wird erläutert, wie Sie kurzlebige Anmeldedaten für ein Dienstkonto erstellen, mit denen Sie die Identität des Dienstkontos übernehmen können. Je nach erstelltem Tokentyp stellt das kurzlebige Token die Identität (für ID-Tokens) oder die Berechtigungen (für Zugriffstokens) bereit, die dem Dienstkonto zugeordnet sind.

Wenn Sie für Ihre Systemarchitektur eine Reihe von Tokengenerierungsaufrufen verwenden müssen, können Sie eine Delegationskette verwenden, die aus mehreren Dienstkonten besteht. In den meisten Fällen ist die direkte Methode, wie auf dieser Seite erläutert, ausreichend.

Hinweise

Kurzlebiges Zugriffstoken erstellen

Zugriffstokens werden von den meisten Google APIs zur Authentifizierung akzeptiert. Wenn Sie ein Zugriffstoken mithilfe der Dienstkonto-Identitätsübernahme generieren, verfügt das Zugriffstoken über kein Aktualisierungstoken. Wenn das Token abläuft, müssen Sie also den Vorgang der Identitätsübernahme wiederholen, um ein neues zu generieren.

Weitere Informationen finden Sie unter Zugriffstokens.

Führen Sie die folgenden Aufgaben aus, um ein kurzlebiges Zugriffstoken zu erstellen:

Erforderliche Berechtigungen bereitstellen

Eine direkte Anfrage umfasst zwei Identitäten: den Aufrufer, der die Anmeldedaten anfordert, und das Dienstkonto, für das die Anmeldedaten erstellt werden. Wie Sie die Berechtigungen einrichten, hängt davon ab, ob sich der Aufrufer als Dienstkonto oder als Google-Konto authentifiziert.

Wenn Sie einen REST- oder gcloud CLI-Befehl auf dieser Seite in einer lokalen Entwicklungsumgebung ausführen möchten, kann der Aufrufer durch Nutzeranmeldedaten repräsentiert werden. Bei automatisierten Arbeitslasten, z. B. einer in Compute Engine ausgeführten Anwendung, muss der Aufrufer durch ein Dienstkonto repräsentiert werden.

Dienstkonto

Wenn die aufrufende Anwendung ein Dienstkonto als Identität verwendet, sind die folgenden Hauptkonten beteiligt:

  • Dienstkonto des Aufrufers (CALLER_SA)

    Dieses Dienstkonto stellt die aufrufende Anwendung dar, die die Anfrage für die kurzlebigen Anmeldedaten ausgibt.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Um CALLER_SA-Berechtigungen zum Erstellen kurzlebiger Anmeldedaten für PRIV_SA zu erteilen, weisen Sie CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Aufrufer-Dienstkontos CALLER_SA ein.

    Beispiel: demo@my-project.iam.gserviceaccount.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Dienstkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_SA: Die E-Mail-Adresse des Dienstkontos, das die Anwendung darstellt, die das kurzlebige Token anfordert.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_SA das Dienstkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Nutzeranmeldedaten

Wenn Sie die Google Cloud CLI verwenden möchten, um kurzlebige Tokens zu generieren, oder wenn Sie kurzlebige Tokens aus einer lokalen Entwicklungsumgebung generieren möchten, können Sie ein Nutzerkonto verwenden, um die Tokens zu generieren. Häufig können Sie Ihr eigenes Google-Konto verwenden.

Wenn Sie ein Nutzerkonto zum Generieren kurzlebiger Tokens verwenden, sind die folgenden Identitäten beteiligt:

  • Google-Konto des Aufrufers (CALLER_ACCOUNT)

    Dieses Nutzerkonto wird verwendet, um kurzlebige Anmeldedaten für das mit Berechtigungen versehene Dienstkonto zu generieren.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Damit CALLER_ACCOUNT kurzlebige Anmeldedaten für PRIV_SA erstellen kann, weisen Sie CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Google-Kontos des Aufrufers CALLER_ACCOUNT ein.

    Beispiel: username@google.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Nutzerkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_ACCOUNT: Die E-Mail-Adresse des Nutzerkontos, das zum Anfordern des kurzlebigen Tokens verwendet wird.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_ACCOUNT das Nutzerkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Zugriffstoken generieren

Sie können ein OAuth 2.0-Zugriffstoken mit der gcloud CLI, der REST API oder den Cloud-Clientbibliotheken und Google API-Clientbibliotheken generieren.

Wenn Sie die REST API verwenden und Ihr System so konfiguriert ist, dass längere Tokenlebensdauern zugelassen werden, können Sie ein Token mit einer längeren Lebensdauer als der Standardeinstellung erstellen. Die Google Cloud CLI unterstützt nicht das Festlegen einer Lebensdauer für das Token.

Die folgenden Beispiele sind für die Verwendung in einer lokalen Entwicklungsumgebung vorgesehen. Der Aufrufer muss durch ein Nutzerkonto statt durch ein Dienstkonto repräsentiert werden.

So generieren Sie ein OAuth 2.0-Zugriffstoken für ein Dienstkonto:

gcloud

  1. Melden Sie sich in der Google Cloud CLI als das Google-Konto des Aufrufers an.

    gcloud auth login CALLER_ACCOUNT
    
  2. Erstellen Sie einen Schlüssel für das Dienstkonto.

    Der Befehl gcloud auth print-access-token generiert ein OAuth 2.0-Zugriffstoken für ein Dienstkonto.

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder 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
    

    Sie sollten eine Antwort ähnlich der folgenden erhalten:

    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

Die Methode serviceAccounts.generateAccessToken der Service Credentials API generiert ein OAuth 2.0-Zugriffstoken für ein Dienstkonto.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
  • LIFETIME: Die Zeit in Sekunden, bis das Zugriffstoken abläuft. Beispiel: 300s

    Standardmäßig beträgt die maximale Tokenlebensdauer 1 Stunde (3.600 Sekunden). Zur Erhöhung der maximalen Lebensdauer dieser Tokens auf 12 Stunden (43.200 Sekunden) fügen Sie das Dienstkonto einer Organisationsrichtlinie hinzu, in der die Listeneinschränkung constraints/iam.allowServiceAccountCredentialLifetimeExtension enthalten ist.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Wenn die Anfrage generateAccessToken erfolgreich war, enthält der Antworttext ein OAuth 2.0-Zugriffstoken und eine Ablaufzeit. Das accessToken kann dann verwendet werden, um eine Anfrage im Namen des Dienstkontos zu authentifizieren, bis die expireTime erreicht wurde:

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

Einfach loslegen (Go)

Bevor Sie diesen Beispielcode verwenden können, müssen Sie Standardanmeldedaten für Anwendungen für das Google-Konto des Aufrufers einrichten, dem Sie zuvor die erforderliche Rolle zugewiesen haben, um die Identität des mit Berechtigungen versehenen Dienstkontos zu übernehmen.

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

Bevor Sie diesen Beispielcode verwenden können, müssen Sie Standardanmeldedaten für Anwendungen für das Google-Konto des Aufrufers einrichten, dem Sie zuvor die erforderliche Rolle zugewiesen haben, um die Identität des mit Berechtigungen versehenen Dienstkontos zu übernehmen.


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

Bevor Sie diesen Beispielcode verwenden können, müssen Sie Standardanmeldedaten für Anwendungen für das Google-Konto des Aufrufers einrichten, dem Sie zuvor die erforderliche Rolle zugewiesen haben, um die Identität des mit Berechtigungen versehenen Dienstkontos zu übernehmen.

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

Bevor Sie diesen Beispielcode verwenden können, müssen Sie Standardanmeldedaten für Anwendungen für das Google-Konto des Aufrufers einrichten, dem Sie zuvor die erforderliche Rolle zugewiesen haben, um die Identität des mit Berechtigungen versehenen Dienstkontos zu übernehmen.

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.")

OIDC-ID-Token (OpenID Connect) erstellen

ID-Tokens folgen der OIDC-Spezifikation (OpenID Connect). ID-Tokens werden von einer begrenzten Anzahl von Diensten und Anwendungen akzeptiert.

Weitere Informationen finden Sie unter ID-Tokens und Authentifizierung für Anwendungen, die in Cloud Run oder Cloud Functions gehostet werden.

Führen Sie folgende Schritte aus, um ein ID-Token zu erstellen:

Erforderliche Berechtigungen bereitstellen

Eine direkte Anfrage umfasst zwei Identitäten: den Aufrufer, der die Anmeldedaten anfordert, und das Dienstkonto, für das die Anmeldedaten erstellt werden. Wie Sie die Berechtigungen einrichten, hängt davon ab, ob sich der Aufrufer als Dienstkonto oder als Google-Konto authentifiziert.

Wenn Sie einen REST- oder gcloud CLI-Befehl auf dieser Seite in einer lokalen Entwicklungsumgebung ausführen möchten, kann der Aufrufer durch Nutzeranmeldedaten repräsentiert werden. Bei automatisierten Arbeitslasten, z. B. einer in Compute Engine ausgeführten Anwendung, muss der Aufrufer durch ein Dienstkonto repräsentiert werden.

Dienstkonto

Wenn die aufrufende Anwendung ein Dienstkonto als Identität verwendet, sind die folgenden Hauptkonten beteiligt:

  • Dienstkonto des Aufrufers (CALLER_SA)

    Dieses Dienstkonto stellt die aufrufende Anwendung dar, die die Anfrage für die kurzlebigen Anmeldedaten ausgibt.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Um CALLER_SA Berechtigungen zum Erstellen kurzlebiger Anmeldedaten für PRIV_SA zu erteilen, weisen Sie CALLER_SA Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Aufrufer-Dienstkontos CALLER_SA ein.

    Beispiel: demo@my-project.iam.gserviceaccount.com.

  7. Wählen Sie die Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Dienstkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_SA: Die E-Mail-Adresse des Dienstkontos, das die Anwendung darstellt, die das kurzlebige Token anfordert.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_SA die Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_SA das Dienstkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Nutzeranmeldedaten

Wenn Sie die Google Cloud CLI verwenden möchten, um kurzlebige Tokens zu generieren, oder wenn Sie kurzlebige Tokens aus einer lokalen Entwicklungsumgebung generieren möchten, können Sie ein Nutzerkonto verwenden, um die Tokens zu generieren. Häufig können Sie Ihr eigenes Google-Konto verwenden.

Wenn Sie ein Nutzerkonto zum Generieren kurzlebiger Tokens verwenden, sind die folgenden Identitäten beteiligt:

  • Google-Konto des Aufrufers (CALLER_ACCOUNT)

    Dieses Nutzerkonto wird verwendet, um kurzlebige Anmeldedaten für das mit Berechtigungen versehene Dienstkonto zu generieren.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Damit CALLER_ACCOUNT kurzlebige Anmeldedaten für PRIV_SA erstellen kann, weisen Sie CALLER_ACCOUNT die Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Google-Kontos des Aufrufers CALLER_ACCOUNT ein.

    Beispiel: username@google.com.

  7. Wählen Sie die Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Nutzerkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_ACCOUNT: Die E-Mail-Adresse des Nutzerkontos, das zum Anfordern des kurzlebigen Tokens verwendet wird.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_ACCOUNT die Rolle „Service Account OpenID Connect Identity Token Creator“ (roles/iam.serviceAccountOpenIdTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_ACCOUNT das Nutzerkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

ID-Token generieren

Sie können ein OIDC-ID-Token (OpenID Connect) mithilfe der gcloud CLI, der REST API oder der Cloud-Clientbibliotheken und Google API-Clientbibliotheken generieren.

Die folgenden Beispiele sind für die Verwendung in einer lokalen Entwicklungsumgebung vorgesehen. Der Aufrufer muss durch ein Nutzerkonto statt durch ein Dienstkonto repräsentiert werden.

OIDC-ID-Tokens sind 1 Stunde (3.600 Sekunden) lang gültig.

Erstellen Sie ein von Google signiertes OIDC-ID-Token für ein Dienstkonto:

gcloud

  1. Melden Sie sich in der Google Cloud CLI als das Google-Konto des Aufrufers an.

    gcloud auth login CALLER_ACCOUNT
    
  2. Erstellen Sie einen Schlüssel für das Dienstkonto.

    Mit dem Befehl gcloud auth print-identity-token wird ein OIDC-ID-Token für ein Dienstkonto generiert.

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • AUDIENCE_NAME: Die Zielgruppe für das Token, in der Regel die URL der Anwendung oder des Dienstes, auf den mit dem Token zugegriffen wird.
      • Führen Sie folgenden Befehl aus:

        Linux, macOS oder 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"
        

        Sie sollten eine Antwort ähnlich der folgenden erhalten:

        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

Die Methode serviceAccounts.generateIdToken der Service Credentials API generiert ein OIDC-ID-Token für ein Dienstkonto.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
  • AUDIENCE_NAME: Die Zielgruppe für das Token, in der Regel die URL der Anwendung oder des Dienstes, auf den mit dem Token zugegriffen wird.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Wenn die Anfrage generateId erfolgreich war, enthält der Antworttext ein ID-Token, das eine Stunde lang gültig ist. Mit token kann dann eine Anfrage im Namen des Dienstkontos authentifiziert werden:

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

Selbstsigniertes JSON Web Token (JWT) erstellen

Selbstsignierte JSON Web Tokens (JWTs) sind in verschiedenen Szenarien hilfreich:

  • Authentifizierung bei einer mit API Gateway bereitgestellten API.
  • Authentifizierung des Aufrufs einer Google API, wie in der Google-Authentifizierungsanleitung beschrieben.
  • Sichere Kommunikation zwischen eigenen Anwendungen. In diesem Szenario kann eine Anwendung ein Token signieren, das zu Authentifizierungszwecken von einer anderen Anwendung bestätigt werden kann.
  • Behandlung eines Dienstkontos als Identitätsanbieter. JWT wird dabei mit beliebigen Anforderungen zu einem Nutzer, Konto oder Gerät signiert.

Führen Sie die folgenden Aufgaben aus, um ein JWT zu erstellen:

Erforderliche Berechtigungen bereitstellen

Eine direkte Anfrage umfasst zwei Identitäten: den Aufrufer, der die Anmeldedaten anfordert, und das Dienstkonto, für das die Anmeldedaten erstellt werden. Wie Sie die Berechtigungen einrichten, hängt davon ab, ob sich der Aufrufer als Dienstkonto oder als Google-Konto authentifiziert.

Wenn Sie einen REST- oder gcloud CLI-Befehl auf dieser Seite in einer lokalen Entwicklungsumgebung ausführen möchten, kann der Aufrufer durch Nutzeranmeldedaten repräsentiert werden. Bei automatisierten Arbeitslasten, z. B. einer in Compute Engine ausgeführten Anwendung, muss der Aufrufer durch ein Dienstkonto repräsentiert werden.

Dienstkonto

Wenn die aufrufende Anwendung ein Dienstkonto als Identität verwendet, sind die folgenden Hauptkonten beteiligt:

  • Dienstkonto des Aufrufers (CALLER_SA)

    Dieses Dienstkonto stellt die aufrufende Anwendung dar, die die Anfrage für die kurzlebigen Anmeldedaten ausgibt.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Um CALLER_SA-Berechtigungen zum Erstellen kurzlebiger Anmeldedaten für PRIV_SA zu erteilen, weisen Sie CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Aufrufer-Dienstkontos CALLER_SA ein.

    Beispiel: demo@my-project.iam.gserviceaccount.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Dienstkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_SA: Die E-Mail-Adresse des Dienstkontos, das die Anwendung darstellt, die das kurzlebige Token anfordert.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_SA das Dienstkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Nutzeranmeldedaten

Wenn Sie die Google Cloud CLI verwenden möchten, um kurzlebige Tokens zu generieren, oder wenn Sie kurzlebige Tokens aus einer lokalen Entwicklungsumgebung generieren möchten, können Sie ein Nutzerkonto verwenden, um die Tokens zu generieren. Häufig können Sie Ihr eigenes Google-Konto verwenden.

Wenn Sie ein Nutzerkonto zum Generieren kurzlebiger Tokens verwenden, sind die folgenden Identitäten beteiligt:

  • Google-Konto des Aufrufers (CALLER_ACCOUNT)

    Dieses Nutzerkonto wird verwendet, um kurzlebige Anmeldedaten für das mit Berechtigungen versehene Dienstkonto zu generieren.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Damit CALLER_ACCOUNT kurzlebige Anmeldedaten für PRIV_SA erstellen kann, weisen Sie CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Google-Kontos des Aufrufers CALLER_ACCOUNT ein.

    Beispiel: username@google.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Nutzerkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_ACCOUNT: Die E-Mail-Adresse des Nutzerkontos, das zum Anfordern des kurzlebigen Tokens verwendet wird.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_ACCOUNT das Nutzerkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

JWT generieren

Generieren Sie ein selbstsigniertes JWT:

REST

Die Methode serviceAccounts.signJwt der Service Account Credentials API signiert ein JWT mit einem vom System verwalteten privaten Schlüssel des Dienstkontos.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
  • JWT_PAYLOAD: Die zu signierende JWT-Nutzlast, bei der es sich um ein JSON-Objekt mit einem JWT-Anforderungssatz handelt. Schließen Sie die Anforderungen ein, die für den gewünschten Anwendungsfall erforderlich sind und benötigt werden, um die Validierungsanforderungen des aufzurufenden Dienstes zu erfüllen. Wenn Sie eine Google API aufrufen, lesen Sie die Informationen zu den Anforderungsbedingungen im Google-Authentifizierungsleitfaden.

    Die Anforderung exp (Ablaufzeit) darf höchstens 12 Stunden in der Zukunft liegen. Wenn Sie eine Google API aufrufen, darf die exp-Anforderung nicht mehr als eine Stunde in der Zukunft liegen.

    Die folgende Beispielnutzlast enthält Anforderungen zum Aufrufen einer Google API, wobei EXP ein ganzzahliger Zeitstempel ist, der die Ablaufzeit darstellt:

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

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "payload": "JWT_PAYLOAD"
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Wenn die signJwt-Anfrage erfolgreich war, enthält der Antworttextkörper ein signiertes JWT und die ID des Signaturschlüssels, der zum Signieren des JWT verwendet wurde. Sie können den Wert signedJwt als Inhabertoken verwenden, um eine Anfrage im Namen des Dienstkontos direkt zu authentifizieren. Das Token ist bis zu der in der Anfrage angegebenen Ablaufzeit gültig:

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

Selbstsigniertes binäres Objekt (Blob) erstellen

Selbstsignierte binäre Objekte oder Blobs werden verwendet, um Binärdaten so zu übertragen, dass der Urheber der Daten bekannt ist (da das Blob selbstsigniert ist). Blobs können zum Erstellen von Signaturen verwendet werden, Cloud Storage-Objekten, die für verschiedene Authentifizierungsabläufe erforderlich ist, einschließlich signierter URLs. Informationen zu Signaturen finden Sie in der Cloud Storage-Dokumentation.

Führen Sie die folgenden Aufgaben aus, um ein selbstsigniertes binäres Objekt zu erstellen:

Erforderliche Berechtigungen bereitstellen

Eine direkte Anfrage umfasst zwei Identitäten: den Aufrufer, der die Anmeldedaten anfordert, und das Dienstkonto, für das die Anmeldedaten erstellt werden. Wie Sie die Berechtigungen einrichten, hängt davon ab, ob sich der Aufrufer als Dienstkonto oder als Google-Konto authentifiziert.

Wenn Sie einen REST- oder gcloud CLI-Befehl auf dieser Seite in einer lokalen Entwicklungsumgebung ausführen möchten, kann der Aufrufer durch Nutzeranmeldedaten repräsentiert werden. Bei automatisierten Arbeitslasten, z. B. einer in Compute Engine ausgeführten Anwendung, muss der Aufrufer durch ein Dienstkonto repräsentiert werden.

Dienstkonto

Wenn die aufrufende Anwendung ein Dienstkonto als Identität verwendet, sind die folgenden Hauptkonten beteiligt:

  • Dienstkonto des Aufrufers (CALLER_SA)

    Dieses Dienstkonto stellt die aufrufende Anwendung dar, die die Anfrage für die kurzlebigen Anmeldedaten ausgibt.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Um CALLER_SA-Berechtigungen zum Erstellen kurzlebiger Anmeldedaten für PRIV_SA zu erteilen, weisen Sie CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Aufrufer-Dienstkontos CALLER_SA ein.

    Beispiel: demo@my-project.iam.gserviceaccount.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Dienstkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_SA: Die E-Mail-Adresse des Dienstkontos, das die Anwendung darstellt, die das kurzlebige Token anfordert.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_SA die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_SA das Dienstkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Nutzeranmeldedaten

Wenn Sie die Google Cloud CLI verwenden möchten, um kurzlebige Tokens zu generieren, oder wenn Sie kurzlebige Tokens aus einer lokalen Entwicklungsumgebung generieren möchten, können Sie ein Nutzerkonto verwenden, um die Tokens zu generieren. Häufig können Sie Ihr eigenes Google-Konto verwenden.

Wenn Sie ein Nutzerkonto zum Generieren kurzlebiger Tokens verwenden, sind die folgenden Identitäten beteiligt:

  • Google-Konto des Aufrufers (CALLER_ACCOUNT)

    Dieses Nutzerkonto wird verwendet, um kurzlebige Anmeldedaten für das mit Berechtigungen versehene Dienstkonto zu generieren.

  • Mit Berechtigungen versehenes Dienstkonto (PRIV_SA)

    Diesem Dienstkonto werden die IAM-Rollen zugewiesen, die für das kurzlebige Token erforderlich sind. Dies ist das Dienstkonto, für das das kurzlebige Token erstellt wird.

Damit CALLER_ACCOUNT kurzlebige Anmeldedaten für PRIV_SA erstellen kann, weisen Sie CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) für PRIV_SA zu.

Weisen Sie die erforderliche Rolle für PRIV_SA zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos PRIV_SA.
  4. Klicken Sie auf den Tab Berechtigungen.
  5. Klicken Sie unter Hauptkonten mit Zugriff auf dieses Dienstkonto auf Zugriff erlauben.
  6. Geben Sie die E-Mail-Adresse des Google-Kontos des Aufrufers CALLER_ACCOUNT ein.

    Beispiel: username@google.com.

  7. Wählen Sie die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) aus.
  8. Klicken Sie auf Speichern, um dem Nutzerkonto die Rolle zuzuweisen.

gcloud

Mit dem Befehl gcloud iam service-accounts add-iam-policy-binding wird einem Dienstkonto eine Rolle zugewiesen.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • PRIV_SA: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos, für das das Token generiert wird.
  • CALLER_ACCOUNT: Die E-Mail-Adresse des Nutzerkontos, das zum Anfordern des kurzlebigen Tokens verwendet wird.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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

Sie sollten eine Antwort ähnlich der folgenden erhalten:

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

REST

  1. Lesen Sie die Zulassungsrichtlinie für PRIV_SA:

    Die Methode serviceAccounts.getIamPolicy ruft die „allow”-Richtlinie eines Dienstkontos ab.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

    Wenn Sie dem Dienstkonto keine Rollen zugewiesen haben, enthält die Antwort lediglich einen etag-Wert. Geben Sie diesen etag-Wert im nächsten Schritt an.

  2. Ändern Sie die Zulassungsrichtlinie, um CALLER_ACCOUNT die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator) zuzuweisen.

    Fügen Sie beispielsweise Folgendes hinzu, um die Beispielantwort aus dem vorherigen Schritt zu ändern:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. Schreiben Sie die aktualisierte „allow”-Richtlinie:

    Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte Zulassungsrichtlinie für das Dienstkonto fest.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
    • POLICY_VERSION: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.
    • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

      Wenn Sie beispielsweise die im vorherigen Schritt gezeigte Zulassungsrichtlinie festlegen möchten, ersetzen Sie POLICY durch Folgendes, wobei CALLER_ACCOUNT das Nutzerkonto ist, das das kurzlebige Token erstellt:

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

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
      "policy": POLICY
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Die Antwort enthält die aktualisierte Zulassungsrichtlinie:

Selbstsigniertes Blob generieren

Erstellen Sie ein selbst signiertes Blob für das Dienstkonto:

REST

Die Methode serviceAccounts.signBlob der Service Account Credentials API signiert ein Blob mit einem vom System verwalteten privaten Schlüssel des Dienstkontos.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PRIV_SA: Die E-Mail-Adresse des Dienstkontos mit den Berechtigungen, für das das kurzlebige Token erstellt wird.
  • BLOB_PAYLOAD Ein base64-codierter String aus Byte. Beispiel: VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "payload": "BLOB_PAYLOAD"
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Wenn die signBlob-Anfrage erfolgreich war, enthält der Antworttext ein signiertes Blob und die Signierschlüssel-ID, mit der das Blob signiert wurde. Sie können den Wert signedBlob als Inhabertoken verwenden, um eine Anfrage im Namen des Dienstkontos direkt zu authentifizieren. Das Token ist gültig, bis der vom System verwaltete private Schlüssel des Dienstkontos abläuft. Die ID dieses Schlüssels ist der Wert des Feldes keyId in der Antwort.

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