Auf dieser Seite wird erläutert, wie Sie mit Zugriffsgrenzen für Anmeldedaten ein OAuth 2.0-Zugriffstoken mit herabgestuften Cloud Storage-Berechtigungen erstellen.
So erstellen Sie ein Token mit herabgestuften Berechtigungen:
- Weisen Sie einem Nutzer- oder Dienstkonto die entsprechenden IAM-Rollen zu.
- Definieren Sie eine Zugriffsgrenze für Anmeldedaten, die eine Obergrenze für die Berechtigungen festlegt, die dem Nutzer oder Dienstkonto zur Verfügung stehen.
- Erstellen Sie ein OAuth 2.0-Zugriffstoken für das Nutzer- oder Dienstkonto.
- Tauschen Sie das OAuth 2.0-Zugriffstoken gegen ein neues Token aus, das die Zugriffsgrenze für Anmeldedaten berücksichtigt.
Sie können dann mit dem neuen herabgestuften OAuth 2.0-Zugriffstoken Anfragen an Cloud Storage authentifizieren.
Hinweise
Achten Sie vor der Verwendung einer Zugriffsgrenze für Anmeldedaten darauf, dass Sie diese Anforderungen erfüllen:
Sie müssen die Berechtigungen nur für Cloud Storage herabstufen, nicht für andereGoogle Cloud -Dienste.
Wenn Sie Berechtigungen für zusätzliche Google Cloud-Dienste einschränken müssen, können Sie mehrere Dienstkonten erstellen und jedem Dienstkonto einen anderen Rollensatz zuweisen.
Sie können OAuth 2.0-Zugriffstokens zur Authentifizierung verwenden. Andere Arten von kurzlebigen Anmeldedaten unterstützen keine Zugriffsgrenzen für Anmeldedaten.
Außerdem müssen Sie die erforderlichen APIs aktivieren:
-
Enable the IAM and Security Token Service APIs.
IAM-Rollen zuweisen
Eine Zugriffsgrenze für Anmeldedaten legt eine Obergrenze für die verfügbaren Berechtigungen für eine Ressource fest. Es kann Berechtigungen von einem Hauptkonto eingrenzen, aber es kann keine Berechtigungen hinzufügen, die das Hauptkonto nicht bereits hat.
Daher müssen Sie dem Hauptkonto auch Rollen zuweisen, die die benötigten Berechtigungen bereitstellen, entweder in einem Cloud Storage-Bucket oder auf einer übergeordneten Ressource wie dem Projekt.
Nehmen wir beispielsweise an, Sie möchten herabgestufte, kurzlebige Anmeldedaten erstellen, mit denen ein Dienstkonto Objekte in einem Bucket erstellen kann:
- Sie müssen dem Dienstkonto eine Rolle mit der Berechtigung
storage.objects.create
zuweisen, beispielsweise die Rolle "Storage Object-Ersteller" (roles/storage.objectCreator
). Die Zugriffsgrenze für Anmeldedaten muss diese Berechtigung ebenfalls enthalten. - Sie können auch eine Rolle zuweisen, die mehr Berechtigungen enthält, beispielsweise die Rolle „Storage Object-Administrator“ (
roles/storage.objectAdmin
). Das Dienstkonto kann nur die Berechtigungen verwenden, die sowohl in der Rollenzuweisung als auch in der Zugriffsgrenze für Anmeldedaten angezeigt werden.
Informationen zu vordefinierten Rollen für Cloud Storage finden Sie unter Cloud Storage-Rollen.
Zugriffsgrenze für Anmeldedaten definieren
Eine Zugriffsgrenze für Anmeldedaten ist ein Objekt, das eine Liste von Zugriffsbegrenzungsregeln enthält. Die Regeln bestehen aus Parametern, die die Obergrenze der Berechtigungen festlegen, die dem Nutzer oder Dienstkonto zur Verfügung stehen. Wenn Sie eine Zugriffsgrenze für Anmeldedaten definieren möchten, erstellen Sie ein JSON-Objekt, in dem die Zugriffsbegrenzungsregeln und ihre Parameter aufgeführt sind.
Das folgende Beispiel zeigt eine Zugriffsgrenze für Anmeldedaten:
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:ROLE_ID"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/BUCKET_NAME"
"availabilityCondition": {
"expression" : "CONDITION"
}
]
}
}
Ersetzen Sie Folgendes:
ROLE_ID
: Die ID einer vordefinierten oder benutzerdefinierten Rolle, die die Obergrenze für die verfügbaren Berechtigungen für die Ressource definiert. Beispiel:roles/storage.objectViewer
. Wenn Sie mehrere Rollen angeben möchten, fügen Sie eine neue Zeile mit dem PräfixinRole:
und der Rollen-ID hinzu. Nur die Berechtigungen in den angegebenen Rollen sind verfügbar.BUCKET_NAME
: Der Name des Cloud Storage-Bucket, auf den sich die Regel bezieht.CONDITION
: Optional. Ein Bedingungsausdruck, der die Cloud Storage-Objekte angibt, in denen Berechtigungen verfügbar sind. Die folgende Bedingung macht beispielsweise Berechtigungen für Objekte verfügbar, deren Name mitcustomer-a
beginnt:resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a')
Weitere Informationen zum Erstellen und Anpassen von Zugriffsgrenzen für Anmeldedaten finden Sie unter Komponenten einer Zugriffsgrenze für Anmeldedaten.
Beispiele für potenzielle Anwendungsfälle für Zugriffsgrenzen für Anmeldedaten finden Sie unter Beispiele für Zugriffsgrenzen für Anmeldedaten.
OAuth-2.0-Zugriffstoken erstellen
Bevor Sie herabgestufte, kurzlebige Anmeldedaten erstellen, müssen Sie ein normales OAuth 2.0-Zugriffstoken erstellen. Sie können dann die normalen Anmeldedaten gegen herabgestufte der Anmeldedaten austauschen. Verwenden Sie beim Erstellen des Zugriffstokens den OAuth 2.0-Bereich https://www.googleapis.com/auth/cloud-platform
.
Zum Erstellen eines Zugriffstokens für ein Dienstkonto schließen Sie den OAuth 2.0-Ablauf von Server zu Server ab. Sie können auch die Service Account Credentials API zum Erstellen eines OAuth 2.0-Zugriffstokens verwenden.
Weitere Informationen zum Erstellen eines Zugriffstokens für einen Nutzer finden Sie unter OAuth 2.0-Zugriffstokens abrufen. Sie können auch mit OAuth 2.0 Playground ein Zugriffstoken für Ihr eigenes Google-Konto erstellen.
OAuth-2.0-Zugriffstoken austauschen
Nachdem Sie ein OAuth-2.0-Zugriffstoken erstellt haben, können Sie das Zugriffstoken gegen ein neues Token austauschen, das die Zugriffsgrenze für Anmeldedaten berücksichtigt. Dieser Vorgang umfasst in der Regel einen Token-Broker und einen Token-Nutzer:
Der Token-Broker ist für die Definition der Zugriffsgrenze für Anmeldedaten und den Austausch eines Zugriffstokens gegen ein herabgestuftes Token verantwortlich.
Der Token-Broker kann eine unterstützte Authentifizierungsbibliothek verwenden, um Zugriffstokens automatisch auszutauschen. Er kann auch den Security Token Service aufrufen, um Tokens manuell auszutauschen.
Der Token-Nutzer fordert ein herabgestuftes Zugriffstoken vom Token-Broker an und verwendet dann das herabgestufte Zugriffstoken, um eine weitere Aktion auszuführen.
Der Token-Nutzer kann eine unterstützte Authentifizierungsbibliothek verwenden, um Zugriffstokens automatisch zu aktualisieren, bevor sie ablaufen. Alternativ können er Tokens manuell aktualisieren oder Tokens ablaufen lassen, ohne sie zu aktualisieren.
Es gibt zwei Möglichkeiten, das Zugriffstoken gegen ein herabgestuftes Token einzutauschen:
Clientseitiger Tokenaustausch (empfohlen): Clients rufen kryptografische Materialien vom Security Token Service API-Server ab. Mit den kryptografischen Materialien können Clients für einen bestimmten Zeitraum (z. B. 1 Stunde) unabhängig auf der Clientseite herabgestufte Tokens mit unterschiedlichen Regeln für die Zugriffsgrenze für Anmeldedaten generieren. Dieser Ansatz verringert die Latenz und verbessert die Effizienz, insbesondere für Clients, die häufige Aktualisierungen der Regeln für die Credential Access Boundary erfordern. Außerdem ist es effizienter für Anwendungen, die viele eindeutige Tokens mit eingeschränktem Umfang generieren müssen. Dies ist der empfohlene Ansatz, da er eine bessere Leistung, Skalierbarkeit und Kompatibilität mit zukünftigen Funktionen bietet.
Serverseitiger Token-Austausch: Clients fordern immer dann ein neues herabgestuftes Token vom Security Token Service API-Server an, wenn sich eine Regel für die Credential Access Boundary ändert. Dieser Ansatz ist einfach, erfordert jedoch für jede Anfrage für ein eingeschränktes Token einen Roundtrip zum Security Token Service-API-Server. Dieser Ansatz wird nur für Kunden empfohlen, die eine Clientbibliothek benötigen, die keinen clientseitigen Tausch von Tokens unterstützt, da für jede Anfrage für ein Token mit eingeschränktem Umfang ein Roundtrip zur Security Token Service API erforderlich ist.
Clientseitiger Tokenaustausch
Wenn Sie den Token-Broker und den Token-Nutzer mit der folgenden Sprache erstellen, können Sie Tokens mithilfe der Authentifizierungsbibliothek von Google automatisch über den clientseitigen Ansatz austauschen und aktualisieren.
Java
Bei Java können Sie Tokens automatisch mit Version 1.32.1 oder höher des com.google.auth:google-auth-library-cab-token-generator
-Artefakts austauschen und aktualisieren.
Führen Sie den folgenden Maven-Befehl in Ihrem Anwendungsverzeichnis aus, um die Version des Artefakts zu prüfen:
mvn dependency:list -DincludeArtifactIds=google-auth-library-cab-token-generator
Das folgende Beispiel zeigt, wie ein Token-Broker herabgestufte Tokens generieren kann:
Das folgende Beispiel zeigt, wie ein Token-Nutzer einen Aktualisierungs-Handler verwenden kann, um herabgestufte Tokens automatisch abzurufen und zu aktualisieren:
Serverseitiger Tokenaustausch
In diesem Abschnitt werden die folgenden Methoden beschrieben, mit denen Sie Tokens über den serverseitigen Ansatz austauschen können:
- Zugriffstoken automatisch austauschen und aktualisieren
- Zugriffstoken manuell austauschen und aktualisieren
Zugriffstoken automatisch austauschen und aktualisieren (serverseitig)
Wenn Sie den Token-Broker und den Token-Nutzer mit einer der folgenden Sprachen erstellen, können Sie Tokens mithilfe der Authentifizierungsbibliothek von Google automatisch austauschen und aktualisieren:
Go
Bei Go können Sie Tokens mit Version v0.0.0-20210819190943-2bc19b11175f oder höher automatisch dem Versionspaket golang.org/x/oauth2
austauschen und aktualisieren.
Führen Sie den folgenden Befehl in Ihrem Anwendungsverzeichnis aus, um die Version Ihres Pakets zu prüfen:
go list -m golang.org/x/oauth2
Das folgende Beispiel zeigt, wie ein Token-Broker herabgestufte Tokens generieren kann:
Das folgende Beispiel zeigt, wie ein Token-Nutzer einen Aktualisierungs-Handler verwenden kann, um herabgestufte Tokens automatisch abzurufen und zu aktualisieren:
Java
Bei Java können Sie Tokens automatisch mit Version 1.1.0 oder höher des com.google.auth:google-auth-library-oauth2-http
-Artefakts austauschen und aktualisieren.
Führen Sie den folgenden Maven-Befehl in Ihrem Anwendungsverzeichnis aus, um die Version des Artefakts zu prüfen:
mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
Das folgende Beispiel zeigt, wie ein Token-Broker herabgestufte Tokens generieren kann:
Das folgende Beispiel zeigt, wie ein Token-Nutzer einen Aktualisierungs-Handler verwenden kann, um herabgestufte Tokens automatisch abzurufen und zu aktualisieren:
Node.js
Bei Node.js können Sie Tokens mit Version 7.9.0 oder höher des google-auth-library
-Pakets automatisch austauschen und aktualisieren.
Führen Sie den folgenden Befehl in Ihrem Anwendungsverzeichnis aus, um die Version Ihres Pakets zu prüfen:
npm list google-auth-library
Das folgende Beispiel zeigt, wie ein Token-Broker herabgestufte Tokens generieren kann:
Das folgende Beispiel zeigt, wie ein Token-Nutzer einen Aktualisierungs-Handler bereitstellen kann, der herabgestufte Tokens automatisch abruft und aktualisiert:
Python
Bei Python können Sie Tokens mit Version 2.0.0 oder höher des google-auth
-Pakets automatisch austauschen und aktualisieren.
Führen Sie den folgenden Befehl in der Umgebung aus, in der das Paket installiert ist, um die Paketversion zu prüfen:
pip show google-auth
Das folgende Beispiel zeigt, wie ein Token-Broker herabgestufte Tokens generieren kann:
Das folgende Beispiel zeigt, wie ein Token-Nutzer einen Aktualisierungs-Handler bereitstellen kann, der herabgestufte Tokens automatisch abruft und aktualisiert:
Zugriffstoken manuell austauschen und aktualisieren
Ein Token-Broker kann die Security Token Service API verwenden, um ein Zugriffstoken gegen ein herabgestuftes Zugriffstoken auszutauschen. Es kann dann das herabgestufte Token einem Token-Nutzer bereitstellen.
Tauschen Sie das Zugriffstoken mit dieser HTTP-Methode und URL aus:
POST https://sts.googleapis.com/v1/token
Setzen Sie den Header Content-Type
in der Anfrage auf application/x-www-form-urlencoded
. Fügen Sie im Anfragetext diese Felder ein:
Felder | |
---|---|
grant_type |
Verwenden Sie den Wert |
options |
Eine Zugriffsgrenze für Anmeldedaten im JSON-Format, die mit Prozentcodierung codiert ist. |
requested_token_type |
Verwenden Sie den Wert |
subject_token |
Das OAuth 2.0-Zugriffstoken, das Sie austauschen möchten. |
subject_token_type |
Verwenden Sie den Wert |
Die Antwort ist ein JSON-Objekt mit diesen Feldern:
Felder | |
---|---|
access_token |
Ein herabgestuftes OAuth 2.0-Zugriffstoken, das die Zugriffsgrenze für Anmeldedaten berücksichtigt. |
expires_in |
Die Zeit in Sekunden, bis das herabgestufte Zugriffstoken abläuft. Dieses Feld ist nur enthalten, wenn das ursprüngliche Zugriffstoken ein Dienstkonto darstellt. Wenn dieses Feld nicht vorhanden ist, läuft das herabgestufte Zugriffstoken genauso lange ab wie das ursprüngliche Zugriffstoken. |
issued_token_type |
Enthält den Wert |
token_type |
Enthält den Wert |
Wenn beispielsweise eine Zugriffsgrenze für Anmeldedaten im JSON-Format in der Datei ./access-boundary.json
gespeichert ist, können Sie mit diesem curl
-Befehl das Zugriffstoken austauschen. Ersetzen Sie original-token
durch das ursprüngliche Zugriffstoken:
curl -H "Content-Type:application/x-www-form-urlencoded" \ -X POST \ https://sts.googleapis.com/v1/token \ -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange&subject_token_type=urn:ietf:params:oauth:token-type:access_token&requested_token_type=urn:ietf:params:oauth:token-type:access_token&subject_token=original-token" \ --data-urlencode "options=$(cat ./access-boundary.json)"
Die Antwort ähnelt diesem Beispiel:
{
"access_token": "ya29.dr.AbCDeFg-123456...",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600
}
Wenn ein Token-Nutzer ein herabgestuftes Token anfordert, antwortet der Token-Broker sowohl mit dem herabgestuften Token als auch mit der Anzahl der Sekunden bis zum Ablauf. Wenn das Token abgelaufen ist, lehnt der Server die Anfrage ab. Zum Aktualisieren des herabgestuften Tokens kann der Nutzer ein herabgestuftes Token vom Broker anfordern, bevor das vorhandene Token abläuft.
Nächste Schritte
- Zugriffssteuerung für Cloud Storage.
- Dienstkonto mit kurzlebigen Anmeldedaten erstellen.
- Erstellen Sie ein OAuth 2.0-Zugriffstoken für ein Dienstkonto mit einer der folgenden Methoden:
- OAuth 2.0-Zugriffstoken für einen Nutzer erstellen.
- Siehe Berechtigungen in jeder vordefinierten Rolle.
- Benutzerdefinierte Rollen.