Zugriff auf eine Quelle konfigurieren: Amazon S3

Sie können den Zugriff auf einen Amazon S3-Bucket mit einer der folgenden Methoden einrichten:

Unterstützte Regionen

Der Storage Transfer Service unterstützt die folgenden Amazon S3-Regionen:
af-south-1
ap-east-1
ap-east-2
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ap-southeast-5
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
Übertragungen über das von Google verwaltete private Netzwerk unterstützen die folgenden AWS-Regionen:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Erforderliche Berechtigungen

Wenn Sie Storage Transfer Service verwenden möchten, um Daten aus einem Amazon S3-Bucket zu verschieben, muss Ihr Nutzerkonto oder Ihre föderierte Identitätsrolle die entsprechenden Berechtigungen für den Bucket haben:

Berechtigung Beschreibung Nutzung
s3:ListBucket Ermöglicht Storage Transfer Service, Objekte im Bucket aufzulisten. Immer erforderlich.
s3:GetObject Ermöglicht Storage Transfer Service, Objekte im Bucket zu lesen. Erforderlich, wenn Sie die aktuelle Version aller Objekte übertragen Verwenden Sie s3:GetObjectVersion, wenn Ihr Manifest eine Objektversion angibt.
s3:GetObjectVersion Ermöglicht Storage Transfer Service, bestimmte Versionen von Objekten im Bucket zu lesen. Erforderlich, wenn das Manifest eine Objektversion angibt Verwenden Sie andernfalls s3:GetObject.
s3:DeleteObject Ermöglicht es Storage Transfer Service, Objekte im Bucket zu löschen. Erforderlich, wenn Sie deleteObjectsFromSourceAfterTransfer auf true festlegen.

Mit Zugriffsdaten authentifizieren

So verwenden Sie eine Zugriffsschlüssel-ID und einen geheimen Schlüssel zur Authentifizierung bei AWS:

  1. Erstellen Sie einen AWS IAM-Nutzer (AWS Identity and Access Management) mit einem Namen, den Sie leicht wiedererkennen, z. B. transfer-user.

  2. Wählen Sie für den AWS-Zugriffstyp Access key - programmatic access (Zugriffsschlüssel – programmatischer Zugriff) aus.

  3. Weisen Sie dem Nutzer eine der folgenden Rollen zu:

    • AmazonS3ReadOnlyAccess, um Lesezugriff auf die Quelle zu gewähren. Dies ermöglicht Übertragungen, unterstützt jedoch nicht das Löschen von Objekten in der Quelle, nachdem die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn die Übertragung so konfiguriert ist, dass Objekte in der Quelle gelöscht werden.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle Erforderliche Berechtigungen. Das JSON für die Mindestberechtigungen sieht so aus:

      Standard-AWS-Regionen

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      AWS GovCloud-Regionen

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  4. Notieren Sie sich die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel, wenn der Nutzer erfolgreich erstellt wurde.

Wie Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel an Storage Transfer Service übergeben, hängt von der Schnittstelle ab, die Sie zum Initiieren der Übertragung verwenden.

Google Cloud Console

Geben Sie die Werte direkt in das Formular zum Erstellen des Übertragungsjobs ein.

Weitere Informationen finden Sie unter Übertragungen erstellen.

gcloud-CLI

Erstellen Sie eine JSON-Datei im folgenden Format:

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

Übergeben Sie den Speicherort der Datei mit dem Flag source-creds-file an den Befehl gcloud transfer jobs create:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

REST API

Das transferSpec-Objekt muss die Schlüsselinformationen als Teil des awsS3DataSource-Objekts enthalten:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "S3_BUCKET_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Clientbibliotheken

Beispiele finden Sie auf der Seite Übertragungen erstellen.

Anmeldedaten in Secret Manager speichern

Secret Manager ist ein sicherer Dienst, der sensible Daten wie Passwörter speichert und verwaltet. Es verwendet starke Verschlüsselung, rollenbasierte Zugriffssteuerung und Audit-Logging, um Ihre Secrets zu schützen.

Storage Transfer Service kann Secret Manager nutzen, um Ihre AWS-Zugangsdaten zu schützen. Sie laden Ihre Anmeldedaten in Secret Manager und übergeben dann den Namen der Secret-Ressource an Storage Transfer Service.

