View a markdown version of this page

リクエストへの署名 - Amazon Glacier

このページは、ボールトと 2012 年リリース当時の REST API を使用する、Amazon Glacier サービスの既存のお客様のみを対象としています。

アーカイブストレージソリューションをお探しの場合は、Amazon S3 の Amazon Glacier ストレージクラス (S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive) を使用することをお勧めします。これらのストレージオプションの詳細については、「Amazon Glacier ストレージクラス」を参照してください。

Amazon Glacier (元のスタンドアロンボールトベースのサービス) は、新規顧客を受け入れなくなりました。Amazon Glacier は、ボールトにデータを保存する独自の API を備えたスタンドアロンサービスであり、Amazon S3 および Amazon S3 Glacier ストレージクラスとは異なります。既存のデータは Amazon Glacier で無期限に安全性が確保され、引き続きアクセス可能です。移行は必要ありません。低コストの長期アーカイブストレージの場合、 は Amazon S3 Glacier ストレージクラス AWS を推奨します。これにより、S3 バケットベースの APIs、低コスト、 AWS サービス統合で優れたカスタマーエクスペリエンスを実現できます。 AWS リージョン 拡張機能が必要な場合は、Amazon Glacier ボールトから Amazon S3 Glacier ストレージクラスにデータを転送するためのAWS ソリューションガイダンスを使用して、Amazon S3 Glacier ストレージクラスへの移行を検討してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

リクエストへの署名

Amazon Glacier では、リクエストに署名することで、送信するすべてのリクエストを認証する必要があります。リクエストに署名するには、暗号化ハッシュ関数を使用してデジタル署名を計算します。暗号化ハッシュは、入力データから一意のハッシュ値生成して返す関数です。ハッシュ関数に渡される入力データとしては、リクエストのテキスト、およびシークレットアクセスキーが該当します。ハッシュ関数から返されるハッシュ値をリクエストに署名として含めます。署名は、リクエストの Authorization ヘッダーの一部です。

Amazon Glacier は、リクエストを受け取ると、リクエストの署名に使用されたものと同じハッシュ関数と入力を使用して署名を再計算します。再計算された署名とリクエスト内の署名が一致した場合、Amazon Glacier はリクエストを処理します。それ以外の場合、リクエストは拒否されます。

Amazon Glacier は、AWS 署名バージョン 4 を使用した認証をサポートします。署名の計算プロセスは 3 つのタスクに分けることができます。

  • タスク 1: 正規リクエストを作成する

    HTTP リクエストを正規形式に変換します。Amazon Glacier では、送信された署名と比較するために署名を再計算するときに正規形式が使用されるので、同じ正規形式を使用する必要があります。

  • タスク 2: 署名文字列を作成する

    暗号化ハッシュ関数への入力値の 1 つとして使用する文字列を作成します。署名文字列と呼ばれる文字列は、ハッシュアルゴリズムの名前、要求日付、認証情報スコープの文字列、および前のタスクで正規化されたリクエストを結合したものです。認証情報スコープ文字列自体は、日付、 AWS リージョン、およびサービス情報の連結です。

  • タスク 3: 署名を作成する

    2 つの入力文字列 (署名文字列派生キー) を受け付ける暗号化ハッシュ関数を使用して、リクエストの署名を作成します。シークレットアクセスキーから開始し、認証情報スコープの文字列を使用して一連のハッシュベースのメッセージ認証コード (HMAC) を作成することで、派生キーが計算されます。この署名手順で使用するハッシュ関数は、データのアップロードのための Amazon Glacier API で使用する木構造ハッシュアルゴリズムではありません。

署名の計算例

次の例で、ボールトの作成 (PUT vault) の署名を作成する詳細な手順を示します。実際の署名計算方法を確認するときに、この例を参考にしてください。詳細については、IAM ユーザーガイドの AWS API リクエストの署名を参照してください。

