このページでは、Amazon Simple Storage Service(Amazon S3)から Cloud Storage への単純な移行を行う方法について説明します。単純な移行では、既存のツールとライブラリを使用して Amazon S3 への認証済み REST リクエストを生成し、認証済みリクエストを Cloud Storage に送信します。
単純な移行シナリオでの Amazon S3 から Cloud Storage への移行
Cloud Storage にリクエストを送信するには、次の手順を行います。
x-amz-project-id
ヘッダーを使用します。既存のツールまたはライブラリで次の変更を加えます。
- Cloud Storage XML API リクエスト エンドポイントを使用するようにリクエスト エンドポイントを変更します。
- Amazon Web Services(AWS)のアクセスキーと秘密鍵を、対応する Cloud Storage のアクセス ID と秘密(総称して Cloud Storage HMAC キー)に置き換えます。
x-amz-
ヘッダーで、サポートされている Cloud Storage の値が使用されていることを確認してください。たとえば、x-amz-storage-class
では、使用可能ないずれかの Cloud Storage ストレージ クラスが使用されている必要があります。Cloud Storage XML API を単純な移行のシナリオで使用する場合、
AWS
署名 ID をAuthorization
ヘッダーで使用すると、Cloud Storage ではx-amz-*
ヘッダーと Amazon S3 ACL XML 構文がリクエストに存在するものと想定します。Cloud Storage は、ヘッダー表にリストされているものなど、x-goog-*
と同等のものを持つx-amz-*
ヘッダーを処理し、x-amz-decoded-content-length
ヘッダーを処理します。
これらの変更を行うと、既存のツールとライブラリの使用を開始し、HMAC リクエストを Cloud Storage に送信できます。
たとえば、次のサンプルは、Amazon S3 SDK を使用して Cloud Storage バケットをリストする方法を示しています。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境変数を s3nsapis.fr
に設定します。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境変数を s3nsapis.fr
に設定します。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境変数を s3nsapis.fr
に設定します。
プロジェクト ヘッダーを指定する
プロジェクトを指定する必要があるリクエストでは、x-amz-project-id
ヘッダーを使用します。
なお、Amazon S3 にはプロジェクトがないため、使用するツールやクライアント ライブラリによっては、x-amz-project-id
ヘッダーを指定できない場合があります。
HMAC キーの使用
単純な移行シナリオで Cloud Storage XML API を使用するには、認証に Cloud Storage のハッシュベースのメッセージ認証コード(HMAC)キーを使用します。通常は、サービス アカウントに関連付けられた HMAC キーを作成する必要がありますが、ユーザー アカウントに関連付けられたものを使用することもできます。
単純な移行シナリオでの認証
Authorization ヘッダーの使用
認証が必要な単純な移行のシナリオのオペレーションでは、Amazon S3 にリクエストを送信するときと同じように、Authorization
リクエスト ヘッダーを含めます。Amazon S3 リクエストの Authorization
ヘッダーの構文は次のとおりです。
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
単純な移行のシナリオでは、Cloud Storage HMAC アクセス ID を使用するようにヘッダーを変更し、付けた Signature
が確実に Cloud Storage HMAC 秘密鍵で計算されるようにします。
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Authorization
ヘッダーの各要素は次のとおりです。
ALGORITHM: 使用した署名アルゴリズムとバージョン。
AWS4-HMAC-SHA256
を指定すると、HMAC V4 署名を使用し、x-amz-*
ヘッダーを送信することになります。また、GOOG4-HMAC-SHA256
を指定した場合、HMAC V4 署名を使用し、x-goog-*
ヘッダーを送信することになります。GOOG4-RSA-SHA256
を指定した場合は、RSA V4 署名を使用し、x-goog-*
ヘッダーを送信することになります。GOOG-ACCESS-ID: アクセス ID は、リクエストを作成して署名するエンティティを識別されます。単純な移行では、Amazon S3 にアクセスするために使用するアマゾン ウェブ サービス(AWS)のアクセスキー ID を、Cloud Storage HMAC アクセス ID に置き換えます。Cloud Storage HMAC アクセス ID は
GOOG
で始まります。CREDENTIAL_SCOPE: 署名で定義されている認証情報スコープ。単純な移行では、ALGORITHM 値に
AWS4-HMAC-SHA256
を使用している場合は認証情報スコープを変更する必要がありません。SIGNED_HEADERS: リクエストに署名するために含めなければならないヘッダー名をセミコロンで区切ったリスト。すべてのヘッダーは小文字で表し文字コードで並べ替える必要があります。
Amazon S3 スタイルの署名付きヘッダー文字列の例は次のとおりです。
content-type;host;x-amz-date
単純な移行では、署名付きヘッダー文字列を変更する必要はありません。
SIGNATURE: リクエストの認証を可能にする署名。簡単な移行では、AWS アクセスキー情報を同等の Cloud Storage HMAC キー情報に置き換えます。
サンプルの認証リクエスト
次の例では、/europe/france/paris.jpg
という名前のオブジェクトを my-travel-maps
という名前のバケットにアップロードし、定義済みの ACL public-read
を適用して審査担当者用にカスタム メタデータ ヘッダーを定義します。Amazon S3 のバケットに対するリクエストを次に示します。
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Cloud Storage のバケットに対するリクエストを次に示します。
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.s3nsapis.fr Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
このリクエストによって作成される正規リクエストは次のとおりです。
PUT /europe/france/paris.jpg content-length:888814 content-type:image/jpg host:my-travel-maps.storage.s3nsapis.fr x-amz-acl:public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer:joe,jane content-length,content-type,host,x-amz-acl,x-amz-date,x-amz-meta-reviewer 82e3da8b3f35989512e8d428add7eca73ab0e5f36586e66fbad8e1051343cbd2
このリクエストに対して作成される署名対象文字列は次のとおりです。
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
このリクエストでは、Content-MD5 ヘッダーを指定しなかったため、メッセージの 2 行目に空文字列が表示されています。
単純な移行シナリオでのアクセス制御
単純な移行をサポートするために、Cloud Storage では Amazon S3 によって生成される ACL を使用できます。単純な移行のシナリオでは、AWS
を署名 ID として使用することで、Amazon S3 ACL XML 構文を使用して、ACL 構文に対応するよう Cloud Storage に指示します。使用する Amazon S3 ACL が Cloud Storage ACL モデルにマッピングされることを確認する必要があります。たとえば、ツールやライブラリが、Amazon S3 の ACL 構文を使用してバケットの WRITE
権限を付与する場合、バケットの READ
権限も付与する必要があります。これは、Cloud Storage の権限が入れ子構造であるためです。Cloud Storage 構文を使用して WRITE
権限を付与するときには、WRITE
と READ
の両方の権限を指定する必要はありません。
Cloud Storage は、次のシナリオで Amazon S3 ACL 構文をサポートします。
- Cloud Storage に対して ACL を取得させるリクエスト(
GET
Object やGET
Bucket リクエストなど)で、Cloud Storage は Amazon S3 ACL 構文を返します。 - Cloud Storage に対して ACL を適用させるリクエスト(
PUT
Object やPUT
Bucket リクエストなど)で、Cloud Storage は Amazon S3 ACL 構文を受け取ることを予期します。
単純な移行のシナリオの Authorization
ヘッダーは、署名 ID として AWS
を使用しますが、Cloud Storage HMAC アクセス ID もあわせて使用します。
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
次の例は、オブジェクトの ACL を返す Cloud Storage に対する GET
リクエストを示しています。
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.s3nsapis.fr Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534
リクエストのレスポンスには、Amazon S3 ACL 構文を使用する ACL が含まれています。
<?xml version='1.0' encoding='UTF-8'?> <AccessControlPolicy> <Owner> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490 </ID> <DisplayName>OwnerName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='CanonicalUser'> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490</ID> <DisplayName>UserName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
次の例は、オブジェクトの ACL を設定する Cloud Storage に対する PUT
リクエストを示しています。次の例は、Amazon S3 ACL 構文を使用するリクエストの本文を示しています。
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.s3nsapis.fr Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml Content-Length: 337 X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534 <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>example-service-account@example-project.s3ns-system.iam.gserviceaccount.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
なお、単純な移行のシナリオでは、Authorization
ヘッダーで GOOG1
署名 ID を使用することもできます。この場合、Cloud Storage ACL 構文を使用し、すべての x-amz-*
ヘッダーが x-goog-*
に変更されていることを確認する必要があります。以上の方法も可能ですが、Cloud Storage のすべての利点を実現するため、完全な移行を選択することをおすすめします。
Amazon S3 と XML API の互換性に関するサポート
XML API の相互運用性については、google-cloud-storage タグを使用してスタック オーバーフローを参照してください。