API リクエストに対する AWS Signature Version 4 - AWS Identity and Access Management

API リクエストに対する AWS Signature Version 4

重要

AWS SDK (「サンプルコードとライブラリ」を参照) または AWS Command Line Interface (AWS CLI) ツールを使用して API リクエストを AWS に送信する場合、SDK および CLI クライアントが指定したアクセスキーを使用してリクエストを認証するため、署名プロセスをスキップできます。正当な理由がない限り、常に SDK または CLI を使用することをお勧めします。

複数の署名バージョンをサポートするリージョンでは、リクエストに手動で署名する場合、使用する署名バージョンを指定する必要があります。マルチリージョンアクセスポイントにリクエストを送信すると、SDK と CLI は Signature Version 4A の使用に自動的に切り替えます。追加の設定は不要です。

リクエストで送信する認証情報には、署名が含まれている必要があります。AWSSignature Version 4 (SigV4) は、AWS API リクエストに認証情報を追加するための AWS 署名プロトコルです。

API リクエストの署名には、シークレットアクセスキーを使用しません。そうではなく、SigV4 署名プロセスを使用します。リクエストを署名するには、以下の手順を実行します。

  1. リクエストの詳しい情報に基づいて正規リクエストを作成します。

  2. 自分の AWS 認証情報を使用して署名を計算します。

  3. 求めた署名を認証ヘッダーとしてリクエストに追加します。

AWS は、このプロセスをレプリケートして署名を検証し、検証結果に応じてアクセスを許可または拒否します。

注記

AWS は、マルチリージョン API リクエストの署名をサポートする Signature Version 4A という拡張機能もサポートしています。詳細については、GitHub で「sigv4a-signing-examples」プロジェクトを参照してください。

AWS SigV4 の仕組み

次の図は、署名を計算する一般的なプロセスを示しています。

署名する文字列、署名キー、計算された署名など、署名の各部分の画像。
  1. 署名する文字列はリクエストのタイプによって異なります。例えば、認証に HTTP Authorization ヘッダーまたはクエリパラメータを使用する場合、リクエスト要素を組み合わせて、署名文字列を作成します。HTTP POST リクエストでは、リクエスト内の POST ポリシーは、署名する文字列です。

  2. 署名キーは、一続きの計算で求められ、各ステップの結果が次の計算に送られます。最後の手順は署名キーです。

  3. AWS サービスが認証されたリクエストを受け取ると、リクエストに含まれる認証情報を使用して署名が再作成されます。署名が一致すると、サービスはリクエストを処理します。それ以外の場合、リクエストを拒否します。

詳細については、「AWS API リクエスト署名の要素」を参照してください。

リクエストに署名するタイミング

AWS に API リクエストを送信するためのカスタムコードを記述するときは、リクエストに署名するためのコードを含める必要があります。カスタムコードを書く理由には、以下のような場合が考えられます。

  • AWS SDK がないプログラミング言語を使用しているためです。

  • AWS にリクエストを送る方法を完全に管理する必要がある場合。

API リクエストは AWS SigV4 でアクセスを認証しますが、AWS SDK と AWS CLI はユーザーが指定したアクセスキーを使用してリクエストを認証します。AWS SDK と AWS CLI による認証の詳細については、「追加リソース」を参照してください。

リクエストに署名する理由

署名プロセスは、次のような点でリクエストのセキュリティ確保に役立ちます。

  • リクエスタの ID の確認

    認証されたリクエストには、アクセスキー (アクセスキー ID、シークレットアクセスキー) を使用して作成した署名が必要です。一時的なセキュリティ認証情報を使用している場合、署名の計算にはセキュリティトークンも必要です。詳細については、「AWS security credentials programmatic access」(セキュリティ認証情報のプログラムによるアクセス) を参照してください。

  • 送信中のデータの保護

    送信中のリクエストの改ざんを防ぐために、一部のリクエスト要素からリクエストのハッシュ (ダイジェスト) を計算し、得られたハッシュ値をリクエストの一部として含めます。AWS サービス がリクエストを受け取ると、同じ情報を使用してハッシュを計算し、リクエストに含まれているハッシュ値と比較します。ハッシュ値が一致しない場合、AWS はそのリクエストを拒否します。

  • 潜在的なリプレイ攻撃の防止

    多くの場合、リクエストは、リクエストのタイムスタンプの 5 分以内に AWS に到達する必要があります。その条件を満たさない場合、AWS はリクエストを拒否します。

AWS SigV4 は、HTTP 認証ヘッダーに表現することも、URL にクエリ文字列として表現することもできます。詳細については、「認証方法」を参照してください。

追加リソース