Auf dieser Seite wird beschrieben, wie eine einfache Migration von Amazon Simple Storage Service (Amazon S3) zu Cloud Storage funktioniert. Bei einer einfachen Migration verwenden Sie vorhandene Tools und Bibliotheken, um authentifizierte REST-Anfragen an Amazon S3 zu generieren und um authentifizierte Anfragen an Cloud Storage zu senden.
Wenn Sie mit Cloud Storage noch wenig Erfahrung haben und die API nicht direkt nutzen, kann es sinnvoll sein, Übertragungen über die Google Cloud Console einzurichten und zu verwalten. Die Google Cloud Console bietet eine grafische Benutzeroberfläche für Cloud Storage, die es Ihnen ermöglicht, viele Ihrer Speicheraufgaben komplett im Browser auszuführen. Dazu zählt auch die Migration Ihrer Daten von Amazon S3 zu Cloud Storage.
Wenn Sie möchten, dass Cloud Storage eine Sicherung Ihrer Amazon S3-Daten speichert, sollten Sie ereignisgesteuerte Übertragungen verwenden, die mit Amazon S3-Ereignisbenachrichtigungen automatisch einen Cloud Storage-Bucket mit Ihrer Amazon S3-Quelle synchronisieren.
Migration von Amazon S3 zu Cloud Storage: Einfaches Migrationsszenario
Führen Sie folgende Schritte aus, um Anfragen an Cloud Storage zu senden:
- Legen Sie ein Google Cloud-Standardprojekt fest.
- Rufen Sie einen HMAC-Schlüssel (Hash-based Message Authentication Code) ab.
Nehmen Sie in Ihren vorhandenen Tools oder Bibliotheken folgende Änderungen vor:
- Ändern Sie den Anfrageendpunkt so, dass der Cloud Storage XML API-Anfrageendpunkt verwendet wird.
- Ersetzen Sie den Zugriffsschlüssel und den geheimen Schlüssel von Amazon Web Services (AWS) durch die entsprechende Zugriffs-ID und den geheimen Schlüssel von Cloud Storage (zusammen: Ihr Cloud Storage-HMAC-Schlüssel).
Achten Sie darauf, dass Ihre
x-amz-
-Header unterstützte Cloud Storage-Werte verwenden. Beispielsweise solltex-amz-storage-class
eine der verfügbaren Cloud Storage-Speicherklassen verwenden.Wenn Sie bei einem einfachen Migrationsszenario mit der Cloud Storage XML API arbeiten, führt die Angabe des Signaturbezeichners
AWS
im HeaderAuthorization
dazu, dass Cloud Storage in Ihrer Anfrage Header des Typsx-amz-*
und die ACL-XML-Syntax von Amazon S3 erwartet. Cloud Storage verarbeitetx-amz-*
-Header, zu denen es einex-goog-*
-Entsprechung gibt, wie sie in der Header-Tabelle aufgeführt sind, und denx-amz-decoded-content-length
-Header.
Nachdem Sie diese Änderungen vorgenommen haben, können Sie vorhandenen Tools und Bibliotheken verwenden, um HMAC-Anfragen an Cloud Storage zu senden.
Die folgenden Beispiele zeigen, wie Cloud Storage-Buckets mit dem Amazon S3 SDK aufzulisten sind:
Go
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Standardprojekt festlegen
Zur Verwendung von Cloud Storage in einem einfachen Migrationsszenario wird empfohlen, ein Standardprojekt festzulegen, mit dem Cloud Storage bestimmte Vorgänge ausführt, Beispiele: GET
-Dienst/PUT
-Bucket. Wenn Sie kein Standardprojekt festlegen, müssen Sie in bestimmten Anfragen einen Projektheader angeben.
So legen Sie ein Standardprojekt fest:
- Öffnen Sie die Seite mit den Cloud Storage-Einstellungen in der Google Cloud Console.
- Wählen Sie den Tab Interoperabilität aus.
Klicken Sie im Abschnitt Standardprojekt für interoperablen Zugriff auf PROJECT-ID als Standardprojekt festlegen.
Wenn das Projekt bereits das Standardprojekt ist, wird PROJECT-ID ist das Standardprojekt für interoperablen Zugriff angezeigt.
Dieses Projekt ist jetzt Ihr Standardprojekt. Sie können Ihr Standardprojekt jederzeit ändern. Dazu wählen Sie ein anderes Projekt aus und führen diese Schritte aus.
Alternativ Projektheader angeben
Statt ein Standardprojekt festzulegen oder auch wenn Sie bereits ein Standardprojekt festgelegt haben, können Sie den Header x-amz-project-id
in den Anfragen verwenden, bei denen Sie ein Projekt angeben müssen.
- Eine Anfrage, die
x-amz-project-id
verwendet, verwendet das im Header angegebene Projekt, selbst wenn ein Standardprojekt vorhanden ist.
Der x-amz-project-id
-Header ist in folgenden Fällen nützlich:
- Sie arbeiten mit mehreren Projekten.
- Ihre Anfragen werden von einem Dienstkonto gesendet, das mit einem anderen Projekt verknüpft ist, da Dienstkonten das ihnen übergeordnete Projekt als Standardprojekt verwenden.
Beachten Sie, dass Amazon S3 keine Projekte hat. Daher ist es je nach verwendeten Tools oder Clientbibliotheken eventuell nicht möglich, einen x-amz-project-id
-Header anzugeben. In diesem Fall sollten Sie ein Standardprojekt festlegen.
HMAC-Schlüssel verwenden
Wenn Sie die Cloud Storage XML API in einem einfachen Migrationsszenario einsetzen, geben Sie als Anmeldedaten HMAC-Schlüssel (Hash-based Message Authentication Code) an. Normalerweise sollten Sie einen HMAC-Schlüssel erstellen, der mit einem Dienstkonto verknüpft ist. Sie können jedoch auch ein Konto verwenden, das mit einem Nutzerkonto verknüpft ist.
Authentifizierung in einem einfachen Migrationsszenario
Autorisierungsheader verwenden
Für Prozesse im Rahmen eines einfachen Migrationsszenarios, die eine Authentifizierung erfordern, fügen Sie genau wie bei Anfragen an Amazon S3 einen Authorization
-Anfrageheader ein. Die Syntax des Authorization
-Headers sieht bei einer Amazon S3-Anfrage so aus:
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
In einem einfachen Migrationsszenario ändern Sie nur den Header, damit Ihre Cloud Storage-HMAC-Zugriffs-ID verwendet wird, und sorgen dafür, dass die angefügte Signature
mit Ihrem geheimen Cloud Storage-HMAC-Schlüssel berechnet wird:
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Der Header Authorization
umfasst folgende Bestandteile:
ALGORITHM: Der Signaturalgorithmus und die Version, die Sie verwenden. Die Verwendung von
AWS4-HMAC-SHA256
zeigt an, dass Sie eine HMAC V4-Signatur verwenden und vorhaben, Header vom Typx-amz-*
zu senden. Sie können auchGOOG4-HMAC-SHA256
verwenden, was bedeutet, dass Sie eine HMAC V4-Signatur verwenden und vorhaben,x-goog-*
-Header zu senden. Alternativ können Sie auchGOOG4-RSA-SHA256
verwenden, was bedeutet, dass Sie eine RSA V4-Signatur verwenden und vorhaben,x-goog-*
-Header zu senden.GOOG-ACCESS-ID: Die Zugriffs-ID kennzeichnet die Entität, die die Anfrage stellt und signiert. Bei einer einfachen Migration ersetzen Sie die Zugriffs-ID von Amazon Web Service (AWS), die Sie zum Zugriff auf Amazon S3 verwenden, durch die Cloud Storage-HMAC-Zugriffs-ID. Ihre Cloud Storage-HMAC-Zugriffs-ID beginnt mit
GOOG
.CREDENTIAL_SCOPE: Der Anmeldedatenbereich, wie in der Signatur definiert. Bei einer einfachen Migration müssen Sie den Anmeldedatenbereich nicht ändern, wenn Sie
AWS4-HMAC-SHA256
für den ALGORITHM-Wert verwenden.SIGNED_HEADERS: Eine durch Semikolons getrennte Liste mit Namen von Headern, die zum Signieren dieser Anfrage enthalten sein müssen. Alle Header sollten in Kleinbuchstaben angegeben und nach Zeichencode sortiert sein.
Ein Beispiel für einen signierten Headerstring im Amazon S3-Stil sieht so aus:
content-type;host;x-amz-date
Bei einer einfachen Migration müssen Sie keine Änderungen an dem signierten Headerstring vornehmen.
SIGNATURE: Die Signatur, mit der die Anfrage authentifiziert werden kann. Bei einer einfachen Migration ersetzen Sie die AWS-Zugriffsschlüsselinformationen durch die entsprechenden Cloud Storage-HMAC-Schlüsselinformationen.
Beispielhafte Authentifizierungsanfrage
In den folgenden Beispielen wird das Objekt /europe/france/paris.jpg
in einen Bucket mit dem Namen my-travel-maps
hochgeladen. Dabei wird die vordefinierte ACL public-read
angewendet und ein benutzerdefinierter Metadatenheader für Prüfer festgelegt. Die Anfrage an einen Bucket in Amazon S3 sieht wie folgt aus:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Die Anfrage an einen Bucket in Cloud Storage sieht so aus:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Dies ist die entsprechende kanonische Anfrage, die für diese Anfrage erstellt wurde:
PUT /europe/france/paris.jpg content-length:888814 content-type:image/jpg host:my-travel-maps.storage.googleapis.com x-amz-acl:public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer:joe,jane content-length,content-type,host,x-amz-acl,x-amz-date,x-amz-meta-reviewer 82e3da8b3f35989512e8d428add7eca73ab0e5f36586e66fbad8e1051343cbd2
Dies ist der entsprechende zu signierende String, der für diese Anfrage erstellt wurde:
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
Diese Anfrage enthielt keinen Content-MD5-Header, also wird in der zweiten Zeile der Nachricht ein leerer String angezeigt.
Zugriffssteuerung bei einem einfachen Migrationsszenario
Zur Unterstützung einfacher Migrationen akzeptiert Cloud Storage ACLs, die von Amazon S3 erzeugt wurden. Bei einem einfachen Migrationsszenario verwenden Sie AWS
als Ihren Signaturbezeichner. Dadurch erkennt Cloud Storage, dass eine ACL-Syntax in Form der ACL-XML-Syntax von Amazon S3 zu erwarten ist. Sie sollten dafür sorgen, dass die ACLs von Amazon S3, die Sie verwenden, dem ACL-Modell von Cloud Storage zugeordnet werden können. Wenn Ihre Tools und Bibliotheken beispielsweise die ACL-Syntax von Amazon S3 verwenden, um die Bucket-Berechtigung WRITE
zu gewähren, muss auch die Bucket-Berechtigung READ
gewährt werden, weil Cloud Storage-Berechtigungen konzentrisch sind. Sie müssen nicht die Berechtigungen WRITE
und READ
angeben, wenn Sie die Berechtigung WRITE
gewähren und hierfür die Syntax von Cloud Storage verwenden.
Cloud Storage unterstützt die ACL-Syntax von Amazon S3 in folgenden Fällen:
- Bei einer Anfrage an Cloud Storage zum Abrufen von ACLs (z. B. einer Anfrage für ein
GET
-Objekt oder einenGET
-Bucket) gibt Cloud Storage die Antwort in der ACL-Syntax von Amazon S3 zurück. - Bei einer Anfrage an Cloud Storage zum Anwenden von ACLs (z. B. einer Anfrage für ein
PUT
-Objekt oder einenPUT
-Bucket) erwartet Cloud Storage, dass die Anfrage in der ACL-Syntax von Amazon S3 gestellt wird.
Der Header Authorization
verwendet bei einem einfachen Migrationsszenario AWS
als Signaturbezeichner, aber mit Ihrer Google-Zugriffs-ID.
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Das folgende Beispiel zeigt eine GET
-Anfrage an Cloud Storage, bei der die ACLs für ein Objekt zurückgegeben werden sollen.
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534
Die Antwort auf die Anfrage enthält die ACL in der ACL-Syntax von Amazon S3.
<?xml version='1.0' encoding='UTF-8'?> <AccessControlPolicy> <Owner> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490 </ID> <DisplayName>OwnerName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='CanonicalUser'> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490</ID> <DisplayName>UserName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Das folgende Beispiel zeigt eine PUT
-Anfrage an Cloud Storage, mit der die ACLs für ein Objekt festgelegt werden sollen. Das Beispiel zeigt einen Anfragetext mit der ACL-Syntax von Amazon S3.
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml Content-Length: 337 X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534 <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Bei einem einfachen Migrationsszenario können Sie im GOOG1
-Header aber auch den Signaturbezeichner Authorization
verwenden. In diesem Fall müssen Sie die ACL-Syntax von Cloud Storage einhalten und dafür sorgen, dass alle Ihre x-amz-*
-Header in x-goog-*
geändert werden. Dies ist zwar möglich, wir empfehlen Ihnen jedoch die Auswahl einer vollständigen Migration, um alle Vorteile von Cloud Storage nutzen zu können.
Support für die Kompatibilität der XML API mit Amazon S3
Diskussionen über die Interoperabilität der XML API finden Sie bei Stack Overflow mithilfe des Tags google-cloud-storage.
Nächste Schritte
- Migration von Amazon S3 planen
- Übertragen Sie Ihre Daten von externen Quellen wie Amazon S3 und Microsoft Azure Blob Storage in Cloud Storage mit dem Storage Transfer Service.
- Erstellen Sie ereignisgesteuerte Übertragungen, die Amazon S3-Ereignisbenachrichtigungen verwenden, um einen Cloud Storage-Bucket mit Amazon S3 zu synchronisieren.