Amazon S3 から Cloud Storage への完全な移行

このページでは、API を使用してリクエストを送信するユーザーを対象に、Amazon Simple Storage Service(Amazon S3)から Cloud Storage に完全に移行する方法について説明します。完全に移行した後は、複数のプロジェクトや認証用の OAuth 2.0 など、Cloud Storage のすべての機能を使用できます。

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 を使用できるように設定します。最初にアプリケーション(リクエストの発行元)を Google に登録します。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 を指定する方法のうち 2 つは、Amazon S3 の方法と似ています。

  • acl クエリ文字列パラメータを使用すると、特定の範囲に ACL を適用できます。
  • x-goog-acl リクエスト ヘッダーを使用すると、定義済み ACL(ACL テンプレート)を適用できます。

acl クエリ文字列パラメータの使用

Cloud Storage リクエストの acl 文字列パラメータは、Amazon S3 リクエストで使用する場合とまったく同じ方法で使用できます。acl パラメータを PUT メソッドと組み合わせて使用し、ACL を既存のオブジェクト、既存のバケット、作成中のバケットに適用します。PUT リクエストで acl クエリ文字列パラメータを使用する場合は、Cloud Storage ACL 構文を使用して、リクエストの本文に XML ドキュメントを添付する必要があります。この XML ドキュメントに、バケットまたはオブジェクトに適用する個別の ACL エントリを記述します。

次の例は、acl クエリ文字列パラメータを使用する Amazon S3 に対する PUT リクエストを示しています。ACL は、リクエストの本文で送信される XML ドキュメント内に定義されます。この PUT リクエストは my-travel-maps というバケット内にある europe/france/paris.jpg というオブジェクトの ACL を変更します。この 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=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>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/> 要素は必要ありません。詳しくは、バケットとオブジェクトの所有権をご覧ください。

また、GET メソッドで acl クエリ文字列パラメータを使用して、バケットやオブジェクトの ACL を取得することもできます。ACL は、レスポンスの本文に添付された XML ドキュメントに記載されます。オブジェクトとバケットの ACL を適用または取得するには、FULL_CONTROL 権限が必要です。

拡張リクエスト ヘッダーを使用した ACL の適用

Cloud Storage リクエストで x-goog-acl ヘッダーを使用すると、Amazon S3 リクエストで x-amz-acl ヘッダーを使用する場合とまったく同じ方法で事前に定義された ACL をバケットやオブジェクトに適用できます。通常は、バケットやオブジェクトの作成時またはアップロード時に x-goog-aclx-amz-acl)ヘッダーを使用して、定義済み ACL を適用します。Cloud Storage の定義済み ACL は、Amazon S3 Canned ACL と同様、private、public-read、public-read-write などを含んでいます。Cloud Storage の定義済み ACL のリストについては、定義済み ACL をご覧ください。

次の例は、europe/france/paris.jpg という名前のオブジェクトに public-read ACL を適用する PUT Object リクエストを示しています。このオブジェクトは、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 を適用すると便利です。たとえば、次の PUT Object リクエストでは、定義済み ACL privatemy-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 では、バケットのデータの読み取りと書き込みのために、Amazon S3 でサポートされるメソッドと同じ標準の HTTP リクエスト メソッドがサポートされています。そのため、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」 - gsutil または JSON API Pub/Sub Notifications を使用します。
  • 「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-* x-goog-acl と定義済みの 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 ヘッダーとクエリ文字列パラメータをご覧ください。

次のステップ