Kurzlebige Anmeldedaten mit der Identity-Föderation abrufen

In diesem Leitfaden wird beschrieben, wie Sie mit einem Workload Identity-Pool und -Anbieter kurzlebige Anmeldedaten abrufen. Dazu gehen Sie so vor:

  1. Rufen Sie Anmeldedaten vom vertrauenswürdigen Identitätsanbieter ab.
  2. Tauschen Sie die Anmeldedaten gegen ein Token des Security Token Service aus.
  3. Verwenden Sie das Token des Security Token Service, um eine Identität als Dienstkonto zu übernehmen und ein kurzlebiges Google-Zugriffstoken abzurufen.

Mit den kurzlebigen Google-Zugriffstokens können Sie auf alle Google Cloud-Ressourcen zugreifen, auf die das Dienstkonto Zugriff hat.

Hinweis

  1. Erstellen Sie eine Föderation mit einem externen Identitätsanbieter, indem Sie einen Workload Identity-Pool und -Anbieter erstellen.
  2. Erstellen Sie ein Dienstkonto, das externe Identitäten übernehmen sollen.
  3. Gewähren Sie dem Dienstkonto Zugriff auf Ressourcen, auf die externe Identitäten zugreifen können sollen.

Externen Identitäten die Berechtigung erteilen, die Identität eines Dienstkontos zu übernehmen

Damit externe Identitäten die Identität eines Dienstkontos übernehmen können, müssen Sie ihnen die Rolle "Workload Identity-Nutzer" (roles/iam.workloadIdentityUser) für das Dienstkonto zuweisen. Sie können die Rolle einer bestimmten externen Identität oder mehreren externen Identitäten zuweisen:

  • Schreiben Sie für eine bestimmte externe Identität eine Attributbedingung, die das Attribut google.subject prüft.
  • Schreiben Sie für eine Gruppe externer Identitäten eine Attributbedingung, die das Attribut google.groups oder ein benutzerdefiniertes Attribut attribute.NAME prüft.
  • Verwenden Sie für keine der externen Identitäten im Workload Identity-Pool eine Attributbedingung.

Console

  1. Rufen Sie in der Cloud Console die Seite Workload Identity-Pools auf.

    Zu Workload Identity-Pools

  2. Suchen Sie den Workload Identity-Pool, der die Azure-Identitäten enthält, und klicken Sie auf Bearbeiten.

  3. Klicken Sie auf Zugriff erlauben.

  4. Wählen Sie in der Drop-down-Liste Dienstkonto das Dienstkonto aus, das die externen Identitäten imitieren soll.

  5. Wählen Sie aus, welche Identitäten im Pool die Identität des Dienstkontos übernehmen können:

    • Damit nur bestimmte Identitäten des Workload Identity-Pools die Identität des Dienstkontos übernehmen können, wählen Sie Nur Identitäten, die dem Filter entsprechen aus.

      Wählen Sie in der Drop-down-Liste Attributname das Attribut aus, nach dem Sie filtern möchten.

      Geben Sie im Feld Attributwert den erwarteten Wert des Attributs ein.

      Wenn Sie beispielsweise Attributzuordnung google.subject=assertion.sub verwenden, legen Sie den Attribut-Namen auf subject und den Attributwert auf den Wert der sub-Anforderung in Tokens fest, die von Ihrem externen Identitätsanbieter ausgestellt wurden.

    • Damit alle externen Identitäten des Workload Identity-Pools die Identität des Dienstkontos übernehmen können, wählen Sie Alle Identitäten im Pool aus.

  6. Klicken Sie auf Speichern.

  7. Klicken Sie auf Ablehnen.

