アマゾン ウェブ サービス
全般的なリファレンス (Version 1.0)

AWS API リクエストへの署名

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

注記

手動で HTTP リクエストを作成する場合のみ、HTTP リクエストに署名する方法を学ぶ必要があります。AWS Command Line Interface (AWS CLI) か、AWS SDK のうちの 1 つを使って AWS へのリクエストを作成する場合、これらのツールが、設定時に指定されたアクセスキーを使用して自動的にリクエストに署名します。これらのツールを使う場合は、自分でリクエストに署名する方法を学ぶ必要はありません。

リクエストを署名する必要がある場合

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

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

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

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

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

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

  • リクエスタの ID の確認

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

  • 送信中のデータの保護

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

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

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

リクエストへの署名

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

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

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

署名バージョン

AWS では、署名バージョン 4 と署名バージョン 2 の 2 つの署名バージョンをサポートしています。ぜひ 署名バージョン 4 をお使いください。署名バージョン 2 を必要とする Amazon SimpleDB を除き、すべての AWS サービスで 署名バージョン 4 がサポートされています。両方のバージョンをサポートしている AWS サービスでは、署名バージョン 4 を使用することをお勧めします。

すべての AWS リージョンで 署名バージョン 4 がサポートされます。