重要
AWS SDK または CLI を使用していない限り、リクエストの認証情報を提供する署名を計算するコードを記述する必要があります。AWS Signature Version 4 での署名計算は複雑な作業になる場合があるため、可能な限り AWS SDK または CLI を使用することをお勧めします。
Signature Version 4 の署名を使用する各 HTTP/HTTPS リクエストには、これらの要素を含める必要があります。
[Elements] (要素)
エンドポイント仕様
リクエストの送信先となるエンドポイントの DNS 名を指定します。この名前には通常、サービスコードとリージョンが含まれます。たとえば、us-east-1
リージョンの Amazon DynamoDB のエンドポイントは dynamodb.us-east-1.amazonaws.com
です。
HTTP/1.1 リクエストには、Host
ヘッダーを含める必要があります。HTTP/2 リクエストの場合は、:authority
ヘッダー、または Host
ヘッダーを含められます。HTTP/2 仕様にのみ準拠するには、:authority
ヘッダーのみ使用します。すべてのサービスが HTTP/2 リクエストをサポートしているわけではありません。
各サービスでサポートされているエンドポイントについては、「AWS 全般のリファレンス」の「サービスエンドポイントとクォータ」を参照してください。
アクション
サービスの API アクションを指定します。たとえば、DynamoDB CreateTable
アクションや Amazon EC2 DescribeInstances
アクションなどです。
各サービスでサポートされているアクションについては、「サービス認可リファレンス」を参照してください。
アクションパラメータ
リクエストで指定されたアクションのパラメータを指定します。各 AWS API アクションには、必須およびオプションのパラメータのセットがあります。API バージョンは通常、必須パラメータです。
API アクションでサポートされるパラメータについては、サービスの「API リファレンス」を参照してください。
日付
リクエストの日付と時刻を指定します。日付と時刻をリクエストに含めると、サードパーティーによるリクエストの傍受や再送信の防止に役立ちます。認証情報スコープで指定した日付は、リクエストの日付と一致する必要があります。
タイムスタンプは UTC で、YYYYMMDDTHHMMSSZ の ISO 8601 形式を使用する必要があります。例えば、20220830T123600Z
と指定します。タイムスタンプにミリ秒を含めないでください。
date
または x-amz-date
ヘッダーを使用するか、x-amz-date
をクエリパラメータとして含めることができます。x-amz-date
ヘッダーが見つからない場合は、date
ヘッダーを探します。
認証情報
送信する各リクエストには、次の情報を含める必要があります。AWS はこの情報を使用してリクエストの有効性と信頼性を確保しています。
-
アルゴリズム – 署名プロセスの一部として使用しているアルゴリズム。
-
SigV4 —
HMAC-SHA256
ハッシュアルゴリズムで Signature Version 4 を指定する場合にAWS4-HMAC-SHA256
を使用します。 -
SigV4a – E
CDSA-P256-SHA-256
ハッシュアルゴリズムを指定するためにAWS4-ECDSA-P256-SHA256
を使用します
-
-
認証情報 – アクセスキー ID と認証情報スコープのコンポーネントを連結して形成される文字列。
-
SigV4 – 認証情報スコープには、アクセスキー ID、YYYYMMDD 形式の日付、リージョンコード、サービスコード、およびスラッシュ (/) で区切った
aws4_request
終了文字列が含まれます。リージョンコード、サービスコード、および終了文字列には、小文字を使用する必要があります。AKIAIOSFODNN7EXAMPLE
/YYYYMMDD
/region
/service
/aws4_request -
SigV4a – 認証情報スコープには、YYYYMMDD 形式の日付、サービス名、およびスラッシュ (/) で区切った
aws4_request
終了文字列が含まれます。このリージョンは別のヘッダーX-Amz-Region-Set
でカバーされているため、認証情報スコープにはこのリージョンが含まれないことに注意してください。AKIAIOSFODNN7EXAMPLE
/YYYYMMDD
/service
/aws4_request
-
-
署名付きヘッダー — 署名に含める HTTP ヘッダーを、セミコロン (;) で区切ります。例えば、
host;x-amz-date
と指定します。SigV4a の場合、リクエストが有効なリージョンセットを指定するリージョンセットヘッダーを含める必要があります。ヘッダー
X-Amz-Region-Set
はカンマ区切り値のリストとして指定されます。次の例は、us-east-1 リージョンと us-west-1 リージョンの両方でリクエストを行うことを許可するリージョンヘッダーを示しています。X-Amz-Region-Set=us-east-1,us-west-1
リージョンでワイルドカード (*) を使用して、複数のリージョンを指定できます。次の例では、ヘッダーを使用して、us-west-1 と us-west-2 の両方でリクエストを行うことができます。
X-Amz-Region-Set=us-west-*
-
署名 — 計算された署名を表す 16 進エンコードされた文字列。
Algorithm
パラメータで指定したアルゴリズムを使用して署名を計算する必要があります。
詳細については、「認証方法」を参照してください。