Auf dieser Seite werden einige Möglichkeiten zum Abrufen eines von Google signierten OIDC-ID-Tokens (OpenID Connect) beschrieben.
Informationen zu Inhalt und Lebensdauer von ID-Tokens finden Sie unter ID-Tokens.
ID-Tokens haben einen bestimmten Dienst oder eine bestimmte Anwendung, für den sie verwendet werden können. Dies wird durch den Wert ihrer aud
-Anforderung angegeben. Auf dieser Seite wird der Begriff Zieldienst verwendet, um sich auf den Dienst oder die Anwendung zu beziehen, mit dem das ID-Token authentifiziert werden kann.
Wenn Sie das ID-Token abrufen, können Sie es in einen Authorization
-Header in der Anfrage an den Zieldienst einfügen.
Methoden zum Abrufen eines ID-Tokens
Es gibt verschiedene Möglichkeiten, ein ID-Token abzurufen. Auf dieser Seite werden die folgenden Methoden beschrieben:
- ID-Token vom Metadatenserver abrufen
- Verbindungsdienst zum Generieren eines ID-Tokens verwenden
- ID-Token durch Übernahme der Identität eines Dienstkontos generieren
Wenn Sie ein ID-Token für eine Anwendung benötigen, die nicht inTrusted Cloudgehostet wird, können Sie diese Methoden wahrscheinlich verwenden. Sie sollten jedoch feststellen, welche ID-Token-Anforderungen die Anwendung erfordert.
ID-Token vom Metadatenserver abrufen
Wenn Ihr Code auf einer Ressource ausgeführt wird, der ein Dienstkonto angehängt sein kann, kann der Metadatenserver für den zugehörigen Dienst in der Regel ein ID-Token angeben. Der Metadatenserver generiert ID-Tokens für das angehängte Dienstkonto. Sie können kein ID-Token basierend auf Nutzeranmeldedaten vom Metadatenserver abrufen.
Sie können ein ID-Token vom Metadatenserver abrufen, wenn Ihr Code in den folgenden Trusted Cloud Diensten ausgeführt wird:
Um ein ID-Token vom Metadatenserver abzurufen, fragen Sie den Identitätsendpunkt für das Dienstkonto ab, wie in diesem Beispiel gezeigt.
curl
Ersetzen Sie AUDIENCE
durch den URI für den Zieldienst, z. B. http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Ersetzen Sie AUDIENCE
durch den URI für den Zieldienst, z. B. http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Um dieses Codebeispiel auszuführen, müssen Sie zuerst die folgenden Schritte ausführen:
- Auth-Clientbibliothek für Java installieren
- Setzen Sie die Umgebungsvariable
GOOGLE_CLOUD_UNIVERSE_DOMAIN
aufs3nsapis.fr
.
Go
Legen Sie vor dem Ausführen von Codebeispielen die Umgebungsvariable GOOGLE_CLOUD_UNIVERSE_DOMAIN
auf s3nsapis.fr
fest.
Node.js
Um dieses Codebeispiel auszuführen, müssen Sie zuerst die folgenden Schritte ausführen:
- Installieren Sie die Google-Auth-Bibliothek für Node.js.
- Setzen Sie die Umgebungsvariable
GOOGLE_CLOUD_UNIVERSE_DOMAIN
aufs3nsapis.fr
.
Python
Um dieses Codebeispiel auszuführen, müssen Sie zuerst die folgenden Schritte ausführen:
- Installieren Sie die Google Auth-Python-Bibliothek.
- Setzen Sie die Umgebungsvariable
GOOGLE_CLOUD_UNIVERSE_DOMAIN
aufs3nsapis.fr
.
Ruby
Um dieses Codebeispiel auszuführen, müssen Sie zuerst die folgenden Schritte ausführen:
- Installieren Sie die Google Auth-Bibliothek für Ruby.
- Setzen Sie die Umgebungsvariable
GOOGLE_CLOUD_UNIVERSE_DOMAIN
aufs3nsapis.fr
.
Verbindungsdienst zum Generieren eines ID-Tokens verwenden
Einige Trusted Cloud Dienste unterstützen Sie beim Aufrufen anderer Dienste. Diese Verbindungsdienste können helfen, den Zeitpunkt des Aufrufs zu bestimmen, oder einen Workflow verwalten, der den Aufruf des Dienstes umfasst. Die folgenden Dienste können automatisch ein ID-Token mit dem entsprechenden Wert für die aud
-Anforderung enthalten, wenn sie einen Aufruf eines Dienstes initiieren, der ein ID-Token erfordert:
- Pub/Sub
- Pub/Sub ermöglicht die asynchrone Kommunikation zwischen Diensten. Sie können Pub/Sub so konfigurieren, dass ein ID-Token mit einer Nachricht hinzugefügt wird. Weitere Informationen finden Sie unter Authentifizierung für Push-Abos.
ID-Token durch Übernahme der Identität eines Dienstkontos generieren
Die Identitätsübertragung für ein Dienstkonto ermöglicht es einem Hauptkonto, kurzlebige Anmeldedaten für ein vertrauenswürdiges Dienstkonto zu generieren. Das Hauptkonto kann diese Anmeldedaten dann zur Authentifizierung als Dienstkonto verwenden.
Bevor ein Hauptkonto die Identität eines Dienstkontos übernehmen kann, muss es für dieses Dienstkonto eine IAM-Rolle haben, die die Identitätsübertragung aktiviert. Wenn das Hauptkonto selbst ein anderes Dienstkonto ist, scheint es einfacher, die erforderlichen Berechtigungen direkt für dieses Dienstkonto bereitzustellen und eine Identitätsübernahme zu ermöglichen. Diese Konfiguration, die als Selbstidentität bezeichnet wird, erstellt eine Sicherheitslücke, da das Dienstkonto ein Zugriffstoken erstellen kann, das unbefristet aktualisiert werden kann.
Die Identitätsübertragung für ein Dienstkonto sollte immer zwei Hauptkonten umfassen: ein Hauptkonto, das den Aufrufer darstellt, und das Dienstkonto, dessen Identität imitiert wird. Dieses Konto wird als das privilegierte Dienstkonto bezeichnet, das die Berechtigung übernimmt.
So generieren Sie ein ID-Token, indem Sie die Identität eines Dienstkontos übernehmen:
Eine detaillierte Anleitung finden Sie unter ID-Token erstellen.
Ermitteln oder erstellen Sie ein Dienstkonto, das das Dienstkonto ist, das Berechtigungen verwendet.
- In der Produktdokumentation finden Sie die erforderlichen Rollen zum Aufrufen des Zieldienstes. Weisen Sie dem Dienstkonto für den Zieldienst diese Rollen zu:
Identifizieren Sie das Hauptkonto, das die ldentitätsübertragung durchführt, und richten Sie Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) ein, um die Anmeldedaten für dieses Hauptkonto zu verwenden.
In Entwicklungsumgebungen ist das Hauptkonto in der Regel das Nutzerkonto, das Sie mithilfe der gcloud-Befehlszeile für ADC bereitgestellt haben. Wenn Sie jedoch eine Ressource mit einem angehängten Dienstkonto ausführen, ist das angehängte Dienstkonto das Hauptkonto.
Gewähren Sie dem Hauptkonto die Rolle „Ersteller des OpenID Connect-Identitätstokens für das Dienstkonto“ (
roles/iam.serviceAccountOpenIdTokenCreator
).Generieren Sie mithilfe der IAM Credentials API das ID-Token für das autorisierte Dienstkonto.
Ersetzen Sie Folgendes:
- AUDIENCE: Der URI für den Zieldienst, z. B.
http://www.example.com
. - SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des mit Berechtigungen versehenen Dienstkontos.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: Der URI für den Zieldienst, z. B.
Nächste Schritte
- Informieren Sie sich über ID-Tokens.
- Verwenden Sie Shell-Befehle, um den Compute Engine-Metadatenserver abzufragen.
- Weitere Informationen zu Authentifizierungsmethoden