Über AWS auf Ressourcen zugreifen

In diesem Dokument erfahren Sie, wie Sie mithilfe von Identitätsföderation über Amazon Web Services (AWS) auf Google Cloud-Ressourcen zugreifen.

Früher haben Anwendungen, die außerhalb von Google Cloud ausgeführt werden, Dienstkontoschlüssel für den Zugriff auf Google Cloud-Ressourcen verwendet. Mithilfe der Identitätsföderation können Sie zulassen, dass ein AWS-Nutzer oder eine Rolle die Identität eines Dienstkontos übernehmen kann. Dadurch kann Ihre Arbeitslast direkt mit einem kurzlebigen Zugriffstoken auf Google Cloud-Ressourcen zugreifen und der mit Dienstkontoschlüsseln verbundene Wartungs- und Sicherheitsaufwand entfällt.

Hinweis

  1. IAM, Resource Manager, Service Account Credentials, and Security Token Service (STS) APIs aktivieren.

    Aktivieren Sie die APIs

  2. Sie benötigen die Rollen "Workload Identity-Pooladministrator" (roles/iam.workloadIdentityPoolAdmin) und "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) für das Projekt.

    Alternativ enthält die einfache Rolle „IAM-Inhaber“ (roles/owner) auch Berechtigungen zum Konfigurieren der Identitätsföderation. In einer Produktionsumgebung sollten Sie keine einfachen Rollen zuweisen, Sie können sie aber in einer Entwicklungs- oder Testumgebung gewähren.

  3. Aktualisieren Sie die Organisationsrichtlinie für Ihre Organisation, um die Föderation von AWS zuzulassen.

    Optional können Sie auch angeben, welche AWS-Konto-IDs auf Ihre Google Cloud-Ressourcen zugreifen dürfen.

  4. Erstellen Sie eine AWS-Rolle und notieren Sie sich den Amazon Resource Name (ARN).

  5. Erstellen Sie ein Google Cloud-Dienstkonto.

  6. Gewähren Sie dem Dienstkonto Zugriff, um die für Ihre Arbeitslast erforderlichen Google Cloud APIs aufzurufen.

Identitätsanbietereinstellungen für AWS

Wenn Sie AWS als Identitätsanbieter für den Workload Identity-Pool hinzufügen, müssen Sie Folgendes angeben:

Optional können Sie auch Folgendes angeben:

  • Einen Anzeigenamen und eine Beschreibung.

  • Eine Liste von Attributzuordnungen, die die Attribute in einem AWS-Token den Attributen in einem Google-Token zuordnen. Standardmäßig verwendet jeder Pool die folgenden Attributzuordnungen, die die meisten gängigen Szenarien abdecken:

    Google AWS Beschreibung
    google.subject assertion.arn Das Hauptkonto, das von IAM authentifiziert wird. Dies ist auch der Betreff in den Logeinträgen in Cloud Logging. Diese Zuordnung wird automatisch mit dem ARN im Format arn:aws:sts::ACCOUNT_ID:assumed-role/AWS_ROLE/AWS_SESSION_NAME dargestellt.
    attribute.aws_role AWS-Rolle Die AWS-Rolle im Format arn:aws:sts::ACCOUNT_ID:assumed-role/AWS_ROLE.

    Sie können auch benutzerdefinierte Zuordnungen festlegen, auf die sich in IAM-Rollenbindungen verweisen lässt. Durch die Angabe einer benutzerdefinierten Zuordnung werden die Standardwerte überschrieben. Verwenden Sie assertion, um auf die AWS-Anmeldedaten zu verweisen, google für Google-Attribute und attribute für benutzerdefinierte Attribute.

    Im Folgenden wird zum Beispiel google.subject assertion.arn und attribute.aws_account assertion.account zugeordnet:

    google.subject=assertion.arn,
    attribute.aws_account=assertion.account
    

    Eine Liste der Attribute von AWS-Tokens, auf die Sie verweisen können, finden Sie in der Dokumentation zu GetCallerIdentity(). Die Attribute in der AWS-Dokumentation verwenden einen Camel-Case-Großbuchstaben, aber die Attributzuordnung für die Workload Identity-Föderation verwendet Kleinbuchstaben. Aus Account wird beispielsweise assertion.account.

    Für komplexere Assertions können Sie die Common Expression Language verwenden. Beispiel:

    attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
    

    Verwenden Sie die CEL-Funktion extract(), wenn Sie auf einen bestimmten Teil eines Attributs in einem Ausdruck verweisen möchten. Diese Funktion extrahiert einen Wert basierend auf einer von Ihnen bereitgestellten Vorlage aus einem Attribut. Weitere Informationen zu extract() finden Sie unter Werte aus Attributen extrahieren.

    Mit der Funktion has() können Sie prüfen, ob Anmeldedaten ein Attribut enthalten.

  • Eine Attributbedingung zur Festlegung der Attribute, die das Hauptkonto enthalten muss. Die Attributbedingung kann sowohl für externe als auch für Google-Anmeldedaten gelten. Alle Anfragen, die die Bedingung nicht erfüllen, werden abgelehnt.

    Attributbedingungen werden als CEL-Ausdruck formatiert, der einen booleschen Wert zurückgibt. Die folgende Anfrage lehnt beispielsweise Anfragen von Identitäten ab, die keine bestimmte AWS-Rolle haben:

    attribute.aws_role == "ROLE_MAPPING"
    

    Weitere Informationen zu gängigen Anwendungsfällen finden Sie unter Attributbedingungen.

