リクエストの認証 (AWS 署名バージョン 4)
トピック
Amazon S3 とのすべてのやり取りは認証されるか匿名で行われます。このセクションでは、AWS 署名バージョン 4 アルゴリズムを使用したリクエスト認証について説明します。
注記
AWS SDK (「サンプルコードとライブラリ
AWS 署名バージョン 4 による認証では、リクエストの署名方法に応じて、以下の一部またはすべてが提供されます。
-
リクエスタの ID の確認 – 認証されたリクエストには、アクセスキー (アクセスキー ID、シークレットアクセスキー) を使用して作成した署名が必要です。アクセスキーの取得に関する詳細については、「AWS 全般のリファレンス」の「セキュリティ認証情報の理解と取得」を参照してください。一時的なセキュリティ認証情報を使用している場合、署名の計算にはセキュリティトークンも必要です。詳細については、「IAM ユーザーガイド」の「Requesting Temporary Security Credentials」を参照してください。
-
転送中のデータ保護 – 転送中にリクエストが改ざんされないようにするには、リクエスト要素の一部を使用してリクエスト署名を計算します。リクエストを受信すると、Amazon S3 は同じリクエスト要素を使用して署名を計算します。Amazon S3 が受信したリクエストコンポーネントが、署名の計算に使用されたコンポーネントと一致しない場合、Amazon S3 はリクエストを拒否します。
-
リクエストの署名済み部分の再利用に対する保護 – リクエストの署名済み部分 (AWS 署名を使用) は、リクエストのタイムスタンプから 15 分間有効です。署名済みリクエストにアクセス可能な権限のない関係者は、15 分間の有効期間内であれば、リクエストの有効性に影響を与えることなく、リクエストの署名されていない部分を変更できます。このため、リクエストヘッダーと本文に署名し、Amazon S3 に HTTPS リクエストを行い、AWS ポリシーで
s3:x-amz-content-sha256条件キー (Amazon S3 署名バージョン 4 の認証固有のポリシーキー を参照) を使用して Amazon S3 リクエスト本文への署名をユーザーに要求することで、保護を最大化することをお勧めします。
注記
Amazon S3 では、署名バージョン 4 がサポートされています。署名バージョン 4 は、すべての AWS リージョンで AWS のサービスに対するインバウンドの API リクエストを認証するためのプロトコルです。現時点では、2014 年 1 月 30 日以前に作成された AWS リージョン は、以前のプロトコルである署名バージョン 2 のサポートを継続します。2014 年 1 月 30 日以降の新しいリージョンでは、署名バージョン 4 のみがサポートされます。そのため、これらのリージョンに対するすべてのリクエストは署名バージョン 4 で実行される必要があります。AWS 署名バージョン 2 の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「REST リクエストの署名と認証」を参照してください。
認証方法
認証情報は、次のいずれかの方法で表現できます。
-
HTTP Authorization ヘッダー – HTTP
Authorizationヘッダーの使用は、Amazon S3 リクエストを認証する最も一般的な方法です。すべての Amazon S3 REST オペレーション (POST リクエストを使用したブラウザベースのアップロードを除く) には、このヘッダーが必要です。Authorizationヘッダー値、および署名の計算方法や関連するオプションの詳細については、「リクエストの認証: Authorization ヘッダーの使用 (AWS 署名バージョン 4)」を参照してください。 -
クエリ文字列パラメータ – クエリ文字列を使用すると、リクエスト全体を URL で表現できます。この場合、クエリパラメータを使用して、認証情報を含むリクエスト情報を提供します。リクエスト署名は URL の一部であるため、この種類の URL は署名付き URL と呼ばれることがよくあります。署名付き URL を使用して、クリック可能なリンクを HTML に埋め込むことができます。このリンクは最大 7 日間有効です。詳細については、「リクエストの認証: クエリパラメータの使用 (AWS 署名バージョン 4)」を参照してください。
Amazon S3 は、HTTP POST リクエストを使用するブラウザベースのアップロードもサポートしています。HTTP POST リクエストを使用すると、ブラウザから直接 Amazon S3 にコンテンツをアップロードできます。POST リクエストの認証については、「POST (AWS 署名バージョン 4) を使用したブラウザベースのアップロード」を参照してください。
リクエストへの署名の概要
リクエストで送信する認証情報には、署名が含まれている必要があります。署名を計算するには、選択されているリクエストの要素を連結し、文字列を作成します。これは、署名する文字列と呼ばれます。次に、署名キーを使用して、署名する文字列の Hash-based Message Authentication Code (HMAC) を計算します。
AWS の署名バージョン 4 では、リクエストの署名にシークレットアクセスキーは使用しません。代わりに、まずシークレットアクセスキーを使用して署名キーを生成します。生成される署名キーは、日付、サービス、およびリージョンによって異なります。さまざまなプログラミング言語で署名キーを取得する方法の詳細については、「署名バージョン 4 の署名キーを取得する方法の例」を参照してください。
次の図は、署名を計算する一般的なプロセスを示しています。
署名する文字列はリクエストのタイプによって異なります。たとえば、認証に HTTP Authorization ヘッダーまたはクエリパラメータを使用する場合、リクエスト要素のさまざまな組み合わせを使用して、署名する文字列を作成します。HTTP POST リクエストでは、リクエスト内の POST ポリシーは、署名する文字列です。署名する文字列の計算の詳細については、このセクションの最後にあるリンクを参照してください。
署名キーについては、図に一連の計算が示されており、各手順の結果は次の手順に入力されます。最後の手順は署名キーです。
認証されたリクエストを受信すると、Amazon S3 サーバーはリクエストに含まれる認証情報を使用して署名を再作成します。署名が一致した場合、Amazon S3 はリクエストを処理します。一致しない場合、リクエストは拒否されます。
リクエストの認証に関する詳細については、以下のトピックを参照してください。