AWS API リクエストの署名 - AWS Identity and Access Management

AWS API リクエストの署名

重要

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

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

リクエストで送信する認証情報には、署名が含まれている必要があります。署名を計算するには、選択されているリクエストの要素を連結し、文字列を作成します。これは、署名する文字列と呼ばれます。次に、署名キーを使用して、署名する文字列の Hash-based Message Authentication Code (HMAC) を計算します。

AWS の署名バージョン 4 では、リクエストの署名にシークレットアクセスキーは使用しません。代わりに、まずシークレットアクセスキーを使用して署名キーを生成します。生成される署名キーは、日付、サービス、およびリージョンによって異なります。さまざまなプログラミング言語の署名キーを取得する方法の詳細については、「リクエスト署名の例」を参照してください。

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

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


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

  • 署名キーについては、図に一連の計算が示されており、各手順の結果は次の手順に入力されます。最後の手順は署名キーです。

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

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

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

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

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

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

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

  • リクエスタの ID の確認

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

  • 送信中のデータの保護

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

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

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