Einführung in die Dienstidentität

Auf dieser Seite werden die beiden Cloud Run-Identitäten beschrieben und wie Cloud Run die Dienstidentität zum Aufrufen von Cloud-Clientbibliotheken verwendet. Beispiele für Cloud-Clientbibliotheken sind Cloud Storage, Firestore, Cloud SQL, Pub/Sub und Cloud Tasks. Diese Seite richtet sich an Administratoren, Operatoren oder Entwickler, die Organisationsrichtlinien und den Nutzerzugriff verwalten, oder an Personen, die mehr über solche Themen erfahren möchten.

Cloud Run-Identitäten

Damit Sie Cloud Run verwenden können, müssen der Cloud Run-Nutzer und die Cloud Run-Instanz jeweils eine Identität haben.

  • Die Identität des Cloud Run-Nutzers wird als Cloud Run-Bereitstellerkonto bezeichnet. Zum Verwalten einer Überarbeitung oder eines Jobs verwenden Sie diese Identität, um Anfragen an die Cloud Run Admin API zu senden.
  • Die Identität der Cloud Run-Instanz wird als Cloud Run-Dienstidentität bezeichnet. Wenn der Cloud Run-Dienst oder -Job mit Cloud-Clientbibliotheken interagiert, verwenden Sie diese Identität, um Anfragen an Google Cloud APIs aus Cloud Run zu senden.

Um auf die Google Cloud APIs zugreifen und Anfragen an sie senden zu können, muss jeder Identität die entsprechenden Berechtigungen in Identity and Access Management (IAM) zugewiesen haben.

Cloud Run Admin API mit dem Bereitstellerkonto aufrufen

Sie können die Cloud Run Admin API über Cloud Run mit dem Cloud Run-Bereitstellerkonto aufrufen. Das Bereitstellerkonto kann entweder ein Nutzerkonto oder ein Dienstkonto sein und stellt das Konto dar, das in der Google Cloud-Umgebung angemeldet wurde.

Wenn das Bereitstellerkonto Cloud Run verwendet, prüft IAM, ob das Bereitstellerkonto die erforderlichen Berechtigungen zum Ausführen des Cloud Run-Vorgangs hat. Das folgende Diagramm zeigt, wie ein Nutzerkonto die Cloud Run Admin API aufruft, um eine neue Überarbeitung über die Google Cloud Console bereitzustellen:

Cloud Run Admin API über die Google Cloud Console aufrufen
Abbildung 1. Ein Nutzer stellt mit der Google Cloud Console eine neue Überarbeitung bereit. Dazu sendet er eine Anfrage mit einem Zugriffstoken an die Cloud Run Admin API. IAM prüft anhand dieses Zugriffstokens, ob das Nutzerkonto authentifiziert ist, um auf die Cloud Run Admin API zuzugreifen, bevor der Vorgang ausgeführt wird.

Google Cloud APIs mit der Dienstidentität aufrufen

Wenn eine Cloud Run-Instanz mit Cloud Client-Bibliotheken interagiert, entweder über Anwendungscode oder integrierte Funktionen wie Cloud Run-Integrationen oder Cloud Storage-Volume-Bereitstellungen, verwendet die Google Cloud-Umgebung Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC), um automatisch zu erkennen, ob die Cloud Run-Dienstidentität für die Durchführung des API-Vorgangs authentifiziert ist. Die Cloud Run-Dienstidentität ist ein Dienstkonto, das beim Bereitstellen einer Überarbeitung oder beim Ausführen eines Jobs als Identität der Cloud Run-Instanz zugewiesen wurde.

Ein Dienstkonto, das als Bereitstellerkonto verwendet wird, wird nur als Dienstidentität verwendet, wenn Sie dasselbe Dienstkonto in Ihrer Cloud Run-Konfiguration konfigurieren.

Im Rest dieses Leitfadens wird beschrieben, wie ein Cloud Run-Dienst oder -Job die Dienstidentität verwendet, um Google-Dienste und APIs aufzurufen und darauf zuzugreifen. Weitere Informationen zur Konfiguration der Dienstidentität finden Sie auf den Konfigurationsseiten der Dienstidentität für Dienste und Jobs.

Arten von Dienstkonten für die Dienstidentität

Wenn Ihre Cloud Run-Instanz Google Cloud APIs aufruft, um die erforderlichen Vorgänge auszuführen, verwendet Cloud Run automatisch ein Dienstkonto als Dienstidentität. Diese zwei Arten von Dienstkonten können als Dienstidentität verwendet werden:

  • Nutzerverwaltetes Dienstkonto (empfohlen): Sie erstellen dieses Dienstkonto manuell und ermitteln die minimalen Berechtigungen, die das Dienstkonto für den Zugriff auf bestimmte Google Cloud-Ressourcen benötigt. Das nutzerverwaltete Dienstkonto hat das Format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • Compute Engine-Standarddienstkonto: Cloud Run stellt das Compute Engine-Standarddienstkonto automatisch als Standarddienstidentität bereit. Das Compute Engine-Standarddienstkonto hat das Format PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Standarddienstkonto beim Konfigurieren der Dienstidentität vermeiden