Workload Identity-Pool und -Poolanbieter erstellen

Mit einem Workload Identity-Pool können Sie externe Identitäten organisieren und verwalten. Workload Identity-Pools sind voneinander isoliert, ein einzelner Pool kann jedoch eine beliebige Anzahl von Dienstkonten imitieren. Im Allgemeinen empfehlen wir, für jede Umgebung einen neuen Pool zu erstellen, z. B. für Entwicklung, Staging oder Produktion. Dies bedeutet in der Regel, einen Pool pro AWS-Konto zu erstellen.

Sie müssen eine ID angeben, um einen neuen Workload Identity-Pool zu erstellen. Sie können auch eine optionale Beschreibung und einen Anzeigenamen angeben. Die ID darf nicht mit gcp- beginnen. Dieses Präfix ist für die Verwendung durch Google reserviert.

Nachdem Sie den Workload Identity-Pool erstellt haben, können Sie einen Workload Identity-Pool-Anbieter hinzufügen. Jeder Workload Identity-Pool-Anbieter stellt einen bestimmten Identitätsanbieter dar, wie beispielsweise AWS. Ein einzelner Pool kann mehrere Anbieter enthalten. Zum Erstellen des Anbieter benötigen Sie die Informationen, die unter Einstellungen für Identitätsanbieter für AWS auf dieser Seite beschrieben werden.

Console

  1. Rufen Sie in der Cloud Console die Seite Neuer Arbeitslastanbieter und -anbieterpool auf.

    Zum neuen Arbeitslastanbieter und -anbieterpool

  2. Geben Sie einen Namen für den Workload Identity-Pool ein.

    Die Cloud Console verwendet den Namen zum Erstellen einer Pool-ID: Klicken Sie zum Ändern der Pool-ID auf Bearbeiten. Sie können die Pool-ID später nicht mehr ändern.

  3. Optional: Geben Sie eine Beschreibung des Workload Identity-Pools ein.

  4. Klicken Sie auf Weiter.

  5. Wählen Sie in der Drop-down-Liste Anbieter auswählen die Option AWS und klicken Sie auf Weiter.

  6. Geben Sie einen Namen für den Anbieter ein.

    Die Cloud Console verwendet den Namen zum Erstellen einer Anbieter-ID: Klicken Sie zum Ändern der Anbieter-ID auf Bearbeiten. Sie können die Anbieter-ID später nicht mehr ändern.

  7. Geben Sie Ihre AWS-Konto-ID ein und klicken Sie auf Weiter.

  8. Optional: Klicken Sie zum Konfigurieren der Attributzuordnung auf Zuordnung bearbeiten.

    Mithilfe der Attributzuordnung können Sie Informationen zu externen Identitäten verwenden, um einer Teilmenge dieser Identitäten Zugriff zu gewähren. Für AWS wird eine Standardzuordnung zur Verfügung gestellt.

    Weitere Informationen finden Sie auf dieser Seite unter Identitätsanbietereinstellungen für AWS.

  9. Optional: Wenn Sie eine Attributbedingung angeben möchten, mit der die authentifizierenden Identitäten angegeben werden, klicken Sie auf Bedingung hinzufügen und geben Sie einen gültigen CEL-Ausdruck (Common Expression Language) ein. Weitere Informationen finden Sie unter Attributbedingungen.

  10. Klicken Sie auf Speichern, um den Workload Identity-Pool und -Poolanbieter zu erstellen.

