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, 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 Rolle für die föderierte Identität 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 authentifizieren Sie sich mit einer Zugriffsschlüssel-ID und einem geheimen Schlüssel 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, um Lesezugriff auf die Quelle zu gewähren. Dadurch sind Übertragungen möglich, aber das Löschen von Objekten in der Quelle wird nicht unterstützt, sobald die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn die Übertragung so konfiguriert ist, dass Objekte an der Quelle gelöscht werden.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle Erforderliche Berechtigungen oben. Das JSON für die Mindestberechtigungen sieht so aus:

      {
        "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, sobald der Nutzer erstellt wurde.

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

Cloud Console

Geben Sie die Werte direkt in das Formular zum Erstellen eines Ü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 wichtigsten Informationen als Teil des awsS3DataSource-Objekts enthalten:

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

Clientbibliotheken

Sehen Sie sich die Beispiele auf der Seite Übertragungen erstellen an.

Zugriffsdaten im Secret Manager speichern

Secret Manager ist ein sicherer Dienst, mit dem sensible Daten wie Passwörter gespeichert und verwaltet werden. Zum Schutz Ihrer Secrets werden eine starke Verschlüsselung, die rollenbasierte Zugriffssteuerung und Audit-Logging verwendet.

Der Storage Transfer Service kann Secret Manager verwenden, um Ihre AWS-Anmeldedaten zu schützen. Sie laden Ihre Anmeldedaten in Secret Manager und geben dann den Namen der geheimen Ressource an den Storage Transfer Service weiter.

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)

Weitere Informationen zum Gewähren einer Rolle

Berechtigungen des Dienst-Agents

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

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

So weisen Sie Ihrem Kundenservicemitarbeiter die Rolle zu:

Cloud Console

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

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

    Seite „IAM“

  3. Klicken Sie auf Zugriff erlauben.

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

  5. Wählen Sie im Drop-down-Menü Rolle auswählen die Option Zugriffsperson für Secret Manager-Secret aus.

  6. Klicken Sie auf Speichern.

gcloud

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

  1. Folgen Sie der Anleitung, um die E-Mail-Adresse Ihres Kundenservicemitarbeiters 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

So 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 im Textfeld 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 den vollständigen Ressourcennamen des Secrets, nachdem es erstellt wurde:

    1. Wähle den Tab Übersicht aus.

    2. Kopieren Sie den Wert für Ressourcen-ID. Sie hat das folgende Format:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Wenn Sie ein neues Secret mit dem gcloud-Befehlszeilentool erstellen möchten, übergeben Sie die Anmeldedaten im JSON-Format 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. Sie hat das folgende Format:

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 von Jobs übergeben

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

Übergeben Sie den Namen der Secret Manager-Ressource als Wert für das 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, um sich bei AWS zu authentifizieren:

  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 des von Google verwalteten Dienstkontos, das 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.

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

    • AmazonS3ReadOnlyAccess bietet Lesezugriff auf die Quelle. Dadurch sind Übertragungen möglich, aber das Löschen von Objekten in der Quelle wird nicht unterstützt, sobald die Übertragung abgeschlossen ist.
    • AmazonS3FullAccess, wenn die Übertragung so konfiguriert ist, dass Objekte an der Quelle gelöscht werden.
    • Eine benutzerdefinierte Rolle mit den entsprechenden Berechtigungen aus der Tabelle Erforderliche Berechtigungen oben. Das JSON für die Mindestberechtigungen sieht so aus:

      {
        "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 sie.

  7. Rufen Sie nach dem Erstellen die Rollendetails auf, um den Amazon Resource Name (ARN) abzurufen. Notieren Sie sich diesen Wert. Er hat das Format arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

Wie Sie die ARN an den Storage Transfer Service übergeben, hängt von der Schnittstelle ab, über die Sie die Übertragung initiieren.

Cloud Console

Gib die ARN 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:

{
  "roleArn": "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

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

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

Clientbibliotheken

Sehen Sie sich die Beispiele auf der Seite Übertragungen erstellen an.

IP-Einschränkungen

Wenn in Ihrem AWS-Projekt IP-Einschränkungen für den Zugriff auf den Speicher verwendet werden, 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-Adressbereiche ändern können, veröffentlichen wir die aktuellen Werte als JSON-Datei unter einer festen Adresse:

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

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

Wir empfehlen, mindestens einmal pro Woche Daten aus diesem Dokument abzurufen, um Ihre Sicherheitskonfiguration auf dem neuesten Stand zu halten. Ein Beispiel für ein Python-Script, 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 beschrieben: Zugriff basierend auf bestimmten IP-Adressen verwalten.