所有客戶案例

GCS遷移

Amazon S3 到 Google Cloud Storage 遷移方案

本頁內容
從 Amazon S3 移轉到Cloud Storage

存取權限控制

使用ACL 查詢字串參數

透過擴充請求標頭應用ACL

從Amazon S3 遷移到Cloud Storage 請求方法

從Amazon S3 遷移到Cloud Storage 標頭

後續步驟

本頁面介紹使用API 傳送請求的使用者如何從Amazon Simple Storage Service (Amazon S3) 完整轉移到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 驗證 Authorization 中所述,完成相關設定以使用OAuth 2.0 驗證。

Authorization: Bearer OAUTH2_TOKEN

OAuth 2.0 依賴SSL 維護安全性,不要求應用直接進行加密簽名,更容易實現。

存取權限控制

本節介紹了一些存取控制範例,這些範例可協助您從Amazon S3 移至Cloud Storage。

在Cloud Storage 中,您可以透過多種方法將ACL 應用於儲存桶和物件(請參閱建立和管理存取控制清單)。

  • 以 acl 查詢字串參數,您可以針對特定範圍套用ACL。
  • x-goog-acl 標頭請求頭,可讓您套用預先定義的ACL(有時稱為預設ACL)。

使用ACL 查詢字串參數

您可以在Cloud Storage 請求中使用查詢字串參數,並與Amazon S3 請求 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=4c45f2567996256796a eb9f4cc91c33a1c45fg

<?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=808150c37d 9fd5835aa62fd62ab

<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 儲存桶查詢字串參數:

「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

注意:雖然Amazon S3 沒有 x-goog-project-id 對應標頭,但Cloud Storage 接受用於簡單遷移的 x-amz-project-id。

對於少數Amazon S3 標頭,有的需要轉換為完全不同的雲儲存標頭,有的不適合雲端儲存:

Amazon S3 標頭

Cloud Storage 標頭

x-amz-server-side-encryption

不需要。

x-amz-grant-*

具有預先定義的ACL值的 x-goog-acl。

x-amz-mfa

使用 OAuth 2.0驗證。

x-amz-website-redirect-location, x-amz-copy-source-range

不適用

若要了解Cloud Storage 標頭,請參閱適用於XML API 的HTTP 標頭和查詢字符串參數。

後續步驟

  • 規劃從Amazon S3 的遷移。
  • 使用儲存傳輸服務將資料從外部來源轉移到雲端儲存(外部來源有Amazon S3 和Microsoft Azure Blob Storage 等)。
  • 建立事件驅動型轉移作業,以使用Amazon S3 事件通知使Cloud Storage 儲存桶與Amazon S3 保持同步。