API aktivieren

Aktivieren Sie die Secret Manager API, falls sie noch nicht aktiviert ist.

Rollen, die zum Aktivieren von APIs erforderlich sind

Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

API aktivieren

Zusätzliche Berechtigungen konfigurieren

Nutzerberechtigungen

Der Nutzer, der das Secret erstellt, benötigt die folgende Rolle:

  • Secret Manager-Administrator (roles/secretmanager.admin)

Rolle zuweisen

Berechtigungen des Dienst-Agents

Der Dienst-Agent des Storage Transfer Service benötigt die folgende IAM-Rolle:

  • Zugriffsperson für Secret Manager-Secret (roles/secretmanager.secretAccessor)

So weisen Sie Ihrem Dienst-Agent die Rolle zu:

Google Cloud Console

  1. Folgen Sie der Anleitung, um die E-Mail-Adresse Ihres Dienst-Agents abzurufen.

  2. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  3. Klicken Sie auf Zugriff erlauben.

  4. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienst-Agents ein.

  5. Suchen Sie im Drop-down-Menü Rolle auswählen nach Secret Manager-Secret-Zugriffsfunktion und wählen Sie diese Rolle aus.

  6. Klicken Sie auf Speichern.

gcloud-CLI

Verwenden Sie den Befehl gcloud projects add-iam-policy-binding, um die IAM-Rolle Ihrem Dienst-Agenten hinzuzufügen.

  1. Folgen Sie der Anleitung, um die E-Mail-Adresse Ihres Dienst-Agents abzurufen.

  2. Geben Sie den folgenden Befehl in die Befehlszeile ein:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

Secret erstellen

Secret mit Secret Manager erstellen:

Google Cloud Console

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

    Zu Secret Manager

  2. Klicken Sie auf Secret erstellen.

  3. Geben Sie einen Namen ein.

  4. Geben Sie im Feld Secret-Wert Ihre Anmeldedaten im folgenden Format ein:

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. Klicken Sie auf Secret erstellen.

  6. Notieren Sie sich nach dem Erstellen des Secrets den vollständigen Ressourcennamen des Secrets:

    1. Wähle den Tab Übersicht aus.

    2. Kopieren Sie den Wert der Ressourcen-ID. Es wird das folgende Format verwendet:

      projects/1234567890/secrets/SECRET_NAME

gcloud-CLI

Wenn Sie ein neues Secret mit der gcloud CLI erstellen möchten, übergeben Sie die JSON-formatierten Anmeldedaten an den Befehl gcloud secrets create:

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Rufen Sie den vollständigen Ressourcennamen des Secrets ab:

gcloud secrets describe SECRET_NAME

Notieren Sie sich den Wert von name in der Antwort. Es wird das folgende Format verwendet:

projects/1234567890/secrets/SECRET_NAME

Weitere Informationen zum Erstellen und Verwalten von Secrets finden Sie in der Secret Manager-Dokumentation.

Secret an den Befehl zum Erstellen des Jobs übergeben

Wenn Sie Secret Manager mit dem Storage Transfer Service verwenden möchten, müssen Sie die REST API verwenden, um einen Übertragungsjob zu erstellen.

Übergeben Sie den Secret Manager-Ressourcennamen als Wert des Felds transferSpec.awsS3DataSource.credentialsSecret:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "awsS3DataSource": {
      "bucketName": "S3_BUCKET_NAME",
      "credentialsSecret": "SECRET_RESOURCE_ID"
    },
    "gcsDataSink": {
      "bucketName": "GCS_BUCKET_NAME"
    }
  }
}

Mit föderierter Identität authentifizieren

