本頁面說明如何為使用 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查詢字串參數,為特定範圍套用存取控制清單。 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 Canned ACL 類似,包括私人、公開讀取、公開讀寫等。如需 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的服務要求。- Bucket 要求,包括
PUT、GET、DELETE和POST。 - 物件要求,包括
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 在等待要求完成上傳時,不會儲存加密金鑰資訊,但需要金鑰來計算已完成物件的總和檢查碼。 |
GET/POST 值區查詢字串參數:
|
替代方式:
|
從 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 標頭和查詢字串參數。
機構政策對 HMAC 金鑰驗證的影響
如果您要從 Amazon S3 遷移至 Cloud Storage 的工作負載,是依賴雜湊式訊息驗證碼 (HMAC) 金鑰進行驗證,請注意,Google Cloud 組織政策服務可讓管理員強制執行安全限制。constraints/storage.restrictAuthTypes政策可用於禁止使用特定驗證類型。如要進一步瞭解各驗證類型,請參閱「限制驗證類型」。
如果貴機構的政策禁止使用工具設定的 HMAC 金鑰類型,您嘗試連線至 Cloud Storage 時會失敗,並顯示 403 Forbidden 錯誤。
為避免發生這項錯誤,請先諮詢 Google Cloud 機構constraints/storage.restrictAuthTypes管理員,確認是否強制執行政策,以及限制哪些驗證類型 (如有),再遷移依附於 HMAC 金鑰驗證的工作流程。如果無法使用 HMAC 金鑰,您必須調整工具和應用程式,改用其他驗證方法,例如搭配 OAuth 2.0 的服務帳戶憑證。 Google Cloud
後續步驟
- 規劃從 Amazon S3 遷移的作業。
- 使用 Storage 移轉服務,將資料從外部來源移轉至 Cloud Storage,例如 Amazon S3 和 Microsoft Azure Blob 儲存體。
- 建立事件導向移轉作業,使用 Amazon S3 事件通知,讓 Cloud Storage 儲存空間與 Amazon S3 保持同步。