例では、次のように想定しています。

  • リクエストのタイムスタンプは Fri, 25 May 2012 00:24:53 GMT

  • エンドポイントは米国東部 (バージニア北部) リージョン us-east-1

リクエストの一般的な構文 (JSON の本体を含む) は次のとおりです。

PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

タスク 1: 正規リクエストを作成する」で計算されるリクエストの正規形式は次のとおりです。

PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

正規リクエストの最後の行はリクエストボディのハッシュです。また、正規リクエストの 3 行目が空であることに注意してください。これは、この API のクエリ​パラメータがないためです。

タスク 2: 署名する文字列を作成する」で署名する文字列は次のとおりです。

AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743

署名する文字列の最初の行はアルゴリズム、2 行目はタイムスタンプ、3 行目は認証情報スコープ、最後の行は「タスク 1: 正規リクエストを作成する」で作成した正規リクエストのハッシュです。認証情報スコープで使用するサービス名は glacier です。

タスク 3: 署名を作成する」について、派生キーは次のように表されます。

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")

シークレットアクセスキー wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY を使用する場合、計算された署名は次のようになります。

3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

最後のステップは、Authorization ヘッダーの構築です。デモンストレーションのアクセスキー AKIAIOSFODNN7EXAMPLE の場合、ヘッダーは次のとおりです (読みやすいように改行しています)。

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

ストリーミングオペレーションの署名の計算

アーカイブのアップロード (POST archive)パートのアップロード (PUT uploadID) の 2 つのストリーミングオペレーションでは、リクエストに署名して送信する際に、追加のヘッダーとして x-amz-content-sha256 を含める必要があります。ストリーミングオペレーションの署名手順は、ストリーミング用のヘッダーを追加することを除いて、他のオペレーションとまったく同じです。

ストリーミングヘッダー x-amz-content-sha256 の計算は、アップロードされる全コンテンツ (ペイロード) の SHA256 ハッシュに基づいています。この計算は、SHA256 木構造ハッシュとは異なりますのでご注意ください (チェックサムの計算)。ペイロードデータの SHA 256 ハッシュ値は、基本的にはペイロードデータの SHA256 木構造ハッシュと異なるものになります。

ペイロードデータがバイトの配列として指定されている場合には、以下の Java コードスニペットを使用して SHA256 ハッシュを計算できます。

public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }

これと同じく、C# では、以下のコードスニペットに示すように、ペイロードデータの SHA256 ハッシュを計算できます。

public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }

ストリーミング API の署名の計算例

以下の例は、2 つある Amazon Glacier のストリーミング API の 1 つ、アーカイブのアップロード (POST archive) の署名の作成に関する詳細を示したものです。例では、次のように想定しています。

  • リクエストのタイムスタンプは Mon, 07 May 2012 00:00:00 GMT

  • エンドポイントは米国東部 (バージニア北部) リージョン us-east-1 です。

  • コンテンツのペイロードは、文字列「Welcome to Amazon Glacier」です。

(JSON 本文も含めた) 一般的なリクエストの構文を以下の例に示します。 x-amz-content-sha256 ヘッダーが含まれていることに注意してください。この単純な例では、x-amz-sha256-tree-hashx-amz-content-sha256 は同じ値となっています。ただし、このことは、1 MB を超えるアーカイブをアップロードする場合には必ずしも当てはまりません。

POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

タスク 1: 正規リクエストを作成する」で計算されるリクエストの正規形式は、以下のとおりです。ストリーミングヘッダー x-amz-content-sha256 が値に含まれていることにご注意ください。これは、ペイロードを読み取って SHA256 ハッシュを計算してから、署名を計算する必要があることを示しています。

POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628

署名の計算手順の残りの部分については、「署名の計算例」で説明しています。Authorization ヘッダーはシークレットアクセスキー wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY を使用しています。アクセスキー AKIAIOSFODNN7EXAMPLE は、以下に示すとおりです (読みやすくなるよう、改行を追加しています)。

Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6