從 Amazon S3 完整遷移至 Cloud Storage

本頁說明如何為使用 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 的服務要求。
  • 值區要求,包括 PUTGETDELETE
  • 物件要求,包括 GETPOSTPUTHEADDELETE

詳情請參閱 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 值區查詢字串參數:
  • policy:使用 Amazon S3 值區政策。
  • notification:值區事件的通知。
  • requestPayment:設定要求及從值區下載資料費用的支付者。
替代方式:
  • policy:Cloud Storage ACL、專案小組成員資格以及使用多個專案的能力,可因應採用值區政策的諸多情境。
  • notification:使用 gcloud CLI 或 JSON API Pub/Sub 通知
  • 「requestPayment」- 在 Cloud Storage 中,requestPayment 的對等查詢字串參數為 billing
刪除多個物件。
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-locationx-amz-copy-source-range 不適用

如需 Cloud Storage 標頭的參考資料,請參閱 XML API 的 HTTP 標頭和查詢字串參數

後續步驟