本頁說明如何為使用 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 表示您的
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
要求會針對 my-travel-maps
值區中的 europe/france/paris.jpg
物件變更 ACL。接著 ACL 會將 jeffersonloveshiking@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>jeffersonloveshiking@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>jeffersonloveshiking@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 套用至正在上傳至 Amazon S3 my-travel-maps
值區的 europe/france/paris.jpg
物件。
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 |
在 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 移轉服務,將資料從外部來源移轉至 Cloud Storage,例如 Amazon S3 和 Microsoft Azure Blob 儲存空間。
- 建立事件驅動的移轉作業,使用 Amazon S3 事件通知,讓 Cloud Storage 值區與 Amazon S3 保持同步。