

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS API 請求簽章的元素
<a name="reference_sigv-signing-elements"></a>

**重要**  
除非您使用 AWS SDKs或 CLI，否則您必須撰寫程式碼來計算在請求中提供身分驗證資訊的簽章。Signature 第 4 版中的 AWS 簽章計算可能是一項複雜的任務，我們建議您盡可能使用 AWS SDKs或 CLI。

凡是使用 Signature Version 4 簽署的每個 HTTP/HTTPS 請求都必須包含下列元素。

**Topics**
+ [端點規格](#endpoint-specification)
+ [Action](#action)
+ [動作參數](#parameters)
+ [Date](#date)
+ [身分驗證資訊](#authentication)

## 端點規格
<a name="endpoint-specification"></a>

指定您要向其傳送請求的端點的 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 一般參考* 中的[服務端點和配額](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)。

## Action
<a name="action"></a>

指定服務的 API 動作。例如，DynamoDB `CreateTable` 動作或 Amazon EC2 `DescribeInstances` 動作。

如需每個服務支援的動作，請參閱[服務授權參考](https://docs.aws.amazon.com//service-authorization/latest/reference/reference.html)。

## 動作參數
<a name="parameters"></a>

指定請求中指定的動作參數。每個 AWS API 動作都有一組必要和選用的參數。API 版本通常是必要參數。

如需 API 動作支援的參數，請參閱服務的《API 參考》。

## Date
<a name="date"></a>

指定請求的日期和時間。請求中附上日期和時間有助於防止第三方攔截您的請求再於稍後重新提交。您在憑證範圍中指定的日期必須與請求日期相符。

此時間戳記必須為 UTC 時間，而且必須使用下列 ISO 8601 格式：*YYYYMMDD*T*HHMMSS*Z。例如 `20220830T123600Z`。不包含時間戳記的毫秒數。

您可以使用 `date` 標頭或 `x-amz-date` 標頭，或包含 `x-amz-date` 作為查詢參數。如果找不到 `x-amz-date` 標頭，那麼我們會尋找 `date` 標頭。

## 身分驗證資訊
<a name="authentication"></a>

您傳送的每個請求必須包含以下資訊。 AWS 會使用此資訊來確保請求的有效性和真實性。
+ 演算法 – 簽署程序中所使用的演算法。
  + SigV4 – 使用 `AWS4-HMAC-SHA256` 來指定採用 `HMAC-SHA256` 雜湊演算法的第 4 版簽署程序。
  + SigV4a – 使用 `AWS4-ECDSA-P256-SHA256` 指定 `ECDSA-P256-SHA-256` 雜湊演算法。
+ 憑證 – 透過串連存取金鑰 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
  ```

  您可以在區域中使用萬用字元 (\$1) 來指定多個區域。在下列範例中，標頭允許在 us-west-1 和 us-west-2 中發出請求。

  ```
  X-Amz-Region-Set=us-west-*
  ```
+ 簽章 – 表示已計算出之簽章的十六進位編碼字串。您必須使用 `Algorithm` 參數所指定的演算法計算簽章。

如需詳細資訊，請參閱[身分驗證方法](reference_sigv-authentication-methods.md)