gcloud

Um einen Workload Identity-Pool zu erstellen, verwenden Sie den Befehl gcloud iam workload-identity-pools create:

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --description="DESCRIPTION" \
    --display-name="DISPLAY_NAME"

Die Antwort sieht in etwa so aus:

Created workload identity pool [POOL_ID].

Um einen Workload Identity-Poolanbieter hinzufügen können Sie den Befehl gcloud iam workload-identity-pools providers create-aws verwenden:

gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \
    --workload-identity-pool="POOL_ID" \
    --account-id="AWS_ACCOUNT_ID" \
    --location="global"

Die Antwort sieht in etwa so aus:

Created workload identity pool provider [PROVIDER_ID].

REST

So erstellen Sie einen Workload Identity-Pool:

Mit der Methode projects.locations.workloadIdentityPools.create wird ein Workload Identity-Pool erstellt.

HTTP-Methode und URL:

POST https://iam.googleapis.com/v1/projects/project-id/locations/global/workloadIdentityPools?workloadIdentityPoolId=pool-id

JSON-Text anfordern:

{
  "description": "description",
  "display-name": "display-name"
}

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

Die Methode gibt eine Operation mit langer Ausführungszeit zurück, die in etwa so aussieht:

{
  "name": "projects/project-number/locations/global/workloadIdentityPools/pool-id/operations/operation-id"
}

So fügen Sie einen Workload Identity-Poolanbieter hinzu:

Die Methode projects.locations.workloadIdentityPools.providers.create fügt AWS als Anbieter hinzu.

HTTP-Methode und URL:

POST https://iam.googleapis.com/v1/projects/project-id/locations/global/workloadIdentityPools/pool-id/providers?workloadIdentityPoolProviderId=provider-id

JSON-Text anfordern:

{
  "aws": {
    "accountId": "aws-account-id"
  }
}

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

Die Methode gibt eine Operation mit langer Ausführungszeit zurück, die in etwa so aussieht:

{
  "name": "projects/project-number/locations/global/workloadIdentityPools/pool-id/providers/provider-id/operations/operation-id"
}

Externe Identitäten erlauben, die Identität eines Dienstkontos zu übernehmen

Externe Identitäten können auf die meisten Google Cloud-Ressourcen nicht direkt zugreifen. Stattdessen legen Sie für diese Identitäten die Übernahme der Identität eines Dienstkontos fest und weisen dazu die Rolle „Workload Identity-Nutzer“ (roles/iam.workloadIdentityUser) für das Dienstkonto zu. Wenn die externen Identitäten ein Dienstkonto imitieren, haben sie dieselben Rollen und Berechtigungen wie das Dienstkonto.

So weisen Sie AWS-Identitäten die Rolle „Workload Identity-Nutzer“ zu:

Console

Bevor Sie die Rolle „Workload Identity-Nutzer“ zuweisen, entscheiden Sie, welche Identitäten Sie als Identitätsanbieter für das Dienstkonto zulassen wollen. Sie können die Rolle allen Identitäten im Workload Identity-Pool oder nur einem Teil dieser Identitäten gemäß der Attributzuordnung zuweisen:

Identitäten Attributname Attributwert
Ein bestimmter AWS-Nutzer subject

arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME/AWS_SESSION_NAME

Informationen zum Extrahieren eines AWS-Rollensitzungsnamens aus einem AWS ARN finden Sie in der AWS-Dokumentation zu IAM-Kennungen.

Alle Identitäten mit einer bestimmten AWS-Rolle aws_role arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME
Alle Identitäten mit einem bestimmten Attributwert ATTRIBUTE_NAME ATTRIBUTE_VALUE