gcloud

  1. Erstellen Sie eine Kennung für die externen Identitäten:

    • Eine bestimmte externe Identität:

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      
    • Eine Gruppe externer Identitäten:

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
      
    • Alle externen Identitäten mit einem bestimmten Attribut:

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
      
    • Alle externen Identitäten in einem Workload Identity-Pool:

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: Pool-ID des Workload Identity-Pools
    • SUBJECT: Erwarteter Wert für das Attribut, das Sie google.subject zugeordnet haben
    • GROUP: Erwarteter Wert für das Attribut, das Sie google.groups zugeordnet haben
    • ATTRIBUTE_NAME: Name eines benutzerdefinierten Attributs in Ihrer Attributzuordnung

    Die Projektnummer Ihres aktuellen Projekts können Sie mit dem folgenden Befehl abrufen:

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Weisen Sie dem Dienstkonto die Nutzerrolle "Workload Identity" (roles/iam.workloadIdentityUser) zu:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --role=roles/iam.workloadIdentityUser \
        --member="MEMBER_EXPRESSION"
    

    Ersetzen Sie die folgenden Werte:

    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • MEMBER_ID: Mitglieds-ID, die Sie im vorherigen Schritt identifiziert haben

Authentifizierung mithilfe von Clientbibliotheken oder Terraform

Die Cloud-Clientbibliotheken und Terraform können automatisch externe Anmeldedaten abrufen und mit diesen die Identität eines Dienstkontos übernehmen. Damit Bibliotheken diesen Vorgang abschließen können, müssen Sie eine Konfigurationsdatei für Anmeldedaten angeben. Die Datei definiert Folgendes:

  • Wo externe Anmeldedaten abgerufen werden
  • Welcher Workload Identity-Pool und -Anbieter verwendet werden
  • Welches Dienstkonto übernommen wird

Wie die Konfigurationsdateien der Anmeldedaten von den Clientbibliotheken verwendet werden, hängt von Ihrem externen Identitätsanbieter ab:

AWS

Die Clientbibliotheken erhalten automatisch temporäre Anmeldedaten aus den EC2-Instanz-Metadaten.

Azure

Die Clientbibliotheken erhalten automatisch Zugriffstokens vom Azure Instance Metadata Service (IMDS).

OIDC

Die Clientbibliotheken erhalten Anmeldedaten aus einer lokalen Datei oder einer HTTP-URL:

  • Dateibasierte Anmeldedaten: Tokens werden aus einer Datei geladen. Ein anderer Prozess muss diese Datei mit einem neuen OIDC-Token aktualisieren, bevor das alte Token abläuft. Wenn das Token beispielsweise eine Lebensdauer von 1 Stunde hat, müssen Sie die Datei vor einer Stunde aktualisieren.
  • URL-basierte Anmeldedaten: Tokens werden von einem lokalen Server mit einem Endpunkt geladen, der auf HTTP-GET-Anfragen antwortet. Die Antwort muss ein OIDC-ID-Token sein, entweder im Nur-Text- oder JSON-Format.

SAML

Die Clientbibliotheken erhalten Anmeldedaten aus einer lokalen Datei oder einer HTTP-URL:

  • Dateibasierte Anmeldedaten: Tokens werden aus einer Datei geladen. Ein anderer Prozess muss diese Datei mit einer neuen SAML-Assertion aktualisieren, bevor die alte Assertion abläuft. Wenn die Assertion beispielsweise eine Lebensdauer von 1 Stunde hat, müssen Sie die Datei innerhalb einer Stunde aktualisieren.
  • URL-basierte Anmeldedaten: Assertions werden von einem lokalen Server mit einem Endpunkt geladen, der auf HTTP-GET-Anfragen antwortet. Die Antwort muss entweder eine SAML-Assertion oder eine JSON-Datei sein, die eine SAML-Assertion enthält.

