本頁面介紹使用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 保持同步。