

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

# 指定可以建立已簽署 URL 和已簽署 Cookie 的簽署者
<a name="private-content-trusted-signers"></a>

**Topics**
+ [在信任的金鑰群組 （建議） 和 之間進行選擇 AWS 帳戶](#choosing-key-groups-or-AWS-accounts)
+ [為您的簽署者建立金鑰對](#private-content-creating-cloudfront-key-pairs)
+ [重新格式化私有金鑰 (僅限 .NET 和 Java)](#private-content-reformatting-private-key)
+ [將簽署者新增至分佈](#private-content-adding-trusted-signers)
+ [輪換金鑰對](#private-content-rotating-key-pairs)

若要建立已簽署 URL 或已簽署 Cookie，您需要 *簽署者*。簽署者是您在 CloudFront 中建立的受信任金鑰群組，或包含 CloudFront 金鑰對 AWS 的帳戶。建議您使用具有已簽署 URL 和已簽署 Cookie 信任的金鑰群組。如需詳細資訊，請參閱 [在信任的金鑰群組 （建議） 和 之間進行選擇 AWS 帳戶](#choosing-key-groups-or-AWS-accounts)。

簽署者有兩個用途：
+ 一旦您將簽署者新增至您的分佈，CloudFront 就會開始請求檢視器使用已簽署的 URL 或已簽署的 Cookie 來存取您的檔案。
+ 當您建立已簽署 URL 或已簽署 Cookie 時，您可以使用簽署者金鑰對中的私有金鑰對 URL 或 Cookie 的一部分進行簽署。當有人請求受限制的檔案時，CloudFront 會將 URL 或 Cookie 中的簽章與未簽署的 URL 或 Cookie 進行比較，以確認檔案未遭竄改。CloudFront 也可以驗證 URL 或 Cookie 是否有效，也就是好比說到期日期時間到期了嗎？

當您指定簽署者時，您也可以透過將簽署者新增至快取行為，以間接指定需要簽署 URL 或簽署 Cookie 的檔案。如果分佈只有一個快取行為，則使用者必須使用已簽署 URL 或已簽署 Cookie 來存取該分佈中的任何檔案。如果您建立多個快取行為，並將簽署者新增到一些快取行為，而非其他快取行為，則可以請求檢視器使用已簽署 URL 或已簽署 Cookie 來存取這些物件，而非其他檔案。

若要指定允許建立已簽署 URL 或已簽署 Cookie 的簽署者 (私有金鑰)，並將帳戶新增到 CloudFront 分佈中，請執行以下任務：

1. 決定要使用信任的金鑰群組或 AWS 帳戶 做為簽署者。建議您使用信任的金鑰群組。如需詳細資訊，請參閱 [在信任的金鑰群組 （建議） 和 之間進行選擇 AWS 帳戶](#choosing-key-groups-or-AWS-accounts)。

1. 針對您在步驟 1 中選擇的簽署者，建立公有-私有金鑰對。如需詳細資訊，請參閱 [為您的簽署者建立金鑰對](#private-content-creating-cloudfront-key-pairs)。

1. 如果您使用 .NET 或 Java 建立已簽署 URL 或已簽署 Cookie，請重新格式化私有金鑰。如需詳細資訊，請參閱 [重新格式化私有金鑰 (僅限 .NET 和 Java)](#private-content-reformatting-private-key)。

1. 在您要為其建立已簽署 URL 或已簽署 Cookie 的分佈中，指定簽署者。如需詳細資訊，請參閱[將簽署者新增至分佈](#private-content-adding-trusted-signers)。

## 在信任的金鑰群組 （建議） 和 之間進行選擇 AWS 帳戶
<a name="choosing-key-groups-or-AWS-accounts"></a>

若要使用已簽署 URL 或已簽署 Cookie，您需要 *簽署者*。簽署者可以是您在 CloudFront 中建立的可信金鑰群組，也可以是包含 CloudFront 金鑰對的 AWS 帳戶 。基於下列原因，建議您使用信任的金鑰群組：
+ 使用 CloudFront 金鑰群組時，您不需要使用 AWS 帳戶根使用者來管理 CloudFront 已簽章 URLs公有金鑰。 [AWS 最佳實務](https://docs.aws.amazon.com/general/latest/gr/root-vs-iam.html#aws_tasks-that-require-root)建議您不需要使用根使用者。
+ 透過 CloudFront 金鑰群組，您可以使用 CloudFront API 管理公有金鑰、金鑰群組和受信任的簽署者。您可以使用 API 自動化金鑰建立和金鑰輪換。當您使用 AWS 根使用者時，必須使用 AWS 管理主控台 來管理 CloudFront 金鑰對，因此您無法自動化程序。
+ 由於您可以使用 CloudFront API 管理金鑰群組，因此您也可以使用 AWS Identity and Access Management (IAM) 許可原則來限制不同使用者可執行的動作。例如，您可以允許使用者上傳公有金鑰，但不能刪除公有金鑰。或者，您可以允許使用者刪除公有金鑰，但只有在符合特定條件時，例如使用多因素驗證、從特定網路傳送請求，或是在特定日期和時間範圍內傳送請求。
+ 透過 CloudFront 金鑰群組，您可以將較多數目的公有金鑰與您的 CloudFront 分佈產生關聯，讓您在使用和管理公有金鑰方面擁有更大的彈性。根據預設，您最多可以將四個金鑰群組與單一分佈產生關聯，而且一個金鑰群組中最多可以有五個公有金鑰。

  當您使用 AWS 帳戶根使用者管理 CloudFront 金鑰對時，每個 AWS 帳戶最多只能有兩個作用中的 CloudFront 金鑰對。

## 為您的簽署者建立金鑰對
<a name="private-content-creating-cloudfront-key-pairs"></a>

您用來建立 CloudFront 已簽署 URL 或已簽署 Cookie 的每個簽署者都必須具有公有-私有金鑰對。簽署者使用其私有金鑰來簽署 URL 或 Cookie，並且 CloudFront 會使用公有金鑰來驗證簽章。

建立金鑰對的方式視您使用信任的金鑰群組做為簽署者 (建議使用) 或是 CloudFront 金鑰對而定。如需詳細資訊，請參閱下列區段。您建立的金鑰對必須符合下列需求：
+ 它必須是 SSH-2 RSA 2048 或 ECDSA 256 金鑰對。
+ 它必須是 base64 編碼的 PEM 格式。

為了協助保護應用程式的安全，建議您定期輪換金鑰對。如需詳細資訊，請參閱 [輪換金鑰對](#private-content-rotating-key-pairs)。

### 為信任的金鑰群組建立金鑰對 (建議使用)
<a name="create-key-pair-and-key-group"></a>

若要為信任的金鑰群組建立金鑰對，請執行下列步驟：

1. 建立公有-私有金鑰對。

1. 將公有金鑰上傳至 CloudFront 。

1. 將公有金鑰新增至 CloudFront 金鑰群組。

如需詳細資訊，請參閱下列程序。<a name="private-content-uploading-cloudfront-public-key-procedure"></a>

**建立一組金鑰對**
**注意**  
下列步驟會使用 OpenSSL 做為建立金鑰對的一種方式來示範。還有許多其他方法可以建立 RSA 或 ECDSA 金鑰對。

1. 請執行下列其中一個範例命令：
   + 下列範例命令會使用 OpenSSL 產生長度為 2048 位元的 RSA 金鑰對，並儲存至名為 `private_key.pem` 的檔案。

     ```
     openssl genrsa -out private_key.pem 2048
     ```
   + 下列範例命令會使用 OpenSSL 產生具備 `prime256v1` 曲線的 ECDSA 金鑰對，並儲存至名為 `private_key.pem` 的檔案。

     ```
     openssl ecparam -name prime256v1 -genkey -noout -out privatekey.pem
     ```

1. 產生的檔案同時包含公有和私有金鑰。下列範例命令會從名為 `private_key.pem` 的檔案擷取公有金鑰。

   ```
   openssl rsa -pubout -in private_key.pem -out public_key.pem
   ```

   您稍後會在下列程序中上傳公有金鑰 (在 `public_key.pem` 檔案中)。

**將公有金鑰上傳至 CloudFront**

1. 登入 AWS 管理主控台 並開啟位於 的 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 在導覽功能表中，選擇**公有金鑰**。

1. 選擇**建立公有金鑰**。

1. 在**建立公有金鑰**視窗中，執行下列動作：

   1. 在**金鑰名稱**中，輸入識別公有金鑰的名稱。

   1. 對於 **Key value** (鍵值)，貼上公有金鑰。如果您遵循上述程序中的步驟，則公有金鑰位於名為 `public_key.pem` 的檔案中。若要複製並貼上公有金鑰的內容，您可以：
      + 在 macOS 或 Linux **cat** 命令列上使用這個命令，如下所示：

        ```
        cat public_key.pem
        ```

        複製該命令的輸出，然後將其貼 **Key value** (鍵值) 欄位中。
      + 使用像「記事本」(在 Windows 上) 或「文字編輯」(在 macOS 上) 等純文字編輯器開啟 `public_key.pem` 檔案。複製檔案內容，然後將其貼到 **Key value** (鍵值) 欄位中。

   1. (選用) 對於**註解**，請新增註解以描述公有金鑰。

   完成時，請選擇**新增**。

1. 記錄公有金鑰 ID。您稍後在建立已簽署 URL 或已簽署 Cookie 時使用它，以做為 `Key-Pair-Id` 欄位的值。

**將公有金鑰新增至金鑰群組**

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 中開啟 CloudFront 主控台。

1. 在導覽功能表中，選擇**金鑰群組**。

1. 選擇**新增金鑰群組**。

1. 在**建立金鑰群組**頁面上，執行下列動作：

   1. 在**金鑰群組名稱**中，輸入識別金鑰群組的名稱。

   1. (選用) 在**註解**中，輸入註解以描述金鑰群組。

   1. 在**公有金鑰**中，選取要新增至金鑰群組的公有金鑰，然後選擇**新增**。針對您要新增至金鑰群組的每個公有金鑰重複此步驟。

1. 選擇**建立金鑰對**。

1. 記錄金鑰群組名稱。稍後您可以使用它來將金鑰群組與 CloudFront 分佈中的快取行為產生關聯。(在 CloudFront API 中，您可以使用金鑰群組 ID，將金鑰群組與快取行為產生關聯。)

### 建立 CloudFront 金鑰對 （不建議，需要 AWS 帳戶 根使用者）
<a name="create-key-pair-aws-account"></a>

**重要**  
建議您建立信任金鑰群組的公有金鑰，而不是遵循下列步驟。如需建立已簽署 URL 和已簽署 Cookie 之公有金鑰的建議方式，請參閱[為信任的金鑰群組建立金鑰對 (建議使用)](#create-key-pair-and-key-group)。

您可以使用下列方式建立 CloudFront 金鑰對：
+ 在 中建立金鑰對 AWS 管理主控台 並下載私有金鑰。請參見下列步驟：
+ 使用諸如 OpenSSL 的應用程式建立 RSA 金鑰對，並將公有金鑰上傳到 AWS 管理主控台。如需有關建立 RSA 金鑰對的詳細資訊，請參閱 [為信任的金鑰群組建立金鑰對 (建議使用)](#create-key-pair-and-key-group)。<a name="private-content-creating-cloudfront-key-pairs-procedure"></a>

**在 中建立 CloudFront 金鑰對 AWS 管理主控台**

1.  AWS 管理主控台 使用帳戶根使用者的登入資料 AWS 登入 。
**重要**  
IAM 使用者無法建立 CloudFront 金鑰對。您必須使用根使用者登入資料登入，才能建立金鑰對。

1. 選擇您的帳戶名稱，然後選擇**我的安全登入資料**。

1. 選擇 **CloudFront 金鑰對**。

1. 確認您沒有多個作用中的金鑰對。如果您已經有兩個使用中的金鑰對，則無法建立金鑰對。

1. 選擇**建立新的金鑰對**。
**注意**  
您也可以選擇建立自己的金鑰對並上傳公有金鑰。CloudFront 金鑰對支援 1024、2048 或 4096 位元金鑰。

1. 在**建立金鑰對**的對話方塊中，選擇**下載私有金鑰檔案**，然後將檔案儲存在電腦上。
**重要**  
在安全的位置儲存 CloudFront 金鑰對的私有金鑰，並設定該檔案的許可，以便只有所需的管理員可以讀取該金鑰。如果有人取得您的私有金鑰，他們可以產生有效已簽章的 URL 和已簽章的 Cookie 並下載您的內容。您不能再次取得私有金鑰，因此如果您遺失或刪除它，則必須建立新的 CloudFront 金鑰對。

1. 記錄您的金鑰對的金鑰對 ID。（在 中 AWS 管理主控台，這稱為**存取金鑰 ID**。) 您將在建立已簽署 URL 或已簽署 Cookie 時使用它。

## 重新格式化私有金鑰 (僅限 .NET 和 Java)
<a name="private-content-reformatting-private-key"></a>

如果您正使用 .NET 或 Java 以建立已簽署 URL 或已簽署 Cookie，則無法在預設 PEM 格式中，使用金鑰對的私有金鑰來建立簽章。相反地，請執行下列動作：
+ **.NET 框架** – 將私有金鑰轉換為 .NET 框架使用的 XML 格式。有幾種工具可用。
+ **Java** – 將私有金鑰轉換為 DER 格式。執行此操作的一種方法是使用以下 OpenSSL 命令。在下列命令中，`private_key.pem` 是包含 PEM 格式化的私有金鑰的檔案名稱，而且 `private_key.der` 是執行命令之後包含 DER 格式化的私有金鑰的檔案名稱。

  ```
  openssl pkcs8 -topk8 -nocrypt -in private_key.pem -inform PEM -out {{private_key.der}} -outform DER
  ```

  為了確保編碼器能正確運作，請將 Bouncy Castle Java 的密碼編譯 API 的 JAR 新增到專案中，然後再新增 Bouncy Castle 供應商。

## 將簽署者新增至分佈
<a name="private-content-adding-trusted-signers"></a>

簽署者是信任的金鑰群組 (建議使用) 或 CloudFront 金鑰對，可為分佈建立已簽署 URL 和已簽署 Cookie。若要在 CloudFront 分佈中使用已簽署 URL 或已簽署 Cookie，您必須指定簽署者。

簽署者與快取行為相關聯。在某些物件或不用於相同分佈之其他檔案下，這允許您要求簽章 URL 或簽章 Cookie。只有和對應快取行為相關聯的檔案，分佈才會要求已簽署的 URL 或 Cookie。

同樣地，簽署者只能為與對應快取行為相關聯的檔案簽署 URL 或 Cookie。例如，如果您有一個快取行為下的簽署者和不同快取行為下的不同簽署者，則這兩個簽署者都不能為與其他快取行為的相關檔案建立簽署 URL 或 Cookie。

**重要**  
在您將簽署者新增至分佈之前，請執行下列動作：  
請仔細定義快取行為中的路徑模式，以及快取行為順序，這樣您就不會讓使用者意外地存取您的內容，也不會讓他們存取您希望所有人都能使用的內容。  
例如，假設請求與兩個快取行為的路徑模式相符合。第一個快取行為不需要已簽章的 URL 或已簽章的 Cookie，而第二個快取行為則需要。使用者將能夠在不使用已簽署的 URL 或已簽署的 Cookie 的情況下存取檔案，因為 CloudFront 處理與第一個符合相關聯的快取行為。  
如需喲歐冠路徑模式的詳細資訊，請參閱 [路徑模式](DownloadDistValuesCacheBehavior.md#DownloadDistValuesPathPattern)。
對於您已經用來分佈內容的分配內容，請在新增簽署者之前，確定您已準備好開始產生已簽署 URL 和已簽署 Cookie。當您新增簽署者時，CloudFront 會拒絕未包含有效的已簽署 URL 或已簽署 Cookie 請求。

您可以使用 CloudFront 主控台或 CloudFront API 會將簽署者新增至您的分佈。

------
#### [ Console ]

下列步驟說明如何將信任的金鑰群組新增為簽署者。您也可以新增 AWS 帳戶 做為信任的簽署者，但不建議這麼做。<a name="private-content-adding-trusted-signers-console-procedure"></a>

**使用主控台將簽署者新增至分佈**

1. 記錄要用作信任的簽署者之金鑰群組的金鑰群組 ID。如需詳細資訊，請參閱 [為信任的金鑰群組建立金鑰對 (建議使用)](#create-key-pair-and-key-group)。

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 中開啟 CloudFront 主控台。

1. 使用已簽署 URL 或已簽署 Cookie，選擇要保護其檔案的分佈。
**注意**  
若要將簽署者新增至新的發行套件，您可以指定建立發行套件時步驟 6 所述的相同設定。

1. 選擇 **Behaviors (動作)** 索引標籤。

1. 選取快取行為，其路徑模式符合您要使用已簽署 URL 或已簽署 Cookie 保護的檔案，然後選擇**編輯**。

1. 在**編輯行為**頁面上，執行下列動作：

   1. 針對**限制檢視器存取 (使用已簽署 URL 或已簽署 Cookie)**，按一下**是**。

   1. 針對 **Trusted Key Groups or Trusted Signer** (信任的金鑰群組或可信簽署者)，選擇 **Trusted Key Groups** (信任的金鑰群組)。

   1. 在**信任的金鑰群組**中，選擇要新增的金鑰群組，然後選擇**新增**。如果您要新增多個金鑰群組，請重複此步驟。

1. 選擇**是，編輯**以更新快取行為。

------
#### [ API ]

您可以使用 CloudFront API 將信任的金鑰群組新增為簽署者。您可以將簽署者新增至現有分佈或新分佈。在任一情況下，請在 `TrustedKeyGroups` 元素中指定值。

您也可以新增 AWS 帳戶 做為信任的簽署者，但不建議這麼做。

請參閱 *Amazon CloudFront API 參考*中的下列主題：
+ **更新現有的分佈** - [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)
+ **建立新的分佈** – [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)

------

## 輪換金鑰對
<a name="private-content-rotating-key-pairs"></a>

建議您定期輪換 (變更) 已簽署網址和已簽署 Cookie 的金鑰對。若要輪換您用來建立已簽署 URL 或已簽署 Cookie 的金鑰對，而不會使尚未到期的無效 URL 或 Cookie，請執行以下任務：

1. 建立新的金鑰對，並將公有金鑰新增至金鑰群組。如需詳細資訊，請參閱 [為信任的金鑰群組建立金鑰對 (建議使用)](#create-key-pair-and-key-group)。

1. 如果您在上一個步驟中建立了新的金鑰群組，[請以簽署者的身分將金鑰群組新增到分佈中](#private-content-adding-trusted-signers)。
**重要**  
請勿從金鑰群組中移除任何現有的公有金鑰，或從分佈中移除任何金鑰群組。請僅加入新的。

1. 使用新金鑰對中的私有金鑰來更新應用程式以建立簽章。確認已簽署 URL 或使用新私有金鑰簽署的 Cookie 正在運作。

1. 等待直到已簽署 URL 或 Cookie 過期，而使用先前的金鑰對。然後從金鑰群組中移除舊的公有金鑰。如果您在步驟 2 中建立新的金鑰群組，請從分佈中移除舊的金鑰群組。