Führen Sie die folgenden Schritte aus, damit Clientbibliotheken oder Terraform Workload Identity-Föderation zur Authentifizierung verwenden:

  1. Erstellen Sie mit der Cloud Console oder dem gcloud-Tool eine Konfigurationsdatei für Anmeldedaten:

    Console

    Laden Sie eine Konfigurationsdatei für die Anmeldedaten in der Cloud Console herunter:

    1. Rufen Sie in der Cloud Console die Seite Workload Identity-Pools auf.

      Zu Workload Identity-Pools

    2. Suchen Sie den Workload Identity-Pool, der den Identitätsanbieter enthält, den Sie verwenden möchten, und klicken Sie auf Bearbeiten.

    3. Wählen Sie Verbundene Dienstkonten aus.

    4. Suchen Sie das Dienstkonto, das Sie verwenden möchten, und klicken Sie auf Herunterladen.

    5. Wählen Sie im Dialogfeld Anwendung konfigurieren den Anbieter aus, der die externen Identitäten enthält, die die Identität des Dienstkontos übernehmen.

    6. Nehmen Sie die folgenden zusätzlichen Einstellungen vor:

      AWS

      Es sind keine zusätzlichen Einstellungen erforderlich.

      Azure

      Ressourcenpfad: Anwendungs-ID-URI der Azure-Anwendung

      OIDC

      OIDC-Tokenpfad: Lokaler Dateipfad oder URL, von der Anmeldedaten abgerufen werden sollen.

      Formattyp: Format der Datei oder URL-Antwort, aus der das ID-Token abgerufen wird.

      Name des Subject-Tokenfelds: Feld in der Antwort, das das Token enthält (wenn der Formattyp json ist).

      SAML

      SAML-Assertion-Pfad: Lokaler Dateipfad oder URL zum Abrufen der Anmeldedaten.

      Formattyp: Format der Datei oder URL-Antwort, aus der die Assertion abgerufen wird.

      Assertion-Feldname: Feld in der Antwort mit der Assertion (wenn der Formattyp json ist).

    7. Wählen Sie Konfiguration herunterladen aus, um die Konfigurationsdatei für Anmeldedaten herunterzuladen, und klicken Sie dann auf Schließen.

    gcloud

    Erstellen Sie mit gcloud iam workload-identity-pools create-cred-config eine Konfigurationsdatei für die Anmeldedaten:

    AWS

    Erstellen Sie eine Konfigurationsdatei für Anmeldedaten, mit der die Bibliothek ein Zugriffstoken aus den EC2-Instanzmetadaten abrufen kann:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --aws \
        --output-file=FILEPATH.json
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll

    Azure

    Erstellen Sie eine Konfigurationsdatei für Anmeldedaten, mit der die Bibliothek ein Zugriffstoken vom Azure Instance Metadata Service (IMDS) abrufen kann:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --azure \
        --app-id-uri APPLICATION_ID_URI \
        --output-file=FILEPATH.json
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • APPLICATION_ID_URI: Anwendungs-ID-URI der Azure-Anwendung
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll

    OIDC

    Um dateibasierte Anmeldedaten zu verwenden, nutzen Sie das Flag --credential-source-file:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --output-file=FILEPATH.json \
        --credential-source-file=TOKEN_FILEPATH \
        --credential-source-type=SOURCE_TYPE \
        --credential-source-field-name=FIELD_NAME
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll
    • TOKEN_FILEPATH: Pfad, in dem OIDC-ID-Tokens gespeichert werden
    • SOURCE_TYPE: Format der OIDC-ID-Token-Datei, festgelegt auf text (Standard) oder json
    • FIELD_NAME: Feld in der Textdatei, die das Token enthält (wenn SOURCE_TYPE gleich json ist)

    Um URL-basierte Anmeldedaten zu verwenden, nutzen Sie das Flag --credential-source-url:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --output-file=FILEPATH.json \
        --credential-source-url="TOKEN_URL" \
        --credential-source-headers="KEY_1=VALUE_1,KEY_2=VALUE_2" \
        --credential-source-type=source_type \
        --credential-source-field-name=field_name
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll
    • TOKEN_URL: URL, von der das OIDC-ID-Token abgerufen werden soll
    • KEY_n, VALUE_n: Benutzerdefinierte Header, die in die HTTP-Anfrage an TOKEN_URL aufgenommen werden sollen
    • SOURCE_TYPE: Format der OIDC-ID-Token-Datei, festgelegt auf text (Standard) oder json
    • FIELD_NAME: Feld in der Textdatei, die das Token enthält (wenn SOURCE_TYPE gleich json ist)

    SAML

    Um dateibasierte Anmeldedaten zu verwenden, nutzen Sie das Flag --credential-source-file:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --output-file=FILEPATH.json \
        --credential-source-file=TOKEN_FILEPATH \
        --credential-source-type=SOURCE_TYPE \
        --credential-source-field-name=FIELD_NAME \
        --subject-token-type=urn:ietf:params:oauth:token-type:saml2
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll
    • TOKEN_FILEPATH: Pfad, in dem SAML-Assertions gespeichert werden
    • SOURCE_TYPE: Format der SAML-Assertion-Datei, festgelegt auf text (Standard) oder json
    • FIELD_NAME: Feld in der Textdatei, die die Assertion enthält (wenn SOURCE_TYPE json ist)

    Um URL-basierte Anmeldedaten zu verwenden, nutzen Sie das Flag --credential-source-url:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --output-file=FILEPATH.json \
        --credential-source-url="TOKEN_URL" \
        --credential-source-headers="KEY_1=VALUE_1,KEY_2=VALUE_2" \
        --credential-source-type=source_type \
        --credential-source-field-name=field_name \
        --subject-token-type=urn:ietf:params:oauth:token-type:saml2
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
    • SERVICE_ACCOUNT_EMAIL: E-Mail-Adresse des Dienstkontos
    • FILEPATH: Datei, in der die Konfiguration gespeichert werden soll
    • TOKEN_URL: URL, von der die SAML-Assertion abgerufen werden soll
    • KEY_n, VALUE_n: Benutzerdefinierte Header, die in die HTTP-Anfrage an TOKEN_URL aufgenommen werden sollen
    • SOURCE_TYPE: Format der SAML-Assertion-Datei, festgelegt auf text (Standard) oder json
    • FIELD_NAME: Feld in der Textdatei, die die Assertion enthält (wenn SOURCE_TYPE json ist)
  2. Initialisieren Sie eine Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS und verweisen Sie auf die Konfigurationsdatei für Anmeldedaten:

    Bash

    export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
    

    PowerShell

    $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
    

    Dabei ist FILEPATH der absolute Dateipfad zur Konfigurationsdatei für Anmeldedaten.

  3. Verwenden Sie eine Clientbibliothek, die Workload Identity-Föderation unterstützt und Anmeldedaten automatisch finden kann:

    C++

    Die meisten Google Cloud-Clientbibliotheken für C++ unterstützen die Identitätsföderation mithilfe eines ChannelCredentials-Objekts, das durch Aufrufen von grpc::GoogleDefaultCredentials() erstellt wird. Zur Initialisierung dieser Anmeldedaten müssen Sie die Clientbibliotheken ab Version 1.36.0 von gRPC erstellen.

    Da die Cloud Storage-Clientbibliothek für C++ die REST API und nicht gRPC verwendet, wird die Identitätsföderation nicht unterstützt.

    Go

    Clientbibliotheken für Go unterstützen die Identitätsföderation, wenn sie Version 0.0.0-2021218202405-ba52d332ba99 oder höher des Moduls golang.org/x/oauth2 verwenden.

    Führen Sie die folgenden Befehle aus, um zu überprüfen, welche Version dieses Moduls in Ihrer Clientbibliothek verwendet wird:

    cd $GOPATH/src/cloud.google.com/go
    go list -m golang.org/x/oauth2
    

    Java

    Clientbibliotheken für Java unterstützen die Identitätsföderation, wenn sie Version 0.24.0 oder höher des com.google.auth:google-auth-library-oauth2-http-Artefakts verwenden.

    Führen Sie den folgenden Maven-Befehl in Ihrem Anwendungsverzeichnis aus, um zu überprüfen, welche Version dieses Artefakts Ihre Clientbibliothek verwendet:

    mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
    

    Node.js

    Clientbibliotheken für Node.js unterstützen die Identitätsföderation, wenn sie Version 7.0.2 oder höher des google-auth-library-Pakets verwenden.

    Führen Sie den folgenden Befehl in Ihrem Anwendungsverzeichnis aus, um zu überprüfen, welche Version dieses Pakets verwendet wird:

    npm list google-auth-library
    

    Wenn Sie ein GoogleAuth-Objekt erstellen, können Sie eine Projekt-ID angeben oder GoogleAuth erlauben, automatisch nach der Projekt-ID zu suchen. Damit automatisch nach der Projekt-ID gesucht werden kann, muss das Dienstkonto in der Konfigurationsdatei in Ihrem Projekt die Rolle „Sucher“ (roles/browser) oder eine Rolle mit entsprechenden Berechtigungen haben. Weitere Informationen finden Sie unter README für das Paket google-auth-library.

    Python

    Clientbibliotheken für Python unterstützen die Identitätsföderation, wenn sie Version 1.7.0 oder höher des google-auth-Pakets verwenden.

    Führen Sie den folgenden Befehl in der Umgebung aus, in der das Paket installiert ist, um zu ermitteln, welche Version dieses Pakets verwendet wird:

    pip show google-auth
    

    Wenn Sie eine Projekt-ID für den Authentifizierungsclient angeben, können Sie die Umgebungsvariable GOOGLE_CLOUD_PROJECT festlegen oder Sie gestatten dem Client, automatisch nach der Projekt-ID zu suchen. Damit automatisch nach der Projekt-ID gesucht werden kann, muss das Dienstkonto in der Konfigurationsdatei in Ihrem Projekt die Rolle „Sucher“ (roles/browser) oder eine Rolle mit entsprechenden Berechtigungen haben. Weitere Informationen finden Sie im Nutzerhandbuch für das Paket google-auth.

    Terraform

    Der Google Cloud-Anbieter unterstützt die Föderation von Workload Identity, wenn Sie Version 3.61.0 oder höher verwenden:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 3.61.0"
        }
      }
    }
    

