Bei agentenlosen Übertragungen verwendet der Storage Transfer Service standardmäßig einen Dienst-Agent, um Ihre Daten zwischen der Quelle und dem Ziel zu übertragen. Sie erteilen dem Dienst-Agent Berechtigungen für den Zugriff auf Ihre Cloud Storage-Buckets.
Da derselbe Storage Transfer Service-Dienst-Agent für alle Übertragungen in einem Projekt verwendet wird, hat er notwendigerweise Berechtigungen für alle Buckets, die an jeder Übertragung beteiligt sind.
Alternativ können Sie Bucket-Berechtigungen auch mehreren vom Nutzer verwalteten Dienstkonten zuweisen. Diesen vom Nutzer verwalteten Dienstkonten werden Berechtigungen für bestimmte Quell- und Ziel-Buckets erteilt. Außerdem sind sie auf bestimmte Nutzerkonten beschränkt (die Konten, mit denen der Übertragungsjob erstellt oder ausgelöst wird).
Beispielszenarien
In den folgenden Szenarien werden verschiedene Berechtigungsoptionen mit dem Dienst-Agent und vom Nutzer verwalteten Dienstkonten veranschaulicht.
Maximieren Sie jeden Abschnitt, um die Details zu sehen.
Szenario 1: Nur Dienst-Agent
In diesem Szenario werden alle Berechtigungen dem Dienst-Agent erteilt.
- Der Dienst-Agent erhält Schreibberechtigungen für die Buckets A, B, C, und D.
Jeder Nutzer mit den entsprechenden Berechtigungen zum Erstellen eines Übertragungsjobs kann Daten in die Buckets A, B, C und D übertragen oder daraus abrufen.
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 Dienstkonten
In diesem Szenario werden alle Berechtigungen vom Nutzer verwalteten Dienstkonten erteilt.
- Das vom Nutzer verwaltete Dienstkonto 1 erhält Berechtigungen für die Buckets A und B.
- Das vom Nutzer verwaltete Dienstkonto 2 erhält Berechtigungen für die Buckets C und D.
Außerdem gilt:
- 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 und zwischen C und D, nur übertragen.
- Charlie kann nicht zwischen A und C, A und D, B und C, oder B und D übertragen.
Szenario 3: Unterschiedliche Berechtigungen
In diesem Szenario enthält Ihr Projekt eine Mischung aus Dienst-Agent-Berechtigungen und Berechtigungen für vom Nutzer verwaltete Dienstkonten.
- Der Dienst-Agent erhält Schreibberechtigungen für die Buckets A und B.
- Das vom Nutzer verwaltete Dienstkonto 1 erhält Leseberechtigungen für Bucket C und Schreibberechtigungen für Bucket D.
- 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 übertragen oder daraus abrufen. Daten können nicht in oder aus Bucket C oder D übertragen oder daraus abgerufen werden.
- Nutzer Alpha kann Daten in die Buckets A und B übertragen oder daraus abrufen.
- Alpha kann Daten aus Bucket C in Bucket D übertragen.
- Alpha kann nicht Daten aus Bucket C in Bucket A oder B übertragen.
Implementierungsübersicht
Die Implementierung erfolgt so:
- Sie erstellen ein vom Nutzer verwaltetes Dienstkonto oder verwenden ein vorhandenes.
- Sie erteilen Berechtigungen:
- Für einen Nutzer, um auf das vom Nutzer verwaltete Dienstkonto zuzugreifen.
- Für den Dienst-Agent, um ein Zugriffstoken vom vom Nutzer verwalteten Dienstkonto zu generieren.
- Für das vom Nutzer verwaltete Dienstkonto, um auf Ihre Buckets zuzugreifen.
- Der Nutzer erstellt einen Übertragungsjob, in dem das vom Nutzer verwaltete Dienstkonto angegeben wird.
- 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 die Erstellung des Übertragungsjobs fehl.
- Der Dienst-Agent generiert ein OAuth-Token im Namen des vom Nutzer verwalteten Dienstkontos. Mit dem OAuth-Token kann der Storage Transfer Service auf die Buckets zugreifen, die an der Übertragung beteiligt sind.
- Der Übertragungsjob wird ausgeführt.
- Das OAuth-Token ist kurzlebig und läuft ab. Wenn der Übertragungsjob noch 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 vom Nutzer verwaltetes Dienstkonto zu delegieren.
Voraussetzungen
- Zum Erstellen eines neuen vom Nutzer verwalteten Dienstkontos benötigen Sie die Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) für das Projekt. - Um dem Nutzer und dem Dienst-Agent Zugriff auf das vom Nutzer verwaltete Dienstkonto zu gewähren, benötigen Sie die Rolle „Dienstkontoadministrator“ (
roles/iam.serviceAccountAdmin) für das vom Nutzer verwaltete Dienstkonto oder für das Projekt.
Vom Nutzer verwaltetes Dienstkonto erstellen oder ermitteln
Sie können ein neues vom Nutzer verwaltetes 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 vom Nutzer verwaltetes Dienstkonto verwenden möchten, benötigen Sie die E‑Mail-Adresse im folgenden Format:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Wenn sich das Dienstkonto in einem anderen Projekt als der Übertragungsjob befindet, lesen Sie Dienstkonten projektübergreifend anhängen.
Zugriff für den Nutzer gewähren
Gewähren Sie dem Nutzerkonto Zugriff auf das neue vom Nutzer verwaltete 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 „“ Zugriff gewähren.
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
add-iam-policy-binding Befehl 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.iam.gserviceaccount.com. - PRINCIPAL: Die E‑Mail-Adresse des Nutzers, der den Übertragungs
job ausführt, im Format
user:name@example.com.
Zugriff für den Dienst-Agent gewähren
Damit der Dienst-Agent ein Zugriffstoken vom
vom Nutzer verwalteten Dienstkonto generieren kann, gewähren Sie ihm 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
googleServiceAccounts.getReferenzseite 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
accountEmailzurückgegeben. Sie hat das Formatproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
So gewähren Sie dem Dienst-Agent 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 Hauptkonten mit Zugriff aus.
Klicken Sie auf „“ Zugriff gewähren.
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
add-iam-policy-binding Befehl 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.iam.gserviceaccount.com. - SERVICE_AGENT_EMAIL: Die E‑Mail-Adresse des Dienst-Agents.
Bucket-Berechtigungen für das vom Nutzer verwaltete Dienstkonto erteilen
Erteilen Sie die unter Berechtigungen des Dienst-Agents aufgeführten Berechtigungen für das vom Nutzer verwaltete Dienstkonto anstelle des Dienst-Agents.
Übertragungsjob mit einem vom Nutzer verwalteten Dienstkonto erstellen
Nachdem Sie die richtigen Berechtigungen erteilt haben, können Sie das vom Nutzer verwaltete 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 Vom Nutzer verwaltetes Dienstkonto aus.
- Geben Sie die E‑Mail-Adresse des vom Nutzer verwalteten Dienstkontos im Format
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comein. - Klicken Sie auf Erstellen , um den Übertragungsjob zu erstellen.
REST API
Geben Sie das vom Nutzer verwaltete Dienstkonto als Wert des Felds serviceAccount in der Anfrage transferJobs.create an.
Es werden entweder die E‑Mail-Adresse des Dienstkontos (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) 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.iam.gserviceaccount.com",
"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 vom Nutzer verwalteten 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)'