Gewähren Sie dann Zugriff auf das Dienstkonto und laden Sie optional eine Konfigurationsdatei für das automatische Generieren von Anmeldedaten 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 die AWS-Identitäten enthält, und klicken Sie dann auf das Symbol Bearbeiten. Die Cloud Console zeigt Details zum Workload Identity-Pool an.

  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.

    Wählen Sie Alle Identitäten im Pool, damit alle Identitäten die Identität des Dienstkontos übernehmen können.

    Damit nur eine Teilmenge von Identitäten die Identität des Dienstkontos übernehmen kann, wählen Sie Nur Identitäten, die dem Filter entsprechen aus und gehen dann so vor:

    1. Wählen Sie in der Drop-down-Liste Attributname das auszuwertende Attribut aus.

      Nur zugeordnete Attribute werden in der Liste angezeigt. Die Präfixe google. und attribute. werden nicht angezeigt.

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

  6. Klicken Sie auf Speichern.

    Wenn die Identitäten bereits Zugriff auf das Dienstkonto hatten, werden in der Cloud Console Details zum Workload Identity-Pool angezeigt. Sie können die restlichen Schritte überspringen.

    Falls die Identitäten Zugriff auf das Dienstkonto haben, zeigt die Cloud Console das Dialogfeld Anwendung konfigurieren an.

  7. Optional: So laden Sie eine Konfigurationsdatei zum automatischen Generieren von Anmeldedaten herunter:

    1. Wählen Sie in der Drop-down-Liste Anbieter den Anbieter aus, der die AWS-Identitäten enthält, die die Identität des Dienstkontos übernehmen.

    2. Klicken Sie auf den Konfiguration herunterladen, um eine JSON-Konfigurationsdatei herunterzuladen.

  8. Klicken Sie auf Ablehnen.

gcloud

Bevor Sie die Rolle „Workload Identity-Nutzer“ zuweisen, entscheiden Sie, welche Identitäten Sie als Identitätsanbieter für das Dienstkonto zulassen wollen. Sie können die Rolle allen Identitäten im Workload Identity-Pool oder nur einem Teil dieser Identitäten gemäß der Attributzuordnung zuweisen:

Identitäten ID-Format
Ein bestimmter AWS-Nutzer

principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME/AWS_SESSION_NAME

Informationen zum Extrahieren eines AWS-Rollensitzungsnamens aus einem AWS ARN finden Sie in der AWS-Dokumentation zu IAM-Kennungen.

Alle Identitäten mit einer bestimmten AWS-Rolle principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME
Alle Identitäten mit einem bestimmten Attributwert principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Alle Identitäten in einem Pool principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*

Führen Sie dann den Befehl gcloud iam service-accounts add-iam-policy-bindingaus:

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

Ersetzen Sie die folgenden Werte:

  • SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des Dienstkontos.
  • PRINCIPAL: Die externen Identitäten, die die Identität des Dienstkontos übernehmen werden.

REST

Bevor Sie die Rolle „Workload Identity-Nutzer“ zuweisen, entscheiden Sie, welche Identitäten Sie als Identitätsanbieter für das Dienstkonto zulassen wollen. Sie können die Rolle allen Identitäten im Workload Identity-Pool oder nur einem Teil dieser Identitäten gemäß der Attributzuordnung zuweisen:

Identitäten ID-Format
Ein bestimmter AWS-Nutzer

principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME/AWS_SESSION_NAME

Informationen zum Extrahieren eines AWS-Rollensitzungsnamens aus einem AWS ARN finden Sie in der AWS-Dokumentation zu IAM-Kennungen.

Alle Identitäten mit einer bestimmten AWS-Rolle principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/AWS_ROLE_NAME
Alle Identitäten mit einem bestimmten Attributwert principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Alle Identitäten in einem Pool principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*

Verwenden Sie dann das Muster „Read-Modify-Write“, um die Richtlinie zu aktualisieren:

  1. IAM-Richtlinie des Dienstkontos lesen
  2. Ändern Sie die Richtlinie, um die Rolle zuzuweisen.
  3. Schreiben Sie die aktualisierte Richtlinie.

IAM-Richtlinie des Dienstkontos lesen

Die Methode serviceAccounts.getIamPolicy ruft die IAM-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.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.

  • 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/SA_ID:getIamPolicy

JSON-Text anfordern:

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

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

Sie müssten in etwa folgende JSON-Antwort erhalten:

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

