Übertragung von S3 über CloudFront

Für Übertragungen von Amazon S3 kann eine Amazon CloudFront-Distribution als Pfad für ausgehenden Traffic verwendet werden.

Datenübertragungen über CloudFront können im Vergleich zu direkten Übertragungen von S3 von niedrigeren AWS-Kosten für ausgehenden Traffic profitieren. Weitere Informationen finden Sie unter CloudFront-Preise und S3-Gebühren für ausgehenden Traffic.

Wenn Sie CloudFront als Pfad für ausgehenden Traffic verwenden, werden Ihre S3-Objekte nicht öffentlich zugänglich gemacht. Siehe Werden meine Objekte durch die Verwendung von CloudFront öffentlich zugänglich?

Übersicht

So übertragen Sie S3-Daten über CloudFront:

IAM-Berechtigungen konfigurieren

Folgen Sie der Anleitung unter Zugriff auf eine Senke konfigurieren: Cloud Storage, um die erforderlichen Google Cloud-Berechtigungen für den Ziel-Bucket zu gewähren.

Zugriff auf Ihren S3-Bucket konfigurieren

Folgen Sie der Anleitung unter Zugriff auf eine Quelle konfigurieren: Amazon S3, um den Zugriff auf Ihre Daten in Amazon S3 zu konfigurieren.

CloudFront-Distribution für Ihren S3-Bucket erstellen

  1. Rufen Sie in Ihrem AWS-Konto CloudFront auf.
  2. Klicken Sie auf Create a CloudFront distribution (CloudFront-Distribution erstellen).
  3. Wählen Sie unter Ursprungsdomain Ihren S3-Bucket aus.
  4. Der Ursprungspfad muss leer bleiben.
  5. Übernehmen Sie den automatisch ausgefüllten Ursprungsnamen oder geben Sie einen eigenen Wert an.
  6. Wählen Sie im Bereich Ursprungszugriff die Option Öffentlich aus. Dadurch wird Ihr Bucket nicht öffentlich gemacht. Stattdessen wird CloudFront mitgeteilt, dass kein Zugriffsmechanismus konfiguriert werden soll.
  7. Im Abschnitt Cache-Schlüssel- und Ursprungsanforderungen:
    1. Wählen Sie für Cache-Richtlinie die Option CachingDisabled aus. Dadurch wird verhindert, dass CloudFront Anfragen im Cache speichert und sie nicht authentifizierten Betrachtern bereitstellt.
    2. Wählen Sie für Ursprungsanfragerichtlinie die Option AllViewerExceptHostHeader aus. Dadurch kann CloudFront Authentifizierungsheader an S3 weiterleiten, sodass der Storage Transfer Service mit Ihren Sicherheitsanmeldedaten auf Ihren Bucket zugreifen kann.
  8. Wählen Sie im Bereich Web Application Firewall (WAF) die Option Nicht aktivieren aus.
  9. Optional: Wählen Sie eine Preisklasse aus. Storage Transfer Service wählt Worker-Pools basierend auf der Region des Quell-Buckets aus. Daher fallen CloudFront-Preise in dieser Region an. Wenn Sie den niedrigsten Preis erzielen möchten, muss sich Ihr Quell-Bucket entweder in den USA oder in Europa befinden. Alternativ können Sie in CloudFront Nur Nordamerika und Europa verwenden als Preisklasse auswählen.
  10. Klicken Sie auf Create CloudFront distribution (CloudFront-Distribution erstellen).

    Nach der erfolgreichen Erstellung wird die Detailseite der CloudFront-Distribution angezeigt.

  11. Notieren Sie sich den Domainnamen der Distribution. Beispiel: https://dy1h2n3l4ob56.cloudfront.net. Wenn auf der Detailseite das Protokoll https:// nicht vor dem Namen der Verteilungsdomain angezeigt wird, müssen Sie es beim Erstellen des Übertragungsjobs selbst hinzufügen.

Übertragungsjob erstellen

Die Übertragung über eine CloudFront-Verteilung wird in der Google Cloud Console und der REST API unterstützt.

Der Name des Übertragungsjobs sollte keine vertraulichen Informationen wie z. B. personenidentifizierbare Informationen oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und für Google-interne Systeme außerhalb Ihres Projekts verfügbar gemacht werden.

Google Cloud Console

Wenn Sie eine Übertragung mit der Google Cloud Console erstellen möchten, folgen Sie der Anleitung zum Erstellen einer Übertragung.

Wenn Sie aufgefordert werden, die CloudFront-Domain einzugeben, geben Sie den Domainnamen der Distribution ein, den Sie im vorherigen Abschnitt notiert haben. Sie finden diesen Wert auch im CloudFront-Bereich der Amazon Web Services-Konsole. Das Format sieht folgendermaßen aus: https://dy1h2n3l4ob56.cloudfront.net.

REST API

Wenn Sie eine Übertragung mit der REST API erstellen möchten, folgen Sie dem Beispiel auf der Seite Übertragungen erstellen.

Geben Sie den Domainnamen der Distribution als Wert des Felds transferSpec.awsS3DataSource.cloudfrontDomain an:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

Fehlerbehebung

AuthorizationHeaderMalformed-Fehler

Wenn ein AuthorizationHeaderMalformed-Fehler auftritt, der auf eine nicht übereinstimmende Region hinweist (z. B. the region 'Location A' is wrong; expecting 'Location B'), liegt dies wahrscheinlich an einer nicht unterstützten CloudFront-Konfiguration.

Dieser Fehler tritt auf, wenn Sie eine einzelne CloudFront-Distribution verwenden, um mehrere S3-Buckets in verschiedenen AWS-Regionen zu verwalten.

Achten Sie darauf, dass jede CloudFront-Distribution S3-Buckets in nur einer AWS-Region bereitstellt, um dieses Problem zu beheben. Wenn Sie S3-Buckets in verschiedenen Regionen haben, erstellen Sie für jede Region eine separate CloudFront-Verteilung.

Häufig gestellte Fragen

Werden meine Objekte durch die Verwendung von CloudFront öffentlich zugänglich?

Nein. Wenn Sie die Konfigurationsschritte auf dieser Seite befolgt haben, sind Ihre Objekte nicht öffentlich zugänglich.

  • Cloudfront hat keinen direkten Zugriff auf Ihre S3-Objekte.
  • Nutzer erhalten den Fehler permission denied, wenn sie versuchen, direkt oder über CloudFront auf Ihre Objekte zuzugreifen (wenn Ihr Bucket privat ist).
  • Der Storage Transfer Service signiert Anfragen an CloudFront mit den Anmeldedaten, die Sie im Übertragungsjob angegeben haben. So können wir Ihre Objekte sicher herunterladen, als würden wir sie direkt von S3 herunterladen. Dies funktioniert aufgrund der Header-Weiterleitungseinstellung AllViewerExceptHostHeader.