本页面介绍使用 API 发送请求的用户如何从 Amazon Simple Storage Service (Amazon S3) 完整迁移到 Cloud Storage。进行完整迁移后,您可以使用 Cloud Storage 的所有功能,包括多项目及 OAuth 2.0 身份验证。
如果您希望快速开始使用 Cloud Storage,您可以选择简单迁移,只需对您当前在 Amazon S3 中使用的工具和库做出几项简单的更改即可。
从 Amazon S3 迁移到 Cloud Storage
如需从 Amazon S3 完整迁移到 Cloud Storage,您需要完成以下步骤:
- 将现有的
x-amz-*
标头更改为相应的x-goog-*
标头。 - 将 AWS 访问控制列表 (ACL) XML 更改为相应的 Cloud Storage ACL XML(请参阅创建和管理访问控制列表)。
- 在请求中设置 x-goog-project-id 标头。
按照 OAuth 2.0 身份验证中所述,完成相关设置以使用 OAuth 2.0 身份验证。第一步是向 Google 注册您的应用(即您将从中发出请求的应用)。使用 OAuth 2.0 时,您的
Authorization
标头将如下所示:Authorization: Bearer OAUTH2_TOKEN
OAuth 2.0 依靠 SSL 维护安全性,不要求应用直接进行加密签名,因此更容易实现。借助 OAuth,您的应用可以请求访问与用户账号关联的数据,并且可以将访问权限限定为多个级别(包括只读、读写和完全控制)。如需了解详情,请参阅 Cloud Storage OAuth 2.0 范围和代表用户访问数据。
访问权限控制
本节介绍了一些访问控制示例,这些示例可帮助您从 Amazon S3 迁移到 Cloud Storage。如需简要了解 Cloud Storage 中的访问权限控制,请参阅访问权限控制。
在 Cloud Storage 中,您可以通过多种方法将 ACL 应用于存储桶和对象(请参阅创建和管理访问控制列表)。其中两种用于指定 ACL 的方法与您在 Amazon S3 中执行的操作类似:
- 借助
acl
查询字符串参数,您可以针对特定范围应用 ACL。 x-goog-acl
请求标头,可让您应用预定义的 ACL(有时称为预设 ACL)。
使用 ACL 查询字符串参数
您可以将 acl
查询字符串参数用于 Cloud Storage 请求,方式与该参数用于 Amazon S3 请求时完全相同。您可以结合使用 acl
参数与 PUT
方法,以将 ACL 应用于以下目标:现有对象、现有存储桶或要创建的存储桶。在 PUT
请求中使用 acl
查询字符串参数时,您必须将 XML 文档附加到请求正文中(使用 Cloud Storage ACL 语法)。XML 文档包含要应用于存储桶或对象的各个 ACL 条目。
以下示例展示了如何向 Amazon S3 发出使用 acl
查询字符串参数的 PUT
请求。ACL 将在请求正文中发送的 XML 文档中定义。PUT
请求会更改名为 europe/france/paris.jpg
的对象的 ACL,该对象位于名为 my-travel-maps
的存储桶中。ACL 会向 jane@gmail.com 授予 FULL_CONTROL
权限。
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Wed, 06 Nov 2013 19:28:18 GMT Content-Length: 598 Content-Type: application/xml Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=4c45f25bb679fdab0de5a287625d6a143414728d93c9aeb9f4cc91c33a1c45fg <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <Owner> <ID>5a6557ba40f7c86496ffceae789fcd888abc1b62a7149873a0fe12c0f60a7d95</ID> <DisplayName>ownerEmail@example.com</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>fd447671d60b979f78ee6fcec7b22afc80e6b26a4db16eed01afb8064047949b</ID> <DisplayName>jane@gmail.com</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
以下是向 Cloud Storage 发出的相同请求:
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Wed, 06 Nov 2013 19:37:33 GMT Content-Length: 268 Content-Type: application/xml Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg <?xml version='1.0' encoding='utf-8'?> <AccessControlList> <Entries> <Entry> <Permission>FULL_CONTROL</Permission> <Scope type="UserByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> </Scope> </Entry> </Entries> </AccessControlList>
请注意,Cloud Storage 不需要在 ACL XML 文档中包含 <Owner/>
元素。如需了解详情,请参阅存储桶和对象所有权。
您还可以结合使用 acl
查询字符串参数和 GET
方法来检索存储桶和对象 ACL。ACL 会在附加于响应正文的 XML 文档中说明。您必须具有 FULL_CONTROL
权限才能在对象或存储桶上应用或检索 ACL。
通过扩展请求标头应用 ACL
您可以在 Cloud Storage 请求中使用 x-goog-acl
标头,将预定义的 ACL 应用于存储桶和对象,此过程与在 Amazon S3 请求中使用 x-amz-acl
标头的方式完全相同。在创建或上传存储桶或对象时,通常使用 x-goog-acl
(x-amz-acl
) 标头将预定义的 ACL 应用于存储桶或对象。Cloud Storage 预定义 ACL 类似于 Amazon S3 预设 ACL,其中包括 private、public-read、public-read-write 以及其他权限设置。如需查看 Cloud Storage 预定义 ACL 的列表,请参阅预定义 ACL。
以下示例显示了一个 PUT
对象请求,该请求将 public-read
ACL 应用于名为 europe/france/paris.jpg
的对象,而该对象正在上传到 Amazon S3 中名为 my-travel-maps
的存储桶。
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Wed, 06 Nov 2013 20:48:42 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=808150c37dbd1b425b2398421d6fc3dd6d4942dfaae9e519fd5835aa62fd62ab <888814 bytes in entity body>
以下是向 Cloud Storage 发出的相同请求:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Wed, 06 Nov 2013 20:49:57 GMT Content-Length: 888814 Content-Type: image/jpg x-goog-acl: public-read Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg <888814 bytes in entity body>
您还可以使用 x-goog-acl
标头将预定义 ACL 应用于现有存储桶或对象。如需执行此操作,请在请求中添加 acl
查询字符串参数,但不要在请求中添加 XML 文档。如果要从一个预定义 ACL 更改为另一个预定义 ACL,或者要将自定义 ACL 更新为预定义 ACL,建议您将预定义 ACL 应用于现有对象或存储桶。例如,以下 PUT
对象请求可将预定义 ACL private
应用于 my-travel-maps
存储桶中的 europe/france/paris.jpg
对象。
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Wed, 06 Nov 2013 00:26:36 GMT Content-Length: 0 x-goog-acl: private Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg <empty entity body>
如需详细了解如何管理 ACL,请参阅创建和管理访问控制列表。
从 Amazon S3 迁移到 Cloud Storage 请求方法
如需在存储桶中读取和写入数据,Cloud Storage 支持的标准 HTTP 请求方法与 Amazon S3 支持的请求方法相同。因此,您目前在 Amazon S3 中使用的大多数工具和库也将适用于 Cloud Storage。Cloud Storage 支持以下请求方法:
GET
服务请求。PUT
、GET
、DELETE
等存储桶请求。GET
、POST
、PUT
、HEAD
和DELETE
等对象请求。
有关详情,请参阅 XML API 参考方法。请记住,当您向 Cloud Storage 发送请求时,您需要视情况更改请求正文,使其使用适当的 Cloud Storage 语法。例如,在为存储桶创建生命周期配置时,请使用 Cloud Storage 生命周期 XML,而不是使用 Amazon S3 生命周期 XML。
下面总结了 Cloud Storage XML API 和 Amazon S3 之间的一些差异:
Amazon S3 功能 | Cloud Storage XML API 功能 |
---|---|
在分段上传中使用客户提供的加密键时,最终请求不包括客户提供的加密键。 | 在 Cloud Storage XML API 中,分段上传中的所有请求(包括最终请求)要求您提供相同的客户提供的加密密钥。存在此要求的原因是,Cloud Storage 在等待上传完成时不会存储您的加密密钥信息,但这项请求需要使用密钥来计算已完成对象的校验和。 |
在 Amazon S3 中,V4 签名可用于对使用分块传输编码的上传进行身份验证。 | 在 Cloud Storage XML API 中,分块传输编码和 V4 签名目前无法同时使用。某些 Amazon S3 工具默认使用分块传输编码以及签名;您应该在此类情况下停用分块传输编码。 |
GET/POST 存储桶查询字符串参数:
|
替代方案:
|
多对象删除。 POST /?delete |
使用 Google Cloud 控制台可轻松移除多个对象。 或者,也可以通过 JSON API 发送批量请求,以减少客户端发起的 HTTP 连接数。 |
从 Amazon S3 迁移到 Cloud Storage 标头
Cloud Storage 可使用多个标准 HTTP 标头以及多个自定义(扩展)HTTP 标头。如果您要从 Amazon S3 转换到 Cloud Storage,您可以将自定义 Amazon S3 标头转换为等效的 Cloud Storage 自定义标头或类似的功能,如下表所示。
对于大部分 Amazon S3 标头,您只需将 x-amz
前缀替换为 x-goog
即可实现转换:
Amazon S3 标头 | Cloud Storage 标头 |
---|---|
x-amz-storage-class |
x-goog-storage-class |
x-amz-acl |
x-goog-acl |
x-amz-date |
x-goog-date |
x-amz-meta-* |
x-goog-meta-* |
x-amz-copy-source |
x-goog-copy-source |
x-amz-metadata-directive |
x-goog-metadata-directive |
x-amz-copy-source-if-match |
x-goog-copy-source-if-match |
x-amz-copy-source-if-none-match |
x-goog-copy-source-if-none-match |
x-amz-copy-source-if-unmodified-since |
x-goog-copy-source-if-unmodified-since |
x-amz-copy-source-if-modified-since |
x-goog-copy-source-if-modified-since |
对于少数 Amazon S3 标头,有的需要转换为完全不同的 Cloud Storage 标头,有的不适用于 Cloud Storage:
Amazon S3 标头 | Cloud Storage 标头 |
---|---|
x-amz-server-side-encryption |
不需要。Cloud Storage 会在数据写入磁盘之前自动加密所有数据。有关详情,请参阅加密。 |
x-amz-grant-* |
具有预定义 ACL 值的 x-goog-acl 。 |
x-amz-version-id |
x-goog-generation |
x-amz-mfa |
使用 OAuth 2.0 身份验证。 |
x-amz-decoded-content-length |
不支持作为 x-goog 标头 |
x-amz-website-redirect-location ,x-amz-copy-source-range |
不适用 |
如需了解 Cloud Storage 标头,请参阅适用于 XML API 的 HTTP 标头和查询字符串参数。
后续步骤
- 规划从 Amazon S3 进行的迁移。
- 使用 Storage Transfer Service 将数据从外部来源转移到 Cloud Storage(外部来源有 Amazon S3 和 Microsoft Azure Blob Storage 等)。
- 创建事件驱动型转移作业,以使用 Amazon S3 事件通知使 Cloud Storage 存储桶与 Amazon S3 保持同步。