In diesem Leitfaden erfahren Sie, wie Sie einen Workforce Identity-Pool und einen Workforce Identity-Poolanbieter verwenden, um kurzlebige Token vom Security Token Service zu erhalten. Sie können die Token verwenden, um auf Google Cloud-Ressourcen zuzugreifen, die Workforce Identity-Föderation unterstützen und auf die Sie Zugriff erhalten haben.
Die in diesem Leitfaden beschriebenen Methoden können auf headless-Maschinen verwendet werden.
So erhalten Sie kurzlebige Tokens:
- Rufen Sie Anmeldedaten vom vertrauenswürdigen Identitätsanbieter ab.
- Tauschen Sie die Anmeldedaten gegen ein Token des Security Token Service aus.
Hinweise
Konfigurieren der Workforce Identity-Föderation oder lesen Sie für IdP-spezifische Anweisungen die folgenden Anleitungen:
- Microsoft Entra ID-basierte Mitarbeiteridentitätsföderation konfigurieren
- Okta-basierte Mitarbeiteridentitätsföderation konfigurieren
Notieren Sie sich die ID Ihres Mitarbeiteridentitätspools und die ID des Anbieters des Mitarbeiteridentitätspools.
Prüfen Sie, ob Sie die IAM-Berechtigung (Identity and Access Management)
serviceusage.services.use
haben. Die Rolle mit den geringsten Berechtigungen, die diese Berechtigung enthält, ist Service Usage-Nutzer (roles/serviceusage.serviceUsageConsumer
).Enable the IAM and Security Token Service APIs.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Externe Anmeldedaten gegen ein Google Cloud-Zugriffstoken austauschen
In diesem Abschnitt erfahren Sie, wie Sie mit dem Security Token Service Ihre externen Anmeldedaten gegen ein Zugriffstoken austauschen, das Zugriff auf Google Cloud gewährt. Verwenden Sie dazu die gcloud CLI, die REST API und die Cloud-Clientbibliotheken, wie später in dieser Anleitung beschrieben.
Wenn Sie einen langlebigen Zugriff benötigen, können Sie einen lang andauernden Prozess konfigurieren, um Anmeldedaten auf diesem Computer kontinuierlich zu aktualisieren. Alternativ können Sie einen lokalen Server im Hintergrund mit einem Endpunkt ausführen, der die Anmeldedaten zurückgibt.
Browserbasierte Anmeldung mit der gcloud CLI
In diesem Abschnitt wird beschrieben, wie Sie die gcloud CLI für die Verwendung eines browserbasierten Anmeldeablaufs konfigurieren. Dazu erstellen Sie eine Konfigurationsdatei für die Anmeldung und verweisen dann entweder in Aufrufen an gcloud auth login
auf die Datei oder aktivieren sie für eine standardmäßige Verwendung.
Konfigurationsdatei für die Anmeldung erstellen
Mit dem folgenden Befehl erstellen Sie die Konfigurationsdatei für die Anmeldung. Optional können Sie die Datei mit dem Flag --activate
als Standarddatei für die gcloud CLI aktivieren.
gcloud iam workforce-pools create-login-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --output-file=LOGIN_CONFIG_FILE
Ersetzen Sie Folgendes:
-
WORKFORCE_POOL_ID
: die ID des Workforce Identity-Pools -
WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools LOGIN_CONFIG_FILE
: ein Pfad zur von Ihnen angegebenen Anmeldekonfigurationsdatei, z. B.login.json
Die Datei enthält die Endpunkte, die von der gcloud CLI verwendet werden, um den browserbasierten Authentifizierungsvorgang zu aktivieren und die Zielgruppe auf den Identitätsanbieter festzulegen, der im Anbieter des Mitarbeiteridentitätspools konfiguriert wurde. Die Datei enthält keine vertraulichen Daten.
Die Ausgabe sieht dann ungefähr so aus:
{ "type": "external_account_authorized_user_login_config", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "auth_url": "https://auth.cloud.google/authorize", "token_url": "https://sts.googleapis.com/v1/oauthtoken", "token_info_url": "https://sts.googleapis.com/v1/introspect", }
Mit der browserbasierten Authentifizierung anmelden
Sie haben folgende Möglichkeiten, sich mit einer browserbasierten Anmeldung zu authentifizieren:
-
Wenn Sie das Flag
--activate
beim Erstellen der Konfigurationsdatei verwendet oder die Konfigurationsdatei mitgcloud config set auth/login_config_file
aktiviert haben, wird sie automatisch von der gcloud CLI verwendet:gcloud auth login
-
Mit dem folgenden Befehl melden Sie sich durch Angabe des Speicherorts der Konfigurationsdatei an:
gcloud auth login --login-config=LOGIN_CONFIG_FILE
-
Wenn Sie den Speicherort der Konfigurationsdatei mit einer Umgebungsvariable angeben möchten, legen Sie für
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE
den Konfigurationspfad fest.
Browserbasierte Anmeldung deaktivieren
So beenden Sie die Verwendung der Konfigurationsdatei für die Anwendung:
-
Wenn Sie das Flag
--activate
beim Erstellen der Konfigurationsdatei verwendet oder die Konfigurationsdatei mitgcloud config set auth/login_config_file
aktiviert haben, müssen Sie den folgenden Befehl ausführen, um die Festlegung aufzuheben:gcloud config unset auth/login_config_file
-
Löschen Sie die Umgebungsvariable
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE
, falls sie festgelegt ist.
Konfigurationsdateien für die Anmeldung verwenden
Als Alternative zur browserbasierten Anmeldung finden Sie in diesem Abschnitt verschiedene Möglichkeiten, wie Sie Konfigurationsdateien für Anmeldedaten verwenden können, um Zugriff auf authentifizierte Google Cloud-Aktionen zu gewähren. Sie müssen nicht in der gcloud CLI angemeldet sein, um die Konfigurationsdateien einzurichten.
Wie Sie Ihre Konfigurationsdatei einrichten, hängt davon ab, ob Ihr IdP OIDC oder SAML verwendet.
OIDC
Sie können die Anmeldedaten, mit denen Sie Ihre Konfigurationsdatei einrichten, aus den folgenden Quellen beziehen:
- Dateibasierte Anmeldedaten
- URL-basierte Anmeldedaten
- Nicht interaktive ausführbare Datei-basierte Anmeldedaten
- Interaktive ausführbare Datei-basierte Anmeldedaten
Dateibasierte Anmeldedaten
Bei der Verwendung von dateibasierten Anmeldedaten werden Tokens 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 einer Stunde hat, müssen Sie die Datei innerhalb einer Stunde aktualisieren.
Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei mit dateibasierten Anmeldedaten zu generieren:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--credential-source-file=PATH_TO_OIDC_ID_TOKEN \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file=config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Workforce Identity-PoolsWORKFORCE_PROVIDER_ID
: die ID des Anbieters des MitarbeiteridentitätspoolsPATH_TO_OIDC_TOKEN
: der Pfad zur OIDC-IdP-AnmeldedatendateiWORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die dem Nutzerprojekt für Workforce-Pools zugeordnet sind.
Das Hauptkonto muss die Berechtigung serviceusage.services.use
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine OIDC-IdP-Konfigurationsdatei erstellt, die in etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"file": "PATH_TO_OIDC_CREDENTIALS_FILE"
}
}
URL-basierte Anmeldedaten
Bei der Verwendung von URL-basierten Anmeldedaten werden Tokens 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.
Führen Sie den folgenden Befehl aus, um eine Konfigurationsdatei mit URL-basierten Anmeldedaten zu generieren:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--credential-source-url=URL_TO_RETURN_OIDC_ID_TOKEN \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file=config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.URL_TO_RETURN_OIDC_ID_TOKEN
: die URL, die zum Abrufen der OIDC-Anmeldedaten aufgerufen werden soll, z. B. ein OIDC-ID-Token wiehttp://localhost:5000/token
.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer, die für Kontingente und die Abrechnung verwendet wird. Das Hauptkonto mussserviceusage.services.use permission
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine OIDC-IdP-Konfigurationsdatei erstellt, die in etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"url": "URL_TO_RETURN_OIDC_ID_TOKEN"
}
}
Nicht interaktive ausführbare Datei-basierte Anmeldedaten
Wenn Sie nicht interaktive ausführbare Datei-basierte Anmeldedaten verwenden, werden Tokens aus einer lokalen ausführbaren Datei geladen. Die ausführbare Datei muss ein gültiges, nicht abgelaufenes OIDC-ID-Token im JSON-Format für stdout
bereitstellen:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:id_token", "id_token": "HEADER.PAYLOAD.SIGNATURE", "expiration_time": 1620499962 }
Diese Felder sind mit Ausnahme von expiration_time
für eine erfolgreiche Antwort erforderlich. Das Feld expiration_time
ist nur erforderlich, wenn in der Konfiguration der Anmeldedaten eine Ausgabedatei angegeben wurde.
Die ausführbare Datei muss alle Fehler in stdout
im folgenden JSON-Format anzeigen:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Alle diese Felder sind für eine Fehlerantwort erforderlich. Die Felder „code“ und „message“ werden von den Clientbibliotheken verwendet, wenn der entsprechende Fehler ausgegeben wird.
Der Befehl kann die folgenden Felder zurückgeben:
version
: Die Version der JSON-Ausgabe. Nur Version1
wird unterstützt.success
: Der Status der Antwort. Wenn der Statustrue
lautet, muss die ausführbare Datei mit dem Exit-Code0
beendet werden und die Antwort muss die folgenden Felder enthalten:token_type
:id_token
- Feld
expiration_time
, wenn in der Konfiguration der Anmeldedaten eine Ausgabedatei angegeben ist
Wenn der Status
false
lautet, muss die ausführbare Datei mit einem Wert ungleich null beendet werden und die Antwort muss die folgenden Felder enthalten:code
message
token_type
: der Drittanbieter-Tokentyp des Subjekts, derurn:ietf:params:oauth:token-type:id_token
lauten mussid_token
: das OIDC-Token des Drittanbietersexpiration_time
: die Ablaufzeit des OIDC-Tokens des Drittanbieters in Sekunden (Unixzeit)code
: der Fehlercodestringmessage
: die Fehlermeldung
Die Clientbibliotheken legen die folgenden Umgebungsvariablen fest, wenn die ausführbare Datei ausgeführt wird:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: Das Feld für die Zielgruppe aus der Konfiguration der Anmeldedaten. Diese Variable ist immer festgelegt.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: Der erwartete Tokentyp des Subjekts. Diese Variable ist immer festgelegt.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: Der Speicherort der Ausgabedatei aus der Konfiguration von Anmeldedaten. Diese Variable ist nur vorhanden, wenn sie in der Konfiguration der Anmeldedaten angegeben ist.
Diese Umgebungsvariablen können von der ausführbaren Datei verwendet werden, um eine Hartcodierung dieser Werte zu vermeiden.
Um diese Methode der Anmeldedatenbereitstellung für die Clientbibliotheken zu aktivieren, muss die Umgebungsvariable GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
auf 1
festgelegt sein.
Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei mit ausführbaren Anmeldedaten zu generieren:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--executable-command=EXECUTABLE_COMMAND \
--executable-timeout-millis=EXECUTABLE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.EXECUTABLE_COMMAND
: der vollständige Befehl, einschließlich Argumenten, um das Subjekt-Token abzurufen, z. B. ein OIDC-ID-Token, im folgenden Format:--executable-command="/path/to/command --foo=bar"
.EXECUTABLE_TIMEOUT
: Optional. Die Dauer in Millisekunden, die gewartet wird, bis die ausführbare Datei ausgeführt wird (standardmäßig 30 Sekunden).EXECUTABLE_OUTPUT_FILE
: Optional. Ein Pfad zu den Anmeldedaten des Drittanbieters, die von der ausführbaren Datei generiert werden. Dies ist nützlich, um die Anmeldedaten im Cache zu speichern. Die Auth-Bibliotheken prüfen zuerst diesen Pfad, bevor die ausführbare Datei ausgeführt wird.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die für das Kontingent und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigungserviceusage.services.use
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine OIDC-IdP-Konfigurationsdatei erstellt, die in etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE"
}
}
}
Interaktive ausführbare Datei-basierte Anmeldedaten
Wenn Sie interaktive ausführbare Anmeldedaten verwenden, können Sie eine ausführbare Datei bereitstellen, die über stdin
und stdout
mit dem Nutzer interagiert. Wenn sich der Nutzer erfolgreich anmeldet, schreibt die ausführbare Datei gültige, nicht abgelaufene Anmeldedaten in die angegebene Datei.
Für diesen Modus sind die folgenden Flags erforderlich:
--executable-output-file
: die Datei, in die die ausführbare Datei die Anmeldedaten schreibt--exeutable-interactive-timeout-millis
: ein Wert ungleich null, der den interaktiven Modus angibt und das Zeitlimit festlegt, z. B.6000
für ein Zeitlimit von 60 Sekunden
Die folgenden Felder sind mit Ausnahme von expiration_time
für eine erfolgreiche Antwort erforderlich:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:id_token", "id_token": "HEADER.PAYLOAD.SIGNATURE", "expiration_time": 1620499962 }
Die ausführbare Datei muss alle Fehler in die in --executable-output-file
angegebene Datei im folgenden JSON-Format schreiben. Die folgenden Felder sind alle erforderlich, wenn eine Fehlerantwort zurückgegeben wird.
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Die Felder code
und message
müssen den entsprechenden Fehler angeben. Diese Felder werden von den Clientbibliotheken verwendet, wenn der Fehler ausgegeben wird.
Bei erfolgreicher Ausführung gibt der Befehl dieselben Felder für interaktive und nicht interaktive ausführbare Anmeldedaten zurück.
Die Umgebungsvariablen sind für interaktive und nicht interaktive ausführbare Datei-basierte Anmeldedaten identisch.
Fügen Sie den Parameter --executable-interactive-timeout-millis
und den Parameter --executable-output-file
hinzu, um interaktive ausführbare Anmeldedaten zu generieren.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--executable-command=EXECUTABLE_COMMAND \
--executable-interactive-timeout-millis=EXECUTABLE_INTERACTIVE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.EXECUTABLE_COMMAND
: der vollständige Befehl, einschließlich Argumenten, um das Subjekt-Token abzurufen, so formatiert:--executable-command="/path/to/command --arg1=val1 --arg2=val2"
EXECUTABLE_INTERACTIVE_TIMEOUT
: eine Dauer in Millisekunden, die gewartet wird, bis die ausführbare Datei ausgeführt wird.EXECUTABLE_OUTPUT_FILE
: ein Pfad zu den Anmeldedaten des Drittanbieters, die von der ausführbaren Datei generiert werden. Dieser Pfad ist nützlich, um die Anmeldedaten im Cache zu speichern. Die Authentifizierungsbibliotheken prüfen zuerst diesen Pfad, bevor die ausführbare Datei ausgeführt wird.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die für das Kontingent und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigungserviceusage.services.use
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine OIDC-IdP-Konfigurationsdatei erstellt, die in etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"interactive_timeout_millis": "EXECUTABLE_INTERACTIVE_TIMEOUT",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE",
}
}
}
Das Feld timeout_millis
wird zurückgegeben, da eine interaktive ausführbare Datei in einigen Fällen auch im nicht interaktiven Modus ausgeführt werden kann.
Im interaktiven Modus gibt der Befehl eine Standardzeitüberschreitung zurück.
SAML
Sie können die Anmeldedaten, mit denen Sie Ihre Konfigurationsdatei einrichten, aus den folgenden Quellen beziehen:
- Dateibasierte Anmeldedaten
- URL-basierte Anmeldedaten
- Ausführbare Datei-basierte Anmeldedaten
- Ausführbare Datei-basierte Anmeldedaten für den interaktiven Modus von gcloud
Dateibasierte Anmeldedaten
Assertionen werden aus einer Datei geladen. Vor dem Ablauf der alten Assertion muss diese Datei von einem anderen Prozess mit einer neuen base64-codierten SAML-Assertion aktualisiert werden. Wenn die Assertion beispielsweise eine Lebensdauer von einer Stunde hat, müssen Sie die Datei innerhalb einer Stunde aktualisieren.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--output-file=federation_config.json \
--credential-source-file=CREDENTIAL_FILE \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.CREDENTIAL_FILE
: der Pfad zur Datei mit den Anmeldedaten, die vom IdP generiert wird.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die für das Kontingent und die Abrechnung verwendet wird. Das Hauptkonto muss in diesem Projektserviceusage.services.use permission
haben.
URL-basierte Anmeldedaten
Assertions werden von einem lokalen Server mit einem Endpunkt geladen, der auf HTTP-GET-Anfragen antwortet. Die Antwort muss entweder eine [base64-codierte](https://toolbox.googleapps.com/apps/encode_decode/) SAML-Assertion oder eine JSON-Datei sein, die eine base64-codierte SAML-Assertion enthält. Um URL-basierte Anmeldedaten zu verwenden, verwenden Sie das Flag `--credential-source-url`: ```sh gcloud iam workforce-pools create-cred-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --output-file=federation_config.json \ --credential-source-url=CREDENTIAL_URL \ --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \ --workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT ``` Ersetzen Sie Folgendes: *WORKFORCE_POOL_ID
: die ID des Workforce Identity-Pools.
* WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.
* CREDENTIAL_URL
: die URL des lokalen Server-Endpunkts.
* WORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die für das Kontingent und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigung „serviceusage.services.use“ für dieses Projekt haben.
Ausführbare Datei-basierte Anmeldedaten
Assertions werden aus einer lokalen ausführbaren Datei geladen. Die ausführbare Datei muss eine gültige, nicht abgelaufene SAML-Assertion im JSON-Format für stdout
bereitstellen.
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:saml2", "saml_response": "...", "expiration_time": 1620499962 }
Diese Felder sind mit Ausnahme von expiration_time
für eine erfolgreiche Antwort erforderlich. Das Feld expiration_time
ist nur erforderlich, wenn in der Konfiguration der Anmeldedaten eine Ausgabedatei angegeben ist.
Wenn ein Fehler auftritt, muss dieser von der ausführbaren Datei im folgenden JSON-Format für stdout angezeigt werden:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Alle diese Felder sind für eine Fehlerantwort erforderlich. Die Felder „code“ und „message“ werden von den Clientbibliotheken verwendet, wenn der entsprechende Fehler ausgegeben wird.
Der Befehl kann die folgenden Felder zurückgeben:
version
: Die Version der JSON-Ausgabe. Nur Version1
wird unterstützt.success
: Der Status der Antwort. Wenn der Statustrue
lautet, muss die ausführbare Datei mit dem Exit-Code0
beendet werden und die Antwort muss die folgenden Felder enthalten:token_type
:saml_response
- Feld
expiration_time
, wenn in der Konfiguration der Anmeldedaten eine Ausgabedatei angegeben ist
Wenn der Status
false
lautet, muss die ausführbare Datei mit einem Wert ungleich null beendet werden und die Antwort muss die folgenden Felder enthalten: +code
+message
token_type
: der Drittanbieter-Tokentyp des Subjekts, derurn:ietf:params:oauth:token-type:saml2
lauten musssaml_response
: die SAML-Antwort des Drittanbietersexpiration_time
: die Ablaufzeit der SAML-Antwort des Drittanbieters in Sekunden (Unixzeit)code
: der Fehlercodestringmessage
: die Fehlermeldung
Die Clientbibliotheken legen die folgenden Umgebungsvariablen fest, wenn die ausführbare Datei ausgeführt wird:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: Das Feld für die Zielgruppe aus der Konfiguration der Anmeldedaten. Diese Variable ist immer festgelegt.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: Der erwartete Tokentyp des Subjekts. Diese Variable ist immer festgelegt.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: Der Speicherort der Ausgabedatei aus der Konfiguration von Anmeldedaten. Diese Variable ist nur vorhanden, wenn sie in der Konfiguration der Anmeldedaten angegeben ist.
Um diese Methode der Anmeldedatenbereitstellung für die Clientbibliotheken zu aktivieren, legen Sie die Umgebungsvariable GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
auf 1
fest.
Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei mit ausführbaren Anmeldedaten zu generieren:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--executable-command=EXECUTABLE_COMMAND \
--executable-timeout-millis=EXECUTABLE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.EXECUTABLE_COMMAND
: der vollständige Befehl, einschließlich Argumenten, um das Subjekt-Token abzurufen, im folgenden Format:--executable-command="/path/to/command --foo=bar"
.EXECUTABLE_TIMEOUT
: Optional. Die Dauer in Millisekunden, die gewartet wird, bis die ausführbare Datei ausgeführt wird (standardmäßig 30 Sekunden).EXECUTABLE_OUTPUT_FILE
: Optional. Der Pfad zu den Anmeldedaten der Drittanbieteridentität (3PI), die von der ausführbaren Datei generiert werden. Dies ist nützlich, um die Anmeldedaten im Cache zu speichern. Die Autorisierungsbibliotheken prüfen vor der Ausführung der ausführbaren Datei, ob sie vorhanden ist.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer, die für Kontingente und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigungserviceusage.services.use
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine SAML-IdP-Konfigurationsdatei erstellt, die etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE"
}
}
}
Ausführbare Datei-basierte Anmeldedaten für den interaktiven Modus von gcloud
Wenn Sie ausführbare Datei-basierte Anmeldedaten für den interaktiven Modus von gcloud verwenden, interagiert eine ausführbare Datei über die Befehlszeile mit dem Nutzer.
Ersetzen Sie im vorherigen Befehl Folgendes:
EXECUTABLE_OUTPUT_FILE
: erforderlich. Der Pfad zur Datei mit den von der ausführbaren Datei generierten Anmeldedaten.EXECUTABLE_TIMEOUT
: erforderlich. Ein Zeitlimitwert ungleich null gibt auch an, dass der Befehl den interaktiven Modus verwendet.
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:saml2", "saml_response": "...", "expiration_time": 1620499962 }
Diese Felder sind mit Ausnahme von expiration_time
für eine erfolgreiche Antwort erforderlich. Wenn expiration_time
weggelassen wird, wird die ausführbare Datei trotzdem ausgeführt.
Die ausführbare Datei muss alle Fehler in executable-output-file
im folgenden JSON-Format anzeigen. Wenn die ausführbare Datei einen Fehler meldet, sind diese Felder alle erforderlich. Die Felder „code“ und „message“ werden von den Clientbibliotheken verwendet, wenn der entsprechende Fehler ausgegeben wird.
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Bei erfolgreicher Ausführung des Befehls werden dieselben Felder zurückgegeben wie bei nicht interaktiven ausführbaren Anmeldedaten.
Die Umgebungsvariablen sind mit den nicht interaktiven ausführbaren Anmeldedaten identisch.
Fügen Sie den Parameter --executable-interactive-timeout-millis
hinzu, um interaktive, ausführbare Datei-basierte Anmeldedaten zu generieren.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--executable-command=EXECUTABLE_COMMAND \
--executable-interactive-timeout-millis=EXECUTABLE_INTERACTIVE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Ersetzen Sie Folgendes:
WORKFORCE_POOL_ID
: die ID des Mitarbeiteridentitätspools.WORKFORCE_PROVIDER_ID
: die ID des Anbieters des Mitarbeiteridentitätspools.EXECUTABLE_COMMAND
: der vollständige Befehl, einschließlich Argumenten, um das Subjekt-Token abzurufen, so formatiert:--executable-command="/path/to/command --foo=bar")
.EXECUTABLE_INTERACTIVE_TIMEOUT
: eine Dauer in Millisekunden, die gewartet wird, bis die ausführbare Datei ausgeführt wird.EXECUTABLE_OUTPUT_FILE
: ein Pfad zu den Anmeldedaten des Drittanbieters, die von der ausführbaren Datei generiert werden. Dies ist nützlich, um die Anmeldedaten im Cache zu speichern. Die Authentifizierungsbibliotheken prüfen zuerst diesen Pfad, bevor die ausführbare Datei ausgeführt wird.WORKFORCE_POOL_USER_PROJECT
: die Projektnummer oder ID, die für das Kontingent und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigungserviceusage.services.use
für dieses Projekt haben.
Durch Ausführen des Befehls wird eine SAML-IdP-Konfigurationsdatei erstellt, die etwa so aussieht:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID<var>/providers/<var>WORKFORCE_PROVIDER_ID</var>",
"subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "<var>WORKFORCE_POOL_USER_PROJECT</var>",
"credential_source": {
"executable": {
"command": "<var>EXECUTABLE_COMMAND</var>",
"interactive_timeout_millis": "<var>EXECUTABLE_INTERACTIVE_TIMEOUT</var>",
"timeout_millis": "<var>EXECUTABLE_TIMEOUT</var>",
"output_file": "<var>EXECUTABLE_OUTPUT_FILE</var>",
}
}
}
Führen Sie zur Anmeldung den folgenden Befehl aus:
gcloud auth login --cred-file=/path/to/config.json
Beachten Sie, dass weder die gcloud CLI noch das bq-Befehlszeilentool Anmeldedatentypen unterstützen, die ausführbare Dateien als Quelle haben.
Für headless-Abläufe verwendet die gcloud CLI automatisch den folgenden Bereich: https://www.googleapis.com/auth/cloud-platform
.
Die gcloud CLI sendet Ihre Anmeldedaten dann transparent an den Endpunkt des Security Token Service, wo sie gegen temporäre Google Cloud-Zugriffstokens ausgetauscht werden.
Sie können jetzt gcloud
-Befehle mithilfe der gcloud CLI ausführen.
Verwenden Sie die Google Cloud-Clientbibliotheken
Wenn Sie eine unterstützte Clientbibliothek verwenden, können Sie die Clientbibliothek so konfigurieren, dass Google-Anmeldedaten automatisch generiert werden. Wir empfehlen Ihnen, nach Möglichkeit Anmeldedaten automatisch zu generieren, damit Sie den Tokenaustauschprozess nicht selbst implementieren müssen.
Die Google Cloud-Clientbibliothek für Workforce-Pools wird in den folgenden Sprachen unterstützt: Node.js, Java, Python, Go und C++ (gRPC).
So verwenden Sie Clientbibliotheken mit diesen Diensten oder Sprachen:
bq-Tool
Verwenden Sie zum Authentifizieren der Workforce Identity-Föderation den Befehl gcloud auth login
:
gcloud auth login --cred-file=FILEPATH.json
Dabei ist FILEPATH
der Pfad zur Konfigurationsdatei für Anmeldedaten.
Unterstützung für die Workforce Identity-Föderation im bq-Tool ist in Version 390.0.0 und höher der Google Cloud CLI verfügbar.
C++
Die meisten Google Cloud-Clientbibliotheken für C++ unterstützen die Workforce Identity-Fö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.42.0 von gRPC erstellen.
Die Cloud Storage-Clientbibliotheken für C++ verwenden die REST API und nicht gRPC. Daher unterstützen sie keine Workforce Identity-Föderation.
auto creds = grpc::GoogleDefaultCredentials();
// Create a channel, stub and make RPC calls (same as in the previous example)
auto channel = grpc::CreateChannel("greeter.googleapis.com", creds);
std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel));
grpc::Status s = stub->sayHello(&context, *request, response);
gcloud
Verwenden Sie zum Authentifizieren der Workforce Identity-Föderation den Befehl gcloud auth login
:
gcloud auth login --cred-file=FILEPATH.json
Ersetzen Sie FILEPATH
durch den Pfad zur Konfigurationsdatei für Anmeldedaten.
Die Workforce Identity-Föderation in der gcloud CLI wird ab Version 392.0.0 der Google Cloud CLI unterstützt.
Go
Cloud-Clientbibliotheken für Go unterstützen die Workforce Identity-Föderation, wenn Sie Version 0.0.0-20211005180243-6b3c2da341f1 oder höher des Moduls golang.org/x/oauth2
verwenden.
import (
"context"
"fmt"
"log"
"cloud.google.com/go/storage"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"io/ioutil"
)
ctx := context.Background()
client, err := storage.NewClient(ctx)
# Explicit initialization can also be used.
# var jsonPath = "/path/to/3p-credentials.json"
# client, err := storage.NewClient(ctx, option.WithCredentialsFile(jsonPath))
if err != nil {
log.Fatal(err)
}
fmt.Println("Buckets:")
it := client.Buckets(ctx, projectID)
for {
battrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(battrs.Name)
}
Java
Cloud-Clientbibliotheken für Java unterstützen die Workforce Identity-Föderation, wenn Sie Version 1.2.0 oder höher des com.google.auth:google-auth-library-oauth2-http
-Artefakts verwenden.
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
GoogleCredentials sourceCredentials = credentials
.createScoped(Arrays.asList("https://www.googleapis.com/auth/devstorage.read_only"));
Storage storageService = StorageOptions.newBuilder().setProjectId("project-id")
.setCredentials(sourceCredentials).build().getService();
Node.js
Cloud-Clientbibliotheken für Node.js unterstützen die Workforce Identity-Föderation, wenn Sie Version 7.10.0 oder höher des google-auth-library
-Pakets verwenden.
Im Gegensatz zu Workload Identity-Pools sind Mitarbeiteridentitätspools einer Organisation und nicht einem Google Cloud-Projekt zugeordnet. Wenn Sie ein GoogleAuth
-Objekt erstellen, müssen Sie eine Projekt-ID angeben. Weitere Informationen finden Sie in der README-Datei für das Paket google-auth-library
.
const auth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/cloud-platform',
// Specify a project ID.
projectId: 'CLOUD_RESOURCE_PROJECT_ID',
});
# API request using Auth library.
const client = await auth.getClient();
const url =
`https://storage.googleapis.com/storage/v1/b?projects=${projectId}`;
const res = await client.request({url});
console.log(res.data);
Python
Cloud-Clientbibliotheken für Python unterstützen die Workforce Identity-Föderation, wenn Sie Version 2.3.0 oder höher des google-auth
-Pakets verwenden.
from google.cloud import storage
import google.auth
credentials, project = google.auth.default(
scopes=['https://www.googleapis.com/auth/devstorage.read_only'])
client = storage.Client(
project="project-id", credentials=credentials)
Im Beispielcode kann der Wert project
None
sein, wenn die Bibliothek die Projekt-ID nicht automatisch erkennen kann. Sie können die Projekt-ID explizit übergeben, wenn Sie eine Dienstinstanz verwenden (wie im Beispiel des Speicherclients), oder sie über die Umgebungsvariable GOOGLE_CLOUD_PROJECT
festlegen.
Weitere Informationen finden Sie im Nutzerhandbuch für das Paket google-auth
.
Verwenden der REST API
Sie können die Google Cloud Security Token Service API aufrufen, um Ihre externen Anmeldedaten gegen Google Cloud-Zugriffstokens auszutauschen. Führen Sie dazu den folgenden Befehl aus:
curl https://sts.googleapis.com/v1/token \
--data-urlencode "audience=//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
--data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \
--data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \
--data-urlencode "subject_token_type=SUBJECT_TOKEN_TYPE" \
--data-urlencode "subject_token=EXTERNAL_SUBJECT_TOKEN" \
--data-urlencode "options={\"userProject\":\"BILLING_PROJECT_NUMBER\"}"
Ersetzen Sie Folgendes:
AUDIENCE
: der vollständige Ressourcenname des Anbieters, der das Subjekt ausstellt.WORKFORCE_POOL_ID
: die ID des Workforce Identity-PoolsWORKFORCE_PROVIDER_ID
: die ID des Anbieters des MitarbeiteridentitätspoolsSUBJECT_TOKEN_TYPE
: Legen Sie dafür Folgendes fest:urn:ietf:params:oauth:token-type:id_token
für OIDC-ID-Tokensurn:ietf:params:oauth:token-type:saml2
für SAML-Assertions
EXTERNAL_SUBJECT_TOKEN
: Das vom IdP ausgestellte Token, das die Identität des Hauptkontos darstellt, für das das Zugriffstoken angefordert wird.Wenn Sie einen OIDC-Anbieter konfiguriert haben, muss das Token im JWT-Format vorliegen.
BILLING_PROJECT_NUMBER
: die Projektnummer oder ID, die für Kontingente und die Abrechnung verwendet wird. Das Hauptkonto muss die Berechtigungserviceusage.services.use
für dieses Projekt haben.
Die Antwort ähnelt dem folgenden Beispiel.
{
"access_token": "ya29.dr.AaT61Tc6Ntv1ktbGkaQ9U_MQfiQw...",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600
}
Sitzungen mithilfe der gcloud CLI verwalten
Die temporären Google Cloud-Tokens, die die gcloud CLI vom Security Token Service-Endpunkt erhält, laufen nach einem bestimmten Zeitintervall ab. Wenn das Token abläuft, prüft die gcloud CLI die von Ihnen angegebene Datei mit den Anmeldedaten und prüft die Gültigkeit der Anmeldedaten, die Sie von Ihrem IdP erhalten haben. Wenn Ihre Anmeldedaten noch gültig sind, ruft die gcloud CLI weiterhin ein neues Google Cloud-Zugriffstoken ab und Ihre aktuelle Sitzung wird ohne Unterbrechung ausgeführt.
Wenn Ihre Anmeldedaten abgelaufen sind, werden keine neuen Google Cloud-Token ausgestellt und alle Aufrufe, die Sie mit diesen Anmeldedaten ausführen, schlagen fehl. An diesem Punkt müssen Sie sich noch einmal authentifizieren.
Sie können Ihre Sitzung mit dem folgenden Befehl beenden:
gcloud auth revoke
gcloud
unterstützt mehrere Nutzersitzungen. Führen Sie den folgenden Befehl aus, um die Liste der Sitzungen abzurufen, einschließlich der derzeit aktiven Sitzung:
gcloud auth list
Die Ausgabe dieses Befehls sieht in etwa so aus:
Credentialed Accounts
ACTIVE ACCOUNT
* bola@example.com
principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID
/subject/kalani@example.com
Führen Sie den folgenden Befehl aus, um zu einer anderen Sitzung zu wechseln und sie als aktiv festzulegen:
gcloud config set account principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_ID
Nächste Schritte
- Nutzer von Identitätsföderation von Arbeitslasten und deren Daten löschen
- Weitere Informationen dazu, welche Google Cloud-Produkte die Mitarbeiteridentitätsföderation unterstützen
- Nutzerzugriff auf die Console (föderiert) einrichten