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

AWS API リクエストの署名

重要

AWS SDKAWS Command Line Interface (AWS CLI)、およびその他の AWS ツールは、ツールの設定時に指定するアクセスキーを使用して API リクエストに署名します。これらのツールを使うときに、API リクエストへの署名方法を学ぶ必要はありません。次のドキュメントは API リクエストへの署名方法を説明しますが、これが役立つのは AWSAPI リクエストを送信および署名するために独自のコードを記述している場合のみです。独自のコードを記述するのではなく、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) がサポートされています。SigV2 を必要とする Amazon SimpleDB を除き、すべての AWS リージョン にあるすべての AWS サービスが SigV4 をサポートします。AWS CLI を含めた AWS SDK は、SigV4 をサポートするすべてのサービスに対して自動で SigV4 を使用します。API リクエストに手動で署名する場合は、同じ操作を実行する必要があります。

AWS は、Signature Version 4A (SigV4A) と呼ばれる SigV4 の拡張機能を展開しています。この拡張機能により、複数の AWS リージョン で有効な署名が有効になります。これは、例えば、Amazon S3 マルチリージョンアクセスポイントを使用して、マルチリージョン API リクエストに署名するために必要です。AWS SDK および AWS CLI は SigV4A をサポートし、必要なときに自動的に使用します。

注記

例えば IAM ロールを使用する場合など、一時的なセキュリティ認証情報で Sigv4A を使用するには、必ず AWS Security Token Service (AWS STS) でリージョンエンドポイントから一時的認証情報を要求してください。AWS STS (sts.amazonaws.com) にグローバルエンドポイントを使用しないでください。 デフォルトでは、グローバルエンドポイントからの一時的認証情報は SigV4A では機能しないためです。AWS STS では、どのリージョンエンドポイントでも使用できます