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

このページは、Vaults と 2012 RESTAPI年のオリジナルを使用する S3 Glacier サービスの既存のお客様専用です。

アーカイブストレージソリューションをお探しの場合は、Amazon S3、S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive の S3 Glacier ストレージクラスを使用することをお勧めします。これらのストレージオプションの詳細については、Amazon S3 ユーザーガイドの「S3 Glacier ストレージクラス」およびS3 Glacier ストレージクラスを使用した長期データストレージ」を参照してください。 Amazon S3 これらのストレージクラスは Amazon S3 を使用しAPI、すべてのリージョンで利用可能で、Amazon S3 コンソール内で管理できます。Storage Cost Analysis、Storage Lens、高度なオプションの暗号化機能などの機能を提供します。

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

リクエストへの署名

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

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

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

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

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

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

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

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

    2 つの入力文字列 (署名文字列派生キー) を受け付ける暗号化ハッシュ関数を使用して、リクエストの署名を作成します。派生キーは、シークレットアクセスキーから開始し、認証情報スコープ文字列を使用して一連のハッシュベースのメッセージ認証コード () を作成することによって計算されますHMACs。この署名ステップで使用されるハッシュ関数は、データをアップロードAPIsする S3 Glacier で使用されるツリーハッシュアルゴリズムではないことに注意してください。

署名の計算例

次の例で、ボールトの作成 (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

次の例では、S3 Glacier APIsの 2 つのストリーミングアーカイブのアップロード (POST archive)のいずれかである の署名を作成する方法の詳細を説明します。例では、次のように想定しています。

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

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

  • コンテンツのペイロードは、文字列「Welcome to S3 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