Authentifizierung mithilfe der REST API

Wenn Sie keine Clientbibliotheken verwenden können, führen Sie die folgenden Schritte aus, damit eine externe Identität ein kurzlebiges Zugriffstoken mithilfe der REST API abrufen kann:

  1. Rufen Sie Anmeldedaten von Ihrem externen Identitätsanbieter ab:

    AWS

    Erstellen Sie ein JSON-Dokument mit den Informationen, die Sie normalerweise in eine Anfrage an den AWS-Endpunkt GetCallerIdentity() aufnehmen würden, einschließlich einer gültigen Anfragesignatur.

    Workload Identity-Föderation bezeichnet dieses JSON-Dokument als GetCallerIdentity-Token. Mit dem Token kann die Workload Identity-Föderation die Identität prüfen, ohne den geheimen AWS-Zugriffsschlüssel preiszugeben.

    Ein GetCallerIdentity-Token sieht in etwa so aus:

    {
      "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15",
      "method": "POST",
      "headers": [
        {
          "key": "Authorization",
          "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd"
        },
        {
          "key": "host",
          "value": "sts.amazonaws.com"
        },
        {
          "key": "x-amz-date",
          "value": "20200228T225005Z"
        },
        {
          "key": "x-goog-cloud-target-resource",
          "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider"
        },
        {
          "key": "x-amz-security-token",
          "value": "GizFWJTqYX...xJ55YoJ8E9HNU="
        }
      ]
    }
    

    Das Token enthält die folgenden Felder:

    • url: Die URL des AWS STS-Endpunkts für GetCallerIdentity(), wobei der Text einer Standardanfrage GetCallerIdentity() als Abfrageparameter angehängt wird. Beispiel: https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15. Regionale Endpunkte werden ebenfalls unterstützt.
    • method: Die HTTP-Anfragemethode POST.
    • headers: Die HTTP-Anfrageheader, die Folgendes enthalten müssen:
      • Authorization: Die Anfragesignatur.
      • host: Den Hostnamen des Felds url, z. B. sts.amazonaws.com.
      • x-amz-date: Den Zeitpunkt, an dem Sie die Anfrage senden möchten, angegeben im Stringformat ISO 8601 Basic. In der Regel wird dieser Wert auf die aktuelle Zeit festgelegt und zur Vermeidung von Replay-Angriffen verwendet.
      • x-goog-cloud-target-resource: Der vollständige Ressourcennamen des Identitätsanbieters ohne das Präfix https:. Beispiel:
        //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
        
      • x-amz-security-token: Sitzungstoken. Nur erforderlich, wenn Sie temporäre Sicherheitsanmeldedaten verwenden.

    Initialisieren Sie die folgenden Variablen:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request"
    SUBJECT_TOKEN=TOKEN
    

    PowerShell

    $SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request"
    $SubjectToken = "TOKEN"
    

    Dabei ist TOKEN das URL-codierte GetCallerIdentity-Token.

    Azure

    Stellen Sie eine Verbindung zu einer Azure-VM her, der eine verwaltete Identität zugewiesen ist, und rufen Sie ein Zugriffstoken vom Azure Instance Metadata Service (IMDS) ab:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt"
    SUBJECT_TOKEN=$(curl \
      "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \
      -H "Metadata: true" | jq -r .access_token)
    echo $SUBJECT_TOKEN
    

    Dieser Befehl verwendet das jq-Tool. jq ist standardmäßig in Cloud Shell verfügbar.

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = (Invoke-RestMethod `
      -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" `
      -Headers @{Metadata="true"}).access_token
    Write-Host $SubjectToken
    

    Dabei ist APP_ID_URI der Anwendungs-ID-URI der Anwendung, die Sie für die Workload Identity-Föderation konfiguriert haben.

    OIDC

    Rufen Sie ein Token von Ihrem externen Identitätsanbieter ab und initialisieren Sie eine Variable:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt"
    SUBJECT_TOKEN=TOKEN
    

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = "TOKEN"
    

    Dabei ist TOKEN das Token, das von Ihrem externen Identitätsanbieter ausgestellt wurde.

    SAML

    Rufen Sie eine Assertion von Ihrem externen Identitätsanbieter ab und initialisieren Sie eine Variable:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:saml2"
    SUBJECT_TOKEN=ASSERTION
    

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:saml2"
    $SubjectToken = "ASSERTION"
    

    Dabei ist ASSERTION die base64url-codierte Assertion, die von Ihrem externen Identitätsanbieter ausgegeben wird.

  2. Verwenden Sie die Security Token Service API, um die Anmeldedaten gegen ein kurzlebiges Zugriffstoken auszutauschen:

    Bash

    STS_TOKEN=$(curl -0 -X POST https://sts.googleapis.com/v1/token \
        -H 'Content-Type: text/json; charset=utf-8' \
        -d @- <<EOF | jq -r .access_token
        {
            "audience"           : "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID",
            "grantType"          : "urn:ietf:params:oauth:grant-type:token-exchange",
            "requestedTokenType" : "urn:ietf:params:oauth:token-type:access_token",
            "scope"              : "https://www.googleapis.com/auth/cloud-platform",
            "subjectTokenType"   : "$SUBJECT_TOKEN_TYPE",
            "subjectToken"       : "$SUBJECT_TOKEN"
        }
    EOF)
    echo $STS_TOKEN
    

    PowerShell

    $StsToken = (Invoke-RestMethod `
        -Method POST `
        -Uri "https://sts.googleapis.com/v1/token" `
        -ContentType "application/json" `
        -Body (@{
            "audience"           = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID"
            "grantType"          = "urn:ietf:params:oauth:grant-type:token-exchange"
            "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token"
            "scope"              = "https://www.googleapis.com/auth/cloud-platform"
            "subjectTokenType"   = $SubjectTokenType
            "subjectToken"       = $SubjectToken
        } | ConvertTo-Json)).access_token
    Write-Host $StsToken
    

    Ersetzen Sie die folgenden Werte:

    • PROJECT_NUMBER: Die Projektnummer des Projekts, das den Workload Identity-Pool enthält
    • POOL_ID: ID des Workload Identity-Pools
    • PROVIDER_ID: ID des Workload Identity-Pool-Anbieters
  3. Verwenden Sie das Token aus dem Security Token Service, um mit der Methode generateAccessToken der IAM Service Account Credentials API ein Zugriffstoken abzurufen:

    Bash

    ACCESS_TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \
        -H "Content-Type: text/json; charset=utf-8" \
        -H "Authorization: Bearer $STS_TOKEN" \
        -d @- <<EOF | jq -r .accessToken
        {
            "scope": [ "https://www.googleapis.com/auth/cloud-platform" ]
        }
    EOF)
    echo $ACCESS_TOKEN
    

    PowerShell

    $AccessToken = (Invoke-RestMethod `
        -Method POST `
        -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" `
        -Headers @{ "Authorization" = "Bearer $StsToken" } `
        -ContentType "application/json" `
        -Body (@{
            "scope" = , "https://www.googleapis.com/auth/cloud-platform"
        } | ConvertTo-Json)).accessToken
    Write-Host $AccessToken
    

    Ersetzen Sie SERVICE_ACCOUNT_EMAIL durch die E-Mail-Adresse des Dienstkontos.

Nächste Schritte