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

Storage Transfer Service kann Daten aus den folgenden Amazon S3-Regionen übertragen: af-south-1, ap-east-1, ap-northeast-1 ap-northeast-2, ap-northeast-3, ap-south-1 ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ca-central-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 me-central-1, me-south-1, sa-east-1, us-east-1 us-east-2, us-west-1 und us-west-2.

Erforderliche Berechtigungen

Damit Sie Storage Transfer Service nutzen können, um Daten aus einem Amazon S3- Bucket, Ihre Rolle für das Nutzerkonto oder die föderierte Identität muss die entsprechenden Berechtigungen für den Bucket:

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

So verwenden Sie eine Zugriffsschlüssel-ID und einen geheimen Schlüssel für die 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 als AWS-Zugriffstyp Access key – Programmatic access (Zugriffsschlüssel – Programmatischer Zugriff) aus.

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

    • AmazonS3ReadOnlyAccess ermöglicht den schreibgeschützten Zugriff auf die Quelle. Dies ermöglicht Übertragungen, das Löschen von Objekten an der Quelle wird jedoch nicht unterstützt sobald die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn Ihre Übertragung zum Löschen von Objekten konfiguriert ist an der Quelle an.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle mit den erforderlichen Berechtigungen oben. Die JSON-Datei für Mindestberechtigungen wie im Beispiel unten:

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

So übergeben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel an den Storage Transfer Service hängt davon ab, über welche Schnittstelle Sie die Übertragung initiieren.

Cloud Console

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

Unter Übertragungen erstellen begonnen.

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 an den Befehl gcloud transfer jobs create. mit dem Flag source-creds-file:

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 von Das awsS3DataSource-Objekt:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Clientbibliotheken

Beispiele finden Sie in der Seite Übertragungen erstellen

Anmeldedaten in Secret Manager speichern

Secret Manager ist ein sicherer Dienst zum Speichern und Verwalten sensible Daten wie Passwörter. Starke Verschlüsselung, rollenbasierter Zugriff Kontrolle und Audit-Logging zum Schutz Ihrer Secrets.

Storage Transfer Service kann Secret Manager zum Schutz von AWS nutzen Zugangsdaten Sie laden Ihre Anmeldedaten in Secret Manager und den Ressourcennamen des Secrets an den Storage Transfer Service übergeben.

API aktivieren

Enable the Secret Manager API.

Enable the API

Zusätzliche Berechtigungen konfigurieren

Nutzerberechtigungen

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

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

Hier erfahren Sie, wie Sie eine Rolle zuweisen.

Berechtigungen des Dienst-Agents

Für den Storage Transfer Service-Dienst-Agent ist die folgende IAM-Rolle erforderlich:

  • Auf Secret Manager-Secret zugreifende Person (roles/secretmanager.secretAccessor)

So weisen Sie Ihrem Dienst-Agent die Rolle zu:

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 Textfeld Neue Hauptkonten die E-Mail-Adresse des Dienst-Agents ein.

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

  6. Klicken Sie auf Speichern.

gcloud

IAM mit dem Befehl gcloud projects add-iam-policy-binding hinzufügen Rolle zu Ihrem Dienst-Agent zuweisen.

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

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

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

Secret erstellen

Erstellen Sie ein Secret mit Secret Manager:

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 Ihre Anmeldedaten im Textfeld Secret-Wert Format:

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

  6. Nachdem das Secret erstellt wurde, notieren Sie sich den vollständigen Ressourcennamen des Secrets:

    1. Wähle den Tab Übersicht aus.

    2. Kopieren Sie den Wert von Ressourcen-ID. Sie verwendet das folgende Format:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Um mit dem gcloud-Befehlszeilentool ein neues Secret zu erstellen, übergeben Sie den Anmeldedaten im JSON-Format für 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. Sie verwendet das folgende Format:

projects/1234567890/secrets/SECRET_NAME

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

Secret an den Befehl zur Joberstellung übergeben

Secret Manager mit Storage Transfer Service erfordert die Verwendung der REST API, um einen Übertragungsjob zu erstellen.

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

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

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

Mit föderierter Identität authentifizieren

So verwenden Sie die 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 die subjectID der von Google verwalteten Dienstkonto, das automatisch erstellt wird, wenn Sie Storage Transfer Service So rufen Sie subjectID ab:

    1. Gehen Sie zur Referenzseite für googleServiceAccounts.get.

      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 den Sie zur Verwaltung des Storage Transfer Service verwenden.

    3. Klicken Sie auf Ausführen. subjectId ist in der Antwort enthalten.

  5. Gewähren Sie der Rolle eine der folgenden Berechtigungsrichtlinien:

    • AmazonS3ReadOnlyAccess bietet nur Lesezugriff auf die Quelle. Dies ermöglicht Übertragungen, das Löschen von Objekten an der Quelle wird jedoch nicht unterstützt sobald die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn Ihre Übertragung zum Löschen von Objekten konfiguriert ist an der Quelle an.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle mit den erforderlichen Berechtigungen oben. Die JSON-Datei für Mindestberechtigungen wie im Beispiel unten:

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

  7. Sehen Sie sich nach dem Erstellen die Rollendetails an, um den Amazon-Ressourcennamen abzurufen (ARN). Notieren Sie sich diesen Wert: das Format arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME

So übergeben Sie den ARN an den Storage Transfer Service hängt davon ab, über welche Schnittstelle Sie die Übertragung initiieren.

Cloud Console

Geben Sie den ARN direkt in das Formular zum Erstellen von Übertragungsjobs ein.

Unter Übertragungen erstellen begonnen.

gcloud-CLI

Erstellen Sie eine JSON-Datei im folgenden Format:

{
  "roleArn": "ARN"
}

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

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

REST API

Das transferSpec-Objekt muss die ARN-Informationen als Teil von Das awsS3DataSource-Objekt:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Clientbibliotheken

Beispiele finden Sie in der Seite Übertragungen erstellen

IP-Einschränkungen

Wenn Ihr AWS-Projekt IP-Einschränkungen für den Speicherzugriff verwendet, müssen Sie Fügen Sie die von Storage Transfer Service-Worker verwendeten IP-Bereiche der Liste der zulässigen IP-Bereiche hinzu IP-Adressen.

Da sich diese IP-Bereiche ändern können, veröffentlichen wir die aktuellen Werte im JSON-Format permanente Adresse:

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

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

Wir empfehlen, Daten mindestens einmal pro Woche abzurufen, Ihre Sicherheitskonfiguration auf dem neuesten Stand zu halten. Für ein Python-Beispielskript, das IP-Bereiche aus einer JSON-Datei, siehe diesen Artikel der Virtual Private Cloud Dokumentation.

Verwenden Sie das Feld Condition in einem Bucket, um diese Bereiche als zulässige IP-Adressen hinzuzufügen wie in der AWS S3-Dokumentation beschrieben: Zugriff basierend auf bestimmten IP-Adressen verwalten