Das Delegieren von Dienst-Agent-Berechtigungen an ein nutzerverwaltetes Dienstkonto ist eine optionale Konfiguration für Organisationen, die eine Zugriffssteuerung für Buckets pro Nutzer benötigen.
Bei agentenlosen Übertragungen verwendet der Storage Transfer Service standardmäßig einen Dienst-Agent, um Ihre Daten zwischen Quelle und Ziel zu übertragen. Sie gewähren dem Dienst-Agenten Berechtigungen für den Zugriff auf Ihre Cloud Storage-Buckets.
Da für alle Übertragungen innerhalb eines Projekts derselbe Storage Transfer Service-Dienst-Agent verwendet wird, hat er zwangsläufig Berechtigungen für alle Buckets, die an jeder Übertragung innerhalb dieses Projekts beteiligt sind.
Als optionale Alternative können Sie Bucket-Berechtigungen stattdessen mehreren nutzerverwalteten Dienstkonten zuweisen. Diesen nutzerverwalteten Dienstkonten werden Berechtigungen für bestimmte Quell- und Ziel-Buckets gewährt. Außerdem sind sie auf bestimmte Nutzerkonten beschränkt (die Konten, die den Übertragungsjob erstellen oder auslösen).
Beispielszenarien
In den folgenden Szenarien werden verschiedene Berechtigungsoptionen mit dem Dienst-Agent und nutzerverwalteten Dienstkonten veranschaulicht.
Maximieren Sie die einzelnen Bereiche, um sich die Details anzusehen.
Szenario 1: Nur Dienst-Agent
In diesem Szenario werden dem Dienst-Agenten alle Berechtigungen gewährt.
- Dem Dienst-Agent werden Schreibberechtigungen für die Buckets A, B, C und D gewährt.
Jeder Nutzer mit den entsprechenden Berechtigungen zum Erstellen eines Übertragungsjobs kann Daten in die Buckets A, B, C und D oder aus diesen Buckets übertragen.
Dies funktioniert gut, wenn der Storage Transfer Service-Nutzer ein vertrauenswürdiger Nutzer für die Daten in allen Buckets ist und Übertragungsjobs korrekt konfigurieren kann, um zu vermeiden, dass Daten in den falschen Bucket oder aus dem falschen Bucket verschoben werden.
Szenario 2: Nur vom Nutzer verwaltete Dienst-Agents
In diesem Szenario werden alle Berechtigungen nutzerverwalteten Dienstkonten gewährt.
- Dem nutzerverwalteten Dienstkonto 1 werden Berechtigungen für die Buckets A und B gewährt.
- Dem nutzerverwalteten Dienstkonto 2 werden Berechtigungen für die Buckets C und D gewährt.
Außerdem:
- Nutzer Alpha erhält Zugriff auf Dienstkonto 1.
- Nutzer Bravo erhält Zugriff auf Dienstkonto 2.
- Nutzer Charlie erhält Zugriff auf die Dienstkonten 1 und 2.
In diesem Fall gilt:
- Alpha kann nur zwischen den Buckets A und B übertragen.
- Bravo kann nur zwischen den Buckets C und D übertragen.
- Charlie kann nur zwischen den Buckets A und B sowie zwischen C und D übertragen.
- Charlie kann nicht zwischen A und C, A und D, B und C oder B und D wechseln.
Szenario 3: Gemischte Berechtigungen
In diesem Szenario enthält Ihr Projekt eine Mischung aus Dienst-Agent-Berechtigungen und Berechtigungen für nutzerverwaltete Dienstkonten.
- Dem Dienst-Agent werden Schreibberechtigungen für die Buckets A und B gewährt.
- Dem nutzerverwalteten Dienstkonto 1 werden Leseberechtigungen für Bucket C und Schreibberechtigungen für Bucket D gewährt.
- Nutzer Alpha erhält Zugriff auf das vom Nutzer verwaltete Dienstkonto 1.
In diesem Fall gilt:
- Jeder Nutzer mit den entsprechenden Berechtigungen zum Erstellen eines Übertragungsjobs kann Daten in die Buckets A und B oder aus diesen Buckets übertragen. Sie können nicht in Bucket C oder D oder aus Bucket C oder D übertragen werden.
- Nutzer Alpha kann Daten in die Buckets A und B oder aus diesen Buckets übertragen.
- Alpha kann Daten aus Bucket C in Bucket D übertragen.
- Alpha kann keine Daten aus Bucket C in Bucket A oder B übertragen.
Implementierungsübersicht
Die Implementierung sieht so aus:
- Sie erstellen ein nutzerverwaltetes Dienstkonto oder verwenden ein vorhandenes.
- Sie erteilen Berechtigungen:
- Damit ein Nutzer auf das vom Nutzer verwaltete Dienstkonto zugreifen kann.
- Damit der Dienst-Agent ein Zugriffstoken aus dem vom Nutzer verwalteten Dienstkonto generieren kann.
- Damit das nutzerverwaltete Dienstkonto auf Ihre Buckets zugreifen kann.
- Der Nutzer erstellt einen Übertragungsjob, in dem das nutzerverwaltete Dienstkonto angegeben ist.
- Der Storage Transfer Service prüft, ob der Nutzer die richtigen Berechtigungen für das Dienstkonto hat. Wenn die richtigen Berechtigungen nicht gewährt wurden, schlägt die Erstellung des Übertragungsjobs fehl.
- Der Dienst-Agent generiert ein OAuth-Token im Namen des vom Nutzer verwalteten Dienstkontos. Mit dem OAuth-Token kann Storage Transfer Service auf die an der Übertragung beteiligten Buckets zugreifen.
- Der Übertragungsjob wird ausgeführt.
- Das OAuth-Token ist kurzlebig und läuft ab. Wenn der Übertragungsjob ausgeführt wird, wenn das Token abläuft, generiert der Storage Transfer Service ein neues Token und setzt die Übertragung fort.
Berechtigungsdelegierung einrichten
Folgen Sie der Anleitung, um den Zugriff des Dienst-Agents an ein nutzerverwaltetes Dienstkonto zu delegieren.
Voraussetzungen
- Zum Erstellen oder Verwalten von Übertragungsjobs benötigt Ihr Nutzerkonto Storage Transfer Service-Projektberechtigungen. Weitere Informationen finden Sie unter Erforderliche Nutzerberechtigungen.
- Zum Erstellen eines neuen nutzerverwalteten Dienstkontos benötigen Sie die Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) für das Projekt. - Wenn Sie dem Nutzer und dem Dienst-Agent Zugriff auf das nutzerverwaltete Dienstkonto gewähren möchten, benötigen Sie die Rolle „Dienstkontoadministrator“ (
roles/iam.serviceAccountAdmin) für das nutzerverwaltete Dienstkonto oder für das Projekt.
Nutzerverwaltetes Dienstkonto erstellen oder identifizieren
Sie können ein neues nutzerverwaltetes Dienstkonto erstellen oder ein vorhandenes verwenden.
Folgen Sie der Anleitung unter Dienstkonten erstellen, um ein vom Nutzer verwaltetes Dienstkonto zu erstellen.
Wenn Sie ein vorhandenes, nutzerverwaltetes Dienstkonto verwenden möchten, benötigen Sie die zugehörige E-Mail-Adresse im folgenden Format:
SERVICE_ACCOUNT_NAME@PROJECT_ID.Wenn Sie die eindeutige ID (
uniqueId) des Dienstkontos benötigen, führen Siegcloud iam service-accounts describe SERVICE_ACCOUNT_EMAIL --format="value(uniqueId)"aus oder rufen Sie die Spalte Eindeutige ID auf der Seite Dienstkonten in derGoogle Cloud Console auf.
Wenn sich das Dienstkonto in einem anderen Projekt als der Übertragungsjob befindet, finden Sie weitere Informationen unter Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können.
Nutzer Zugriff gewähren
Gewähren Sie dem Nutzerkonto Zugriff auf das neue nutzerverwaltete Dienstkonto und weisen Sie die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) zu. Das Nutzerkonto ist das Konto, das zum Erstellen oder Aktualisieren des Übertragungsjobs verwendet wird.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Wählen Sie ein Projekt aus.
Klicken Sie auf die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos.
Wählen Sie den Tab Hauptkonten mit Zugriff aus.
Klicken Sie auf Zugriffsrechte erteilen.
Geben Sie die E‑Mail-Adresse des Nutzers ein. Beispiel:
user1@example.com.Wählen Sie in der Drop-down-Liste Rolle die Option Dienstkontonutzer aus.
Klicken Sie auf Speichern. Dem Hauptkonto wird die Rolle für das Dienstkonto zugewiesen.
gcloud
Führen Sie den Befehl add-iam-policy-binding aus, um einem Hauptkonto eine Rolle zuzuweisen:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=PRINCIPAL --role=roles/iam.serviceAccountUser
Ersetzen Sie die folgenden Variablen:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos im Format
SA_NAME@PROJECT_ID.. - PRINCIPAL: Die E-Mail-Adresse des Nutzers, der den Übertragungsjob ausführt, im Format
user:name@example.com.
Dem Dienst-Agent Zugriff gewähren
Damit der Dienst-Agent ein Zugriffstoken aus dem vom Nutzer verwalteten Dienstkonto generieren kann, gewähren Sie dem Dienst-Agent Zugriff auf das vom Nutzer verwaltete Dienstkonto und weisen Sie ihm die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator) zu.
Sie benötigen die E-Mail-Adresse des Dienst-Agents, um Zugriff zu gewähren. So finden Sie die E-Mail-Adresse des Dienst-Agents:
Rufen Sie die Referenzseite
googleServiceAccounts.getauf.Es wird ein interaktives Steuerfeld mit dem Titel Diese Methode testen geöffnet.
Geben Sie im Steuerfeld unter Anfrageparameter Ihre Projekt-ID ein. Das hier angegebene Projekt muss das Projekt sein, das Sie zum Verwalten des Storage Transfer Service verwenden.
Klicken Sie auf Ausführen.
Die E-Mail-Adresse des Dienst-Agents wird als Wert von
accountEmailzurückgegeben. Das Format istproject-PROJECT_NUMBER@storage-transfer-service..
So gewähren Sie dem Dienst-Agent Zugriff auf das nutzerverwaltete Dienstkonto:
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Wählen Sie ein Projekt aus.
Klicken Sie auf die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos.
Wählen Sie den Tab Hauptkonten mit Zugriff aus.
Klicken Sie auf Zugriffsrechte erteilen.
Geben Sie die E-Mail-Adresse des Dienst-Agents ein.
Wählen Sie in der Drop-down-Liste Rolle die Option Ersteller von Dienstkonto-Tokens aus.
Klicken Sie auf Speichern. Dem Hauptkonto wird die Rolle für das Dienstkonto zugewiesen.
gcloud
Führen Sie den Befehl add-iam-policy-binding aus, um einem Hauptkonto eine Rolle zuzuweisen:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator
Ersetzen Sie die folgenden Variablen:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos im Format
SA_NAME@PROJECT_ID.. - SERVICE_AGENT_EMAIL: Die E-Mail-Adresse des Dienst-Agents.
Bucket-Berechtigungen für das nutzerverwaltete Dienstkonto gewähren
Gewähren Sie dem nutzerverwalteten Dienstkonto anstelle des Dienst-Agents die Berechtigungen, die unter Zugriff auf eine Quelle konfigurieren: Cloud Storage und Zugriff auf ein Ziel konfigurieren: Cloud Storage aufgeführt sind.
Übertragungsjob mit einem vom Nutzer verwalteten Dienstkonto erstellen
Nachdem Sie die richtigen Berechtigungen gewährt haben, können Sie das nutzerverwaltete Dienstkonto beim Erstellen eines neuen Übertragungsjobs angeben.
Google Cloud Console
Folgen Sie der Anleitung zum Erstellen einer Übertragung. Bevor Sie den Übertragungsjob abschließen:
- Suchen Sie auf der Seite Einstellungen auswählen den Abschnitt Dienstkontotyp.
- Wählen Sie Nutzerverwaltetes Dienstkonto aus.
- Geben Sie die E-Mail-Adresse des nutzerverwalteten Dienstkontos im Format
SERVICE_ACCOUNT_NAME@PROJECT_ID.ein. - Klicken Sie auf Erstellen, um die Übertragung zu erstellen.
REST API
Geben Sie das vom Nutzer verwaltete Dienstkonto als Wert des Felds serviceAccount in der transferJobs.create-Anfrage an.
Es wird entweder die E-Mail-Adresse des Dienstkontos (SERVICE_ACCOUNT_NAME@PROJECT_ID.) oder die eindeutige ID (123456789012345678901) akzeptiert.
Beispiel:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.",
"transferSpec": {
...
}
}
Eindeutige ID eines Dienstkontos abrufen
Wenn Sie den föderierten Zugriff auf AWS S3- oder Microsoft Azure-Speicher konfigurieren oder ein Dienstkonto in REST API-Anfragen angeben, benötigen Sie möglicherweise die eindeutige ID Ihres nutzerverwalteten Dienstkontos.
So rufen Sie die uniqueId ab:
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Klicken Sie auf die E-Mail-Adresse des Dienstkontos.
Suchen Sie auf dem Tab Details die eindeutige ID.
gcloud-CLI
Verwenden Sie den folgenden Google Cloud CLI-Befehl:
gcloud iam service-accounts describe USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
--format='value(uniqueId)'