So verwenden Sie eine föderierte Identität zur Authentifizierung bei AWS:

  1. Erstellen Sie eine neue IAM-Rolle in AWS.

  2. Wählen Sie als Typ der vertrauenswürdigen Entität Benutzerdefinierte Vertrauensrichtlinie aus.

  3. Kopieren Sie die folgende Vertrauensrichtlinie und fügen Sie sie ein:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. Ersetzen Sie SUBJECT_ID durch einen der folgenden Werte:

    Dienst-Agent

    Wenn in Ihrem Übertragungsjob kein serviceAccount angegeben ist (d.h., Sie delegieren keine Dienst-Agent-Berechtigungen an ein nutzerverwaltetes Dienstkonto), ersetzen Sie SUBJECT_ID durch die subjectId des Dienst-Agents, der automatisch erstellt wird, wenn Sie Storage Transfer Service verwenden. So rufen Sie die subjectId ab:

    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 subjectId ist in der Antwort enthalten.

    Nutzerverwaltetes Dienstkonto

    Wenn Sie Dienst-Agent-Berechtigungen an ein nutzerverwaltetes Dienstkonto delegieren, ist der Wert von SUBJECT_ID die eindeutige ID dieses Dienstkontos (uniqueId).

    Informationen zum Abrufen der uniqueId finden Sie unter Eindeutige ID eines Dienstkontos abrufen.

  5. Weisen Sie der Rolle eine der folgenden Berechtigungsrichtlinien zu:

    • AmazonS3ReadOnlyAccess bietet Lesezugriff auf die Quelle. Dies ermöglicht Übertragungen, unterstützt jedoch nicht das Löschen von Objekten in der Quelle, nachdem die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn die Übertragung so konfiguriert ist, dass Objekte in der Quelle gelöscht werden.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle Erforderliche Berechtigungen. Das JSON für die Mindestberechtigungen sieht so aus:

      Standard-AWS-Regionen

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      AWS GovCloud-Regionen

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  6. Weisen Sie der Rolle einen Namen zu und erstellen Sie die Rolle.

Rufen Sie nach dem Erstellen die Rollendetails auf, um den Amazon Resource Name (ARN) der Rolle abzurufen. Notieren Sie sich diesen Wert. Er hat eines der folgenden Formate:

  • Für AWS-Standardregionen: arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
  • Für AWS GovCloud-Regionen: arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME

Wie Sie den Rollen-ARN an den Storage Transfer Service übergeben, hängt von der Schnittstelle ab, die Sie zum Initiieren der Übertragung verwenden.

Google Cloud Console

Geben Sie den Rollen-ARN direkt in das Formular zur Erstellung des Übertragungsjobs ein.

Weitere Informationen finden Sie unter Übertragungen erstellen.

gcloud-CLI

Erstellen Sie eine JSON-Datei im folgenden Format:

{
  "roleArn": "AWS_ROLE_ARN"
}

Übergeben Sie den Speicherort der Datei mit dem Flag source-creds-file an den Befehl gcloud transfer jobs create:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

REST API

Ihr transferSpec-Objekt muss die Rollen-ARN-Informationen als Teil des awsS3DataSource-Objekts enthalten:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "AWS_ROLE_ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Clientbibliotheken

Beispiele finden Sie auf der Seite Übertragungen erstellen.

IP-Einschränkungen

Wenn Ihr AWS-Projekt IP-Einschränkungen für den Zugriff auf den Speicher verwendet, müssen Sie die von Storage Transfer Service-Workern verwendeten IP-Bereiche der Liste der zulässigen IP-Adressen hinzufügen.

Da sich diese IP-Bereiche ändern können, veröffentlichen wir die aktuellen Werte als JSON-Datei unter einer permanenten Adresse:

https://www.gstatic.com/storage-transfer-service/ipranges.json

Wenn der Datei ein neuer Bereich hinzugefügt wird, warten wir mindestens 7 Tage, bevor wir diesen Bereich für Anfragen von Storage Transfer Service verwenden.

Wir empfehlen, die Daten aus diesem Dokument mindestens einmal pro Woche abzurufen, um Ihre Sicherheitskonfiguration auf dem neuesten Stand zu halten. Ein Python-Beispielskript, das IP-Bereiche aus einer JSON-Datei abruft, finden Sie in diesem Artikel der Virtual Private Cloud-Dokumentation.

Wenn Sie diese Bereiche als zulässige IP-Adressen hinzufügen möchten, verwenden Sie das Feld Condition in einer Bucket-Richtlinie, wie in der AWS S3-Dokumentation unter Managing access based on specific IP addresses beschrieben.