リクエストの認証: Authorization ヘッダーの使用 (AWS 署名バージョン 4)
トピック
概要
HTTP Authorization ヘッダーの使用は、認証情報を提供する最も一般的な方法です。POST リクエストおよびクエリパラメータを使用して署名されたリクエストを除き、すべての Amazon S3 オペレーションは Authorization リクエストヘッダーを使用して認証情報を提供します。
以下は、Authorization ヘッダー値の例です。この例では、読みやすいように改行が追加されています。
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
次の表では、前述の例にある Authorization ヘッダー値のさまざまなコンポーネントについて説明しています。
| コンポーネント | 説明 |
|---|---|
AWS4-HMAC-SHA256 |
署名の計算に使用されたアルゴリズム。認証に AWS 署名バージョン 4 を使用する場合は、この値を指定する必要があります。 文字列は、AWS 署名バージョン 4 ( |
Credential |
アクセスキー ID と、署名の計算に使用された日付、リージョン、およびサービスを含むスコープ情報。 この文字列の形式は次のとおりです。
説明は以下のとおりです。
|
SignedHeaders |
|
Signature |
64 個の小文字の 16 進数文字で表現される 256 ビットの署名。例えば、次のようになります。署名計算は、ペイロードの転送に選択したオプションによって異なります。 |
署名計算は、リクエストペイロードの転送に選択した方法によって異なります。S3 は、以下のオプションをサポートしています。
-
単一のチャンクでペイロードを転送する – この場合、次の署名計算オプションがあります。
-
署名付きペイロードオプション – オプションでペイロード全体のチェックサムを計算し、署名計算に含めることができます。これによりセキュリティが向上しますが、ペイロードを 2 回読み取るか、メモリにバッファする必要があります。
例えば、ファイルをアップロードするには、まずファイルを読み取って署名計算用のペイロードハッシュを計算し、リクエストの作成時に再びファイルを読み込む必要があります。ペイロードが小さい場合は、このアプローチが適しています。ただし、大きなファイルの場合、ファイルを 2 回読み取ると非効率になる可能性があるため、代わりにデータをチャンクでアップロードすることをお勧めします。
セキュリティを強化するために、ペイロードのチェックサムを含めることをお勧めします。
-
署名なしペイロードオプション – 署名計算にペイロードチェックサムを含めない。
署名を計算し、Authorization ヘッダー値を構築するステップバイステップの手順については、「Authorization ヘッダーの署名計算: 単一チャンクでのペイロードの転送 (AWS 署名バージョン 4)」を参照してください。
-
-
複数のチャンクでペイロードを転送する (チャンクアップロード) – この場合、ペイロードをチャンクで転送します。ペイロードのサイズに関係なく、ペイロードをチャンクで転送できます。
ペイロードをチャンクに分割できます。固定または可変サイズのチャンクを使用できます。データをチャンクでアップロードすることで、ペイロード全体を読み取って署名を計算する必要がなくなります。代わりに、最初のチャンクで、リクエストヘッダーのみを使用するシード署名を計算します。2 番目のチャンクには最初のチャンクの署名が含まれ、後続の各チャンクにはそれより前のチャンクの署名が含まれます。アップロードの最後に、ペイロードの最後のチャンクの署名を含む、データ長が 0 バイトの最後のチャンクを送信します。詳細については、「Authorization ヘッダーの署名計算: 複数チャンクでのペイロードの転送 (チャンクアップロード) (AWS 署名バージョン 4)」を参照してください。
リクエストに署名するときは、AWS Signature Version 4 または AWS Signature Version 4A のいずれかを使用できます。これら 2 つの大きな違いを決定づけるのは、署名の計算方法です。AWS Signature Version 4A では、署名にはリージョン固有の情報は含まれず、署名の計算には AWS4-ECDSA-P256-SHA256 アルゴリズムが使用されます。
これらのオプションに加えて、リクエストにトレーラーを含めることもできます。リクエストにトレーラーを含めるには、x-amz-content-sha256 を適切な値に設定して、ヘッダーで指定する必要があります。末尾ヘッダーを使用している場合は、ヘッダーに x-amz-trailer を含め、末尾ヘッダー名をカンマ区切りリストの文字列として指定する必要があります。すべての末尾ヘッダーは、最後のチャンクの後に書き込まれます。データを複数のチャンクに分けてアップロードする場合、末尾ヘッダーを送信する前に、データ長が 0 バイトの最後のチャンクを送信する必要があります。
リクエストを送信するときは、次のいずれかの値を持つ x-amz-content-sha256 ヘッダーを追加して、署名計算で前述のオプションのどれを選択したかを Amazon S3 に伝える必要があります。
| ヘッダー値 | 説明 |
|---|---|
|
実際のペイロードチェックサム値 |
この値はオブジェクトの実際のチェックサムであり、データを単一のチャンクでアップロードする場合にのみ使用できます。 |
|
UNSIGNED-PAYLOAD |
オブジェクトを単一の署名なしチャンクとしてアップロードする場合に使用します。 |
|
STREAMING-UNSIGNED-PAYLOAD-TRAILER |
署名なしペイロードを複数のチャンクに分けて送信する場合に使用します。この場合、チャンクのアップロード後に末尾ヘッダーも付加されます。 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD |
複数のチャンクに分けてペイロードを送信する場合に使用します。チャンクは |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER |
複数のチャンクに分けてペイロードを送信する場合に使用します。チャンクは |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD |
複数のチャンクに分けてペイロードを送信する場合に使用します。チャンクは |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER |
複数のチャンクに分けてペイロードを送信する場合に使用します。チャンクは |
リクエストを受信すると、Amazon S3 は Authorization ヘッダーと date ヘッダーの情報を使用して署名する文字列を再作成します。次に、署名が一致することを認証サービスで検証します。リクエスト日は、HTTP Date または x-amz-date ヘッダーを使用して指定できます。両方のヘッダーが存在する場合、x-amz-date が優先されます。
署名が一致した場合、Amazon S3 はリクエストを処理します。一致しない場合、リクエストは失敗します。
詳細については、以下の各トピックを参照してください。
Authorization ヘッダーの署名計算: 単一チャンクでのペイロードの転送 (AWS 署名バージョン 4)
Authorization ヘッダーの署名計算: 複数チャンクでのペイロードの転送 (チャンクアップロード) (AWS 署名バージョン 4)
末尾ヘッダーの署名計算 (チャンクアップロード) (AWS 署名バージョン 4)