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

  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 Hauptkonten mit Zugriff aus.

  5. Klicken Sie auf „Zugriff gewähren.

  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

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:

  1. Rufen Sie die googleServiceAccounts.get Referenzseite 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. Sie hat das Format project-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

  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 Hauptkonten mit Zugriff aus.

  5. Klicken Sie auf „Zugriff gewähren.

  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

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:

  1. Suchen Sie auf der Seite Einstellungen auswählen den Abschnitt Dienstkontotyp.
  2. Wählen Sie Vom Nutzer verwaltetes 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 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

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

    Zur Seite „Dienstkonten“

  2. Klicken Sie auf die E-Mail-Adresse des Dienstkontos.

  3. 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)'