Bei agentlosen Übertragungen verwendet der Storage Transfer Service standardmäßig einen Dienst-Agenten, um Ihre Daten zwischen Quelle und Ziel zu übertragen. Sie erteilen dem Kundenservicemitarbeiter 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, muss er Berechtigungen für alle an jeder Übertragung beteiligten Buckets haben.
Alternativ können Sie mehrere von Nutzern verwaltete Dienstkonten mit Bucket-Berechtigungen versehen. Diesen nutzerverwalteten Dienstkonten werden Berechtigungen für bestimmte Quell- und Ziel-Buckets gewährt. Außerdem sind sie auf bestimmte Nutzerkonten beschränkt, die den Übertragungsjob erstellen oder auslösen.
Beispielszenarien
Die folgenden Szenarien veranschaulichen verschiedene Berechtigungsoptionen mit dem Dienstmitarbeiter und nutzerverwalteten Dienstkonten.
Maximieren Sie die einzelnen Bereiche, um die Details zu sehen.
Szenario 1: Nur Kundenservicemitarbeiter
In diesem Szenario werden dem Dienst-Agent alle Berechtigungen erteilt.
- 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 oder aus den Buckets A, B, C und D übertragen.
Das funktioniert gut, wenn der Storage Transfer Service-Nutzer ein vertrauenswürdiger Nutzer für die Daten in allen Buckets ist und Übertragungsjobs richtig konfigurieren kann, um zu vermeiden, dass Daten in den falschen Bucket verschoben werden.
Szenario 2: Nur vom Nutzer verwaltete Dienst-Agenten
In diesem Szenario werden alle Berechtigungen nutzerverwalteten Dienstkonten gewährt.
- Dem von Nutzern verwalteten Dienstkonto 1 werden Berechtigungen für die Buckets A und B gewährt.
- Dem von Nutzern verwalteten Dienstkonto 2 werden Berechtigungen für die Buckets C und D gewährt.
Außerdem gilt:
- Nutzer Alpha wird Zugriff auf Dienstkonto 1 gewährt.
- Nutzer Bravo wird Zugriff auf Dienstkonto 2 gewährt.
- Nutzer Charlie wird Zugriff auf die Dienstkonten 1 und 2 gewährt.
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 wechseln.
- Charlie kann nicht zwischen A und C, A und D, B und C oder B und D wechseln.
Szenario 3: Unterschiedliche Berechtigungen
In diesem Szenario enthält Ihr Projekt eine Mischung aus Berechtigungen für Dienst-Agenten und nutzerverwalteten Dienstkontoberechtigungen.
- Dem Dienstkonto werden Schreibberechtigungen für die Buckets A und B gewährt.
- Dem nutzerverwalteten Dienstkonto 1 werden Lesezugriffsberechtigungen für Bucket C und Schreibzugriffsberechtigungen für Bucket D gewährt.
- Nutzer Alpha wird Zugriff auf das vom Nutzer verwaltete Dienstkonto 1 gewährt.
In diesem Fall gilt:
- Jeder Nutzer mit den entsprechenden Berechtigungen zum Erstellen eines Übertragungsjobs kann Daten in Buckets A und B übertragen oder daraus abrufen. Sie können nicht in Bucket C oder D übertragen werden und auch nicht daraus.
- Nutzer Alpha kann Daten in die Buckets A und B übertragen oder daraus abrufen.
- Alpha kann aus Bucket C in Bucket D übertragen.
- Alpha kann nicht 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 gewähren Berechtigungen:
- Damit ein Nutzer auf das vom Nutzer verwaltete Dienstkonto zugreifen kann.
- Der Kundenservicemitarbeiter kann ein Zugriffstoken aus dem vom Nutzer verwalteten Dienstkonto generieren.
- Damit das vom Nutzer verwaltete Dienstkonto auf Ihre Buckets zugreifen kann.
- Der Nutzer erstellt einen Übertragungsjob, in dem das vom Nutzer verwaltete 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 erteilt wurden, schlägt das Erstellen des Übertragungsjobs fehl.
- Der Kundenservicemitarbeiter generiert ein OAuth-Token im Namen des vom Nutzer verwalteten Dienstkontos. Mit dem OAuth-Token kann der 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 noch läuft, wenn das Token abläuft, generiert der Storage Transfer Service ein neues und fährt mit der Übertragung fort.
Berechtigungsdelegierung einrichten
Folgen Sie der Anleitung, um den Zugriff für Kundenservicemitarbeiter auf ein nutzerverwaltetes Dienstkonto zu delegieren.
Voraussetzungen
- Um ein neues nutzerverwaltetes Dienstkonto zu erstellen, benötigen Sie für das Projekt die Rolle „Create Service Accounts“ (
roles/iam.serviceAccountCreator
). - Wenn Sie dem Nutzer und dem Kundenservicemitarbeiter Zugriff auf das vom Nutzer verwaltete Dienstkonto gewähren möchten, benötigen Sie die Rolle „Dienstkontoadministrator“ (
roles/iam.serviceAccountAdmin
) für das vom Nutzer verwaltete Dienstkonto oder für das Projekt.
Nutzerverwaltetes Dienstkonto erstellen oder angeben
Sie können ein neues nutzerverwaltetes Dienstkonto erstellen oder ein vorhandenes verwenden.
Folgen Sie der Anleitung unter Dienstkonten erstellen, um ein nutzerverwaltetes Dienstkonto zu erstellen.
Wenn Sie ein vorhandenes vom Nutzer verwaltetes Dienstkonto verwenden möchten, benötigen Sie die E-Mail-Adresse des Kontos. Diese hat folgendes Format:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Wenn sich das Dienstkonto in einem anderen Projekt als der Übertragungsjob befindet, lesen Sie den Hilfeartikel 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 ihm die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser
) zu. Das Nutzerkonto ist das Konto, mit dem der Übertragungsjob erstellt oder aktualisiert 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 Berechtigungen aus.
Klicken Sie auf
Zugriff erlauben.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
Wenn Sie einem Hauptkonto eine Rolle zuweisen möchten, führen Sie den Befehl add-iam-policy-binding
aus:
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.iam.gserviceaccount.com
. - PRINCIPAL: Die E-Mail-Adresse des Nutzers, der den Übertragungsjob ausführt, im Format
user:name@example.com
.
Zugriff für den Kundenservicemitarbeiter gewähren
Damit der Kundenservicemitarbeiter ein Zugriffstoken aus dem nutzerverwalteten Dienstkonto generieren kann, gewähren Sie ihm Zugriff auf das nutzerverwaltete Dienstkonto und weisen Sie ihm die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator
) zu.
Sie benötigen die E-Mail-Adresse des Kundenservicemitarbeiters, um Zugriff zu gewähren. So finden Sie die E-Mail-Adresse des Dienst-Agents:
Rufen Sie die Referenzseite
googleServiceAccounts.get
auf.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
accountEmail
zurückgegeben. Es verwendet das Formatproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.
So gewähren Sie dem Kundenservicemitarbeiter Zugriff auf das vom Nutzer verwaltete 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 Berechtigungen aus.
Klicken Sie auf
Zugriff erlauben.Geben Sie die E-Mail-Adresse des Kundenservicemitarbeiters 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
Wenn Sie einem Hauptkonto eine Rolle zuweisen möchten, führen Sie den Befehl add-iam-policy-binding
aus:
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.iam.gserviceaccount.com
. - SERVICE_AGENT_EMAIL: Die E-Mail-Adresse des Kundenservicemitarbeiters.
Dem nutzerverwalteten Dienstkonto Bucket-Berechtigungen erteilen
Gewähren Sie die in Berechtigungen für von Google verwaltete Dienst-Agents aufgeführten Berechtigungen dem nutzerverwalteten Dienstkonto und nicht dem Dienst-Agent.
Übertragungsauftrag 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 unter Übertragung erstellen. Bevor Sie den Übertragungsjob abschließen:
- Suchen Sie auf der Seite Einstellungen auswählen den Abschnitt Typ des Dienstkontos.
- Wählen Sie Nutzerverwaltetes Dienstkonto aus.
- Geben Sie die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos im Format
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
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.
Der Wert muss das Format projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID
haben.
Im String sind entweder die E-Mail-Adresse des Dienstkontos (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
) oder die eindeutige ID (123456789012345678901
) zulässig. Das Platzhalterzeichen -
ist erforderlich. Es durch eine Projekt-ID zu ersetzen ist ungültig.
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": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
...
}
}