Wenn keine Richtlinie vorhanden ist, enthält die Antwort nur das Standard-etag. Wenn Sie diese Antwort erhalten, fügen Sie ein version-Feld hinzu, das auf 3 gesetzt ist, und ein bindings-Feld, das auf ein leeres Array gesetzt ist.

Ändern Sie die Richtlinie, um Ihren Hauptkonten die entsprechenden Rollen zuzuweisen.

Um eine Rolle zuzuweisen, ändern Sie das Array bindings im Antworttext:

  • Wenn keine Bindung für die Rolle vorhanden ist, fügen Sie dem Array bindings ein neues Objekt hinzu, das die Rolle und das Hauptkonto definiert, dem Sie die Rolle zuweisen möchten.
  • Wenn für die Rolle bereits eine Bindung vorhanden ist, fügen Sie das neue Hauptkonto der Liste der vorhandenen Hauptkonten hinzu.

Beispiel:

Um die Rolle „Workload Identity-Nutzer“ (roles/iam.workloadIdentityUser) der AWS-Rolle s3access zuzuweisen, ändern Sie das im vorherigen Schritt gezeigte Beispiel so:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.workloadIdentityUser",
      "members": [
        "principalSet://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/my-pool/attribute.aws_role/arn:aws:iam::123456789012:role/s3access"
      ]
    },
    {
      "role": "roles/iam.serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Schreiben Sie die aktualisierte Richtlinie.

Die Methode serviceAccounts.setIamPolicy legt eine aktualisierte IAM-Richtlinie 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.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.

  • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

    Zum Festlegen der im vorherigen Schritt angezeigten Richtlinie ersetzen Sie beispielsweise policy durch Folgendes:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.workloadIdentityUser",
          "members": [
            "principalSet://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/my-pool/attribute.aws_role/arn:aws:iam::123456789012:role/s3access"
          ]
        },
        {
          "role": "roles/iam.serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "policy": POLICY
}

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

Die Antwort enthält die aktualisierte Richtlinie.

Google-Anmeldedaten generieren

Wenn Sie eine unterstützte Clientbibliothek verwenden, können Sie die Clientbibliothek so konfigurieren, dass Google-Anmeldedaten automatisch generiert werden. Alternativ können Sie AWS-Anmeldedaten manuell generieren und diese dann gegen Google-Anmeldedaten austauschen.

Wir empfehlen Ihnen, nach Möglichkeit Anmeldedaten automatisch zu generieren, damit Sie den Token-Exchange-Prozess nicht selbst implementieren müssen.

Anmeldedaten automatisch generieren

Wenn Sie mit einer Clientbibliothek für eine der folgenden Sprachen auf Google Cloud zugreifen, können Sie die Clientbibliothek so konfigurieren, dass Anmeldedaten automatisch mithilfe der Identitätsföderation erzeugt werden:

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.

Um die Clientbibliothek so zu konfigurieren, dass Anmeldedaten automatisch generiert werden, erstellen Sie eine JSON-Konfigurationsdatei. Sie können diese Datei mit der Cloud Console oder dem gcloud-Tool erstellen.

Console

Folgen Sie zuerst der Anleitung auf dieser Seite, damit externe Identitäten die Identität eines Dienstkontos übernehmen können. Sie können dann eine JSON-Konfigurationsdatei für jedes Dienstkonto erstellen, dessen Identität die externen Identitäten übernehmen können.

So erstellen Sie eine JSON-Konfigurationsdatei:

  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 zu verwendenden Identitätsanbieter enthält, und klicken Sie auf das Symbol Bearbeiten. Die Cloud Console zeigt Details zum Workload Identity-Pool an.
  3. Klicken Sie auf Verbundene Dienstkonten.
  4. Suchen Sie das Dienstkonto, das Sie verwenden möchten, und klicken Sie auf Herunterladen.
  5. Wählen Sie in der Drop-down-Liste Anbieter den Anbieter aus, der die AWS-Identitäten enthält, die die Identität des Dienstkontos übernehmen.
  6. Klicken Sie auf Konfiguration herunterladen, um die JSON-Konfigurationsdatei herunterzuladen, und klicken Sie dann auf Fertig.

gcloud

Führen Sie zum Erstellen einer JSON-Konfigurationsdatei den Befehl gcloud iam workload-identity-pools create-cred-config aus:

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 \
    --aws