Standardmäßig wird das Compute Engine-Standarddienstkonto automatisch erstellt. Wenn Sie beim Erstellen des Cloud Run-Dienstes oder -Jobs kein Dienstkonto angeben, verwendet Cloud Run dieses Dienstkonto.

Der Zweck des Standarddienstkontos besteht darin, Ihre Cloud Run-Instanz ohne Berechtigungsfehler auszuführen. Diesem Hauptkonto wird die Rolle "Bearbeiter" zugewiesen, die Lese- und Schreibberechtigungen für alle Ressourcen in Ihrem Google Cloud-Projekt gewährt. Zur Beachtung des Prinzips der geringsten Berechtigung empfiehlt Google, ein neues Dienstkonto zu erstellen und dem Dienstkonto mit den minimalsten Berechtigungen für den Zugriff auf bestimmte Google Cloud-Ressourcen zu gewähren.

Funktionsweise der Dienstidentität

Folgendes geschieht, wenn Ihr Code Cloud-Clientbibliotheken aufruft oder Anfragen an sie sendet:

  1. Die Clientbibliotheken erkennen, dass eine Anfrage an eine Google Cloud API oder an Cloud-Clientbibliotheken gesendet wird, und fordern ein OAuth 2.0-Zugriffstoken für die Dienstidentität vom Metadatenserver der Instanz an.
  2. Der Instanzmetadatenserver stellt ein IAM-Zugriffstoken für das Dienstkonto bereit, das als Dienstidentität konfiguriert ist.
  3. Die Anfrage an die Google Cloud API wird mit einem OAuth 2.0-Zugriffstoken gesendet.
  4. IAM prüft die im Zugriffstoken referenzierte Dienstidentität auf die erforderlichen Berechtigungen und prüft die Richtlinienbindungen, bevor der Aufruf an den API-Endpunkt weitergeleitet wird.
  5. Die Google Cloud API führt den Vorgang durch.
Google Cloud API über Cloud Run aufrufen
Abbildung 1. Cloud Run generiert ein Zugriffstoken vom Metadatenserver. IAM prüft mithilfe dieses Zugriffstokens, ob die zugewiesene Cloud Run-Dienstidentität für den Zugriff auf die Google Cloud APIs authentifiziert ist.

Zugriffstoken für die Cloud Run-Anfrage zum Aufrufen von Google Cloud APIs generieren

Wenn Ihr Cloud Run-Code Cloud-Clientbibliotheken verwendet, konfigurieren Sie die Dienstidentität in Cloud Run, indem Sie bei der Bereitstellung oder Ausführung ein Dienstkonto zuweisen. Dadurch kann die Bibliothek automatisch ein Zugriffstoken abrufen, um die Anfrage Ihres Codes zu authentifizieren. Informationen zum Zuweisen eines Dienstkontos als Dienstidentität finden Sie in den folgenden Anleitungen:

Wenn Sie jedoch Ihren eigenen benutzerdefinierten Code verwenden oder Anfragen programmatisch stellen müssen, können Sie den Metadatenserver direkt verwenden, um die im nächsten Abschnitt beschriebenen Identitäts- und Zugriffstoken manuell abzurufen. Hinweis: Sie können diesen Server nicht direkt von Ihrem lokalen Computer aus abfragen, da der Metadatenserver nur für Arbeitslasten verfügbar ist, die in Google Cloud ausgeführt werden.

ID- und Zugriffstokens mit dem Metadatenserver abrufen

Die folgenden zwei Arten von Tokens können Sie mit dem Metadatenserver abrufen:

Folgen Sie zum Abrufen eines Tokens den Anleitungen auf dem entsprechenden Tab für den verwendeten Tokentyp:

Zugriffstokens

Wenn Sie beispielsweise ein Pub/Sub-Thema erstellen möchten, verwenden Sie die Methode projects.topics.create.

  1. Verwenden Sie den Compute Metadata Server, um ein Zugriffstoken abzurufen:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
        --header "Metadata-Flavor: Google"
    

    Dieser Endpunkt gibt eine JSON-Antwort mit einem access_token-Attribut zurück.

  2. In Ihrer HTTP-Protokollanfrage muss die Anfrage mit einem Zugriffstoken im Header Authorization authentifiziert werden:

    PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
    Authorization: Bearer ACCESS_TOKEN
    

    Wobei:

    • PROJECT_ID ist die Projekt-ID.
    • TOPIC_ID ist Ihre Themen-ID.
    • ACCESS_TOKEN ist das Zugriffstoken, das Sie im vorherigen Schritt abgerufen haben.

    Lösung:

    {
        "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }
    

ID-Tokens

Verwenden Sie den Compute Metadata Server, um ein Identitätstoken für eine bestimmte Zielgruppe abzurufen:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
    --header "Metadata-Flavor: Google"

Dabei ist AUDIENCE die angeforderte JWT-Zielgruppe.

Bei Cloud Run-Diensten sollte die Zielgruppe entweder die URL des Dienstes sein, den Sie aufrufen, oder eine benutzerdefinierte Zielgruppe, z. B. eine benutzerdefinierte Domain, die für den Dienst konfiguriert ist.

https://service.domain.com

Für andere Ressourcen ist dies wahrscheinlich die OAuth-Client-ID einer IAP-geschützten Ressource:

1234567890.apps.googleusercontent.com

Weitere Informationen