Berechtigungen für Servicemitarbeiter an ein nutzerverwaltetes Dienstkonto delegieren

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 gewähren dem Dienst-Agent 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 notwendigerweise Berechtigungen für alle Buckets, die an jeder Übertragung beteiligt sind.

Alternativ können Sie stattdessen mehreren von Nutzern verwalteten Dienstkonten Bucket-Berechtigungen zuweisen. Diesen nutzerverwalteten 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 nutzerverwalteten Dienstkonten veranschaulicht.

Maximieren Sie die einzelnen Abschnitte, um die Details zu sehen.

Szenario 1: Nur Dienst-Agent

In diesem Szenario werden alle Berechtigungen dem Dienst-Agent 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-Agents

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:

  • Nutzer Alpha erhält Zugriff auf Dienstkonto 1.
  • Nutzer Bravo erhält Zugriff auf Dienstkonto 2.
  • Nutzer Charlie hat Zugriff auf die Dienstkonten 1 und 2.

In diesem Fall gilt:

  • Alpha kann nur zwischen den Buckets A und B übertragen werden.
  • Bravo kann nur zwischen den Buckets C und D übertragen werden.
  • Charlie kann nur zwischen den Gruppen 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 Dienst-Agent-Berechtigungen und Berechtigungen für nutzerverwaltete Dienstkonten.

  • Dem Dienst-Agent werden Schreibberechtigungen für die Buckets A und B gewährt.
  • Dem vom Nutzer verwalteten Dienstkonto 1 werden schreibgeschützte Berechtigungen 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 in die Segmente A und B oder aus diesen Segmenten wechseln.
  • Alpha kann aus Bucket C in Bucket D übertragen.
  • Alpha kann nicht aus Bucket C in Bucket A oder B übertragen werden.

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 über das vom Nutzer verwaltete Dienstkonto generieren kann.
    • Damit das vom Nutzer verwaltete Dienstkonto auf Ihre Buckets zugreifen kann.
  • 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 das Erstellen des Übertragungsjobs fehl.
  • Der Dienst-Agent generiert ein OAuth-Token im Namen des vom Nutzer verwalteten Dienstkontos. Das OAuth-Token ermöglicht dem Storage Transfer Service den Zugriff auf die an der Übertragung beteiligten Buckets.
  • Der Übertragungsjob wird ausgeführt.
  • Das OAuth-Token ist kurzlebig und läuft ab. Wenn der Übertragungsjob läuft, 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 Service-Agents auf ein nutzerverwaltetes Dienstkonto zu delegieren.

Voraussetzungen

  • Zum Erstellen eines neuen nutzerverwalteten 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 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 E-Mail-Adresse des Dienstkontos. Diese hat das folgende Format:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Wenn sich das Dienstkonto in einem anderen Projekt als der Übertragungsjob befindet, lesen Sie den Abschnitt Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können.

Dem Nutzer Zugriff 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

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Klicken Sie auf die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos.

  4. Wählen Sie den Tab Berechtigungen aus.

  5. Klicken Sie auf Zugriffsrechte erteilen.

  6. Geben Sie die E‑Mail-Adresse des Nutzers ein. Beispiel: user1@example.com.

  7. Wählen Sie in der Drop-down-Liste Rolle die Option Dienstkontonutzer aus.

  8. 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 auf den Dienst-Agent 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:

  1. Rufen Sie die Referenzseite googleServiceAccounts.get auf.

    Es wird ein interaktives Steuerfeld mit dem Titel Diese Methode testen geöffnet.

  2. 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.

  3. Klicken Sie auf Ausführen.

    Die E-Mail-Adresse des Dienst-Agents wird als Wert von accountEmail zurückgegeben. Es wird das Format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com verwendet.

So gewähren Sie dem Dienst-Agent Zugriff auf das vom Nutzer verwaltete Dienstkonto:

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Klicken Sie auf die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos.

  4. Wählen Sie den Tab Berechtigungen aus.

  5. Klicken Sie auf Zugriffsrechte erteilen.

  6. Geben Sie die E-Mail-Adresse des Dienst-Agents ein.

  7. Wählen Sie in der Drop-down-Liste Rolle die Option Ersteller von Dienstkonto-Tokens aus.

  8. 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 Dienst-Agents.

Bucket-Berechtigungen für das vom Nutzer verwaltete Dienstkonto erteilen

Erteilen Sie die in Berechtigungen für von Google verwaltete Dienst-Agents aufgeführten Berechtigungen für das nutzerverwaltete Dienstkonto anstelle des Dienst-Agents.

Übertragungsjob mit einem vom Nutzer verwalteten Dienstkonto erstellen

Nachdem Sie die richtigen Berechtigungen erteilt haben, können Sie das nutzerverwaltete Dienstkonto beim Erstellen eines neuen Übertragungsjobs angeben.

Google Cloud Console

Folgen Sie der Anleitung, um eine Übertragung zu erstellen. Bevor Sie den Übertragungsjob abschließen:

  1. Suchen Sie auf der Seite Einstellungen auswählen nach dem Abschnitt Dienstkontotyp.
  2. Wählen Sie Nutzerverwaltetes Dienstkonto aus.
  3. Geben Sie die E-Mail-Adresse des vom Nutzer verwalteten Dienstkontos im Format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com ein.
  4. 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 wird entweder die E-Mail-Adresse des Dienstkontos (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) oder die eindeutige ID (123456789012345678901) akzeptiert. 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": {
    ...
  }
}