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:
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:
- 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.
- Der Instanzmetadatenserver stellt ein IAM-Zugriffstoken für das Dienstkonto bereit, das als Dienstidentität konfiguriert ist.
- Die Anfrage an die Google Cloud API wird mit einem OAuth 2.0-Zugriffstoken gesendet.
- 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.
- Die Google Cloud API führt den Vorgang durch.
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:
- OAuth 2.0-Zugriffstokens, die zum Aufrufen der meisten Google API-Clientbibliotheken verwendet werden.
- ID-Tokens, die zum Aufrufen anderer Cloud Run-Dienste oder Cloud Functions oder anderer Dienste, die ID-Token validieren.
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
.
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.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: BearerACCESS_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
- Konfigurieren Sie die Dienstidentität für Dienste oder Jobs.
- Zugriff auf Dienste verwalten oder Entwickler, Dienste und Nutzer sicher gegenüber Diensten authentifizieren
- Eine Schritt-für-Schritt-Anleitung einer Anwendung, die die Dienstidentität verwendet, um das Sicherheitsrisiko zu minimieren, finden Sie in der Anleitung zum Sichern von Cloud Run-Diensten.