Ersetzen Sie die folgenden Werte:

  • PROJECT_NUMBER: Die numerische ID für das Projekt.
  • POOL_ID: Die ID des Workload-Identitätspools.
  • PROVIDER_ID: Die ID für den Identitätsanbieter des Workloads.
  • SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des Dienstkontos, dessen Identität angenommen werden soll.
  • FILEPATH: Der Dateipfad für die Konfigurationsdatei.

Nachdem Sie die Konfigurationsdatei generiert haben, legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Dateipfad für die Konfigurationsdatei fest. Diese Umgebungsvariable weist die Clientbibliothek an, für die Authentifizierung die Standardanmeldedaten für Anwendungen zu verwenden. Weitere Informationen finden Sie unter Anmeldedaten automatisch finden.

Anmeldedaten manuell austauschen

Sobald eine AWS-Rolle oder ein Nutzer die Identität eines Dienstkontos übernehmen kann, können Sie dessen AWS-Anmeldedaten manuell gegen Google-Anmeldedaten tauschen.

Als Teil des Austauschs übergeben Sie ein GetCallerIdentity-Token an den Security Token Service. Das GetCallerIdentity-Token enthält die Informationen, die Sie normalerweise in eine Anfrage an die AWS-Methode GetCallerIdentity() aufnehmen würden, sowie die Signatur, die Sie normalerweise für die Anfrage erzeugen würden. Google Cloud verwendet das GetCallerIdentity-Token, um die Identität des AWS-Hauptkontos zu überprüfen und zu bestätigen, dass das Hauptkonto berechtigt ist, die Identität eines Dienstkontos zu übernehmen.

So tauschen Sie Anmeldedaten aus:

  1. Temporäre AWS-Anmeldedaten abrufen

  2. Erstellen Sie ein GetCallerIdentity-Token. Das Token enthält die Informationen für eine Anfrage an die AWS-Methode GetCallerIdentity() sowie die AWS-Signatur für die Anfrageinformationen. Signatur Version 4 verwenden.

    Die Anfrage 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: Den vollständigen Ressourcennamen des Identitätsanbieters. Beispiele:
      //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
      
      • x-amz-security-token: Nur erforderlich, wenn Sie temporäre Sicherheitsanmeldedaten verwenden. Das einzuschließende AWS-Sitzungstoken

    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="
        }
      ]
    }
    
  3. Übergeben Sie das Token GetCallerIdentity an die Methode token() des Security Token Service, um die AWS-Anmeldedaten gegen ein föderiertes Zugriffstoken auszutauschen:

    REST

    Mit der Methode token wird das Token eines Drittanbieters gegen ein Google-Token ausgetauscht.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_NUMBER: Ihre Google Cloud-Projektnummer.
    • POOL_ID: Die ID des von Ihnen erstellten Workload Identity-Pools.
    • PROVIDER_ID: Die ID des von Ihnen konfigurierten AWS-Identitätsanbieters.
    • AWS_REQUEST: Das GetCallerIdentity-Token formatiert als URL-codiertes JSON.

    HTTP-Methode und URL:

    POST https://sts.googleapis.com/v1/token

    JSON-Text anfordern:

    {
      "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": "urn:ietf:params:aws:token-type:aws4_request",
      "subjectToken": "AWS_REQUEST"
    }
    

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

     

    Die Methode gibt ein föderiertes Token zurück.

  4. Rufen Sie die Methode generateAccessToken() auf, um das föderierte Token gegen ein Zugriffstoken für das Dienstkonto auszutauschen. Eine begrenzte Anzahl an Google Cloud APIs unterstützt föderierte Tokens. Im Gegensatz dazu unterstützen alle Google Cloud APIs Dienstkonto-Zugriffstokens.

    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:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
    • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.
    • token: Das föderierte Zugriffstoken.

    HTTP-Methode und URL:

    POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken

    JSON-Text anfordern:

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

    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"
    }
    

Wenn Sie ein Zugriffstoken für ein Dienstkonto haben, können Sie das Token zum Aufrufen von Google Cloud APIs verwenden, indem Sie das Token in den Header Authorization Ihrer Anfragen aufnehmen:

Authorization: Bearer SERVICE_ACCOUNT_ACCESS_TOKEN

Die Anfrage ist als Dienstkonto autorisiert.

Nächste Schritte