AWS API リクエストの署名 - AWS 全般のリファレンス

AWS API リクエストの署名

重要

AWS SDKAWS Command Line Interface (AWS CLI)、およびその他の AWS ツールは、ツールの設定時に指定するアクセスキーを使用して API リクエストに署名します。これらのツールを使うときに、API リクエストへの署名方法を学ぶ必要はありません。次のドキュメントは API リクエストへの署名方法を説明しますが、これが役立つのは AWSAPI リクエストを送信および署名するために独自のコードを記述している場合のみです。AWS は、独自のコードを記述するのではなく、AWS SDK または他の AWS ツールを使用して API リクエストを送信することをお勧めします。

AWS に API リクエストを送るときは、誰がそれらを送信したかを AWS が特定できるように、リクエストに署名してください。リクエストには、AWS アクセスキーを使用して署名します。このアクセスキーは、アクセスキー ID とシークレットアクセスキーで構成されています。Amazon Simple Storage Service (Amazon S3) への匿名リクエスト、および AssumeRoleWithWebIdentity などの AWS Security Token Service (AWS STS) での一部の API オペレーションなど、リクエストには署名する必要がないものもあります。

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

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

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

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

AWS CLI または AWS SDK の 1 つを使うときは、リクエストに署名する必要はありません。これらのツールは、署名を計算し、接続の詳細を管理し、リクエストの再試行を処理し、エラー処理を提供します。また多くの場合、SDK には、AWS とやり取りするアプリケーションの作成を開始するのに役立つ、サンプルコード、チュートリアルなどのリソースも含まれています。

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

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

  • リクエスタの ID の確認

    署名することで、有効なアクセスキーを持っている人がリクエストを送ったことを確認できます。詳細については、「AWS 認証情報の理解と取得」を参照してください。

  • 送信中のデータの保護

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

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

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

リクエストへの署名

リクエストに署名するには、まずリクエストのハッシュ (ダイジェスト) を計算します。次に、そのハッシュ値、リクエストからの他の情報の一部、およびシークレットアクセスキーを使用して、署名として知られる別のハッシュを計算します。次に、次のいずれかの方法で署名をリクエストに追加します。

  • HTTP Authorization ヘッダーを使用します。

  • クエリ文字列の値をリクエストに追加します。この場合の署名は URL の一部であるため、この種類の URL は署名付き URL と呼ばれます。

署名バージョン

AWS では、署名バージョン 4 (SigV4) と署名バージョン 2 (SigV2) がサポートされています。すべての AWS リージョンのすべての AWS のサービスが SigV4 をサポートが、SigV2 を必要とする Amazon SimpleDB を除きます。AWS CLI を含めた AWS SDK は、SigV4 をサポートするすべてのサービスに対して自動で SigV4 を使用します。API リクエストに手動で署名する場合は、同じ操作を実行する必要があります。