

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

# 使用自訂政策設定已簽署 Cookie
<a name="private-content-setting-signed-cookie-custom-policy"></a>

若要設定使用標準政策的已簽署 Cookie，請完成以下步驟。<a name="private-content-setting-signed-cookie-custom-policy-procedure"></a>

**使用自訂政策設定已簽章的 Cookie**

1. 如果您使用 .NET 或 Java 建立簽章的 URL，並且您還沒有將金鑰對的私有金鑰從預設的 .pem 格式重新格式化為與 .NET 或 Java 相容的格式，則現在執行此操作。如需詳細資訊，請參閱[重新格式化私有金鑰 (僅限 .NET 和 Java)](private-content-trusted-signers.md#private-content-reformatting-private-key)。

1. 將應用程式設定為傳送三個`Set-Cookie`標頭給核准的檢視器 （如果您想要指定雜湊演算法，則為四個）。您需要三個 `Set-Cookie` 標頭，因為每個 `Set-Cookie` 標頭只能包含一個名稱值組，而 CloudFront 已簽署的 Cookie 需要三個名稱值組。名稱值組是：`CloudFront-Policy`、`CloudFront-Signature` 和 `CloudFront-Key-Pair-Id`。您可以選擇包含第四個名稱值對 `CloudFront-Hash-Algorithm`，以指定用於簽章的雜湊演算法。在使用者對要控制存取的檔案發出第一次請求之前，這些值必須出現在檢視器。
**注意**  
一般而言，建議您排除 `Expires` 和 `Max-Age` 屬性。這會導致瀏覽器在使用者關閉瀏覽器時刪除 Cookie，從而降低有人未經授權存取您的內容的可能性。如需詳細資訊，請參閱 [防止濫用已簽署 Cookie](private-content-signed-cookies.md#private-content-signed-cookie-misuse)。

   **Cookie 屬性的名稱區分大小寫**。

   只包含分行符號，以使屬性更易讀。

   ```
   Set-Cookie: 
   CloudFront-Policy=base64 encoded version of the policy statement; 
   Domain=optional domain name; 
   Path=/optional directory path; 
   Secure; 
   HttpOnly
   
   
   Set-Cookie: 
   CloudFront-Signature=hashed and signed version of the policy statement; 
   Domain=optional domain name; 
   Path=/optional directory path; 
   Secure; 
   HttpOnly
   
   Set-Cookie: 
   CloudFront-Key-Pair-Id=public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature; 
   Domain=optional domain name; 
   Path=/optional directory path; 
   Secure; 
   HttpOnly
   
   Set-Cookie: 
   CloudFront-Hash-Algorithm=SHA1 or SHA256; 
   Domain=optional domain name; 
   Path=/optional directory path; 
   Secure; 
   HttpOnly
   ```  
**(選用) `Domain`**  
請求檔案的網域名稱。如果不指定 `Domain` 屬性，則預設值是 URL 中的網域名稱，並且它僅適用於指定的網域名稱，而不適用於子網域名稱。如果指定 `Domain` 屬性，它也適用於子網域名稱。網域名稱中的前導點 (例如 `Domain=.example.com`) 是可選的。此外，如果指定 `Domain` 屬性，則 URL 中的網域名稱和 `Domain` 屬性的值必須相符。  
您可以指定 CloudFront 指派給您的分佈的網域名稱，例如，d111111abcdef8.cloudfront.net，但不能為網域名稱指定 \$1.cloudfront.net。  
如果要在 URL 中使用備用網域名稱 (如 example.com)，則無論您是否指定了 `Domain` 屬性，都必須將備用網域名稱新增到分佈中。如需詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md) 主題中的 [備用網域名稱 (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME)。  
**(選用) `Path`**  
請求檔案的路徑。如果未指定 `Path` 屬性，則預設值為 URL 中的路徑。  
**`Secure`**  
在檢視器傳送請求之前，需要對 Cookie 進行加密。我們建議您透過 HTTPS 連線發送 `Set-Cookie` 標頭，以確保 Cookie 屬性免受中間人攻擊。  
**`HttpOnly`**  
要求檢視器僅在 HTTP 或 HTTPS 請求中傳送 Cookie。  
**`CloudFront-Policy`**  
您的政策陳述式採用 JSON 格式，刪除了空格，然後使用 base64 編碼。如需詳細資訊，請參閱[為使用自訂政策的已簽署 Cookie 建立簽章](#private-content-custom-policy-signature-cookies)。  
政策陳述式可控制已簽署 Cookie 授予使用者的存取權限。它包括使用者可以存取的檔案、到期日期和時間、URL 變成有效的選擇性日期和時間，以及允許存取檔案的選用 IP 位址或 IP 位址範圍。  
**`CloudFront-Signature`**  
JSON 政策聲明的雜湊、簽章和 base64-encoded 版本。如需詳細資訊，請參閱 [為使用自訂政策的已簽署 Cookie 建立簽章](#private-content-custom-policy-signature-cookies)。  
**`CloudFront-Key-Pair-Id`**  
CloudFront 公有金鑰的 ID，例如 `K2JCJMDEHXQW5F`。公有金鑰 ID 會告訴 CloudFront 要使用哪個公有金鑰來驗證已簽署的 URL。CloudFront 將簽章中的資訊與政策聲明中的資訊進行比較，以驗證該 URL 尚未遭到篡改。  
此公有金鑰必須屬於分佈中信任的簽署者金鑰群組。如需詳細資訊，請參閱[指定可以建立已簽署 URL 和已簽署 Cookie 的簽署者](private-content-trusted-signers.md)。  
**`CloudFront-Hash-Algorithm`**  
（選用） 用來建立簽章的雜湊演算法。支援的值為 `SHA1` 和 `SHA256`。如果您未包含此 Cookie，CloudFront 會預設為 `SHA1`。

## 自訂政策的 `Set-Cookie` 標頭範例
<a name="example-set-cookie-headers-custom-policy"></a>

請參閱下列 `Set-Cookie` 標頭對的範例。

如果要在 URL 中使用備用網域名稱 (如 example.org)，則無論您是否指定了 `Domain` 屬性，都必須將備用網域名稱新增到分佈中。如需詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md) 主題中的 [備用網域名稱 (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME)。

**Example 範例 1**  
當您使用與檔案的 URL 中的分佈關聯的網域名稱時，可以使用一個已簽署 Cookie 的 `Set-Cookie` 標頭。  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
```

**Example 範例 2**  
當您在檔案的 URL 中使用備用網域名稱 (example.org) 時，可以使用一個已簽署 Cookie 的 `Set-Cookie` 標頭。  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/; Secure; HttpOnly
```

**Example 範例 3**  
當您使用與檔案的 URL 中的分佈關聯的網域名稱時，可以使用一個已簽署請求的 `Set-Cookie` 標頭對。  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=dd111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
```

**Example 範例 4**  
當您使用與檔案的 URL 中的分佈關聯的替代網域名稱 (example.org) 時，可以使用一個已簽署請求的 `Set-Cookie` 標頭對。  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/; Secure; HttpOnly
```

## 為使用自訂政策的已簽署 Cookie 建立政策陳述式
<a name="private-content-custom-policy-statement-cookies"></a>

若要為自訂政策建立政策陳述式，請執行以下步驟。如需以各種方式控制對檔案存取的幾個政策聲明範例，請參閱 [使用自訂政策的已簽署 Cookie 範例政策陳述式](#private-content-custom-policy-statement-signed-cookies-examples)。<a name="private-content-custom-policy-statement-cookies-procedure"></a>

**為使用自訂政策的簽章的 Cookie 建立政策聲明**

1. 使用下列 JSON 格式建構政策聲明。

   ```
   {
       "Statement": [
           {
               "Resource": "URL of the file",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime":required ending date and time in Unix time format and UTC
                   },
                   "DateGreaterThan": {
                       "AWS:EpochTime":optional beginning date and time in Unix time format and UTC
                   },
                   "IpAddress": {
                       "AWS:SourceIp": "optional IP address"
                   }
               }
           }
       ]
   }
   ```

   注意下列事項：
   + 您只能包含一個聲明。
   + 使用 UTF-8 字元編碼。
   + 完全按照規定包含所有標點符號和參數名稱。不接受參數名稱的縮寫。
   + `Condition` 部分的參數順序不重要。
   + 如需有關 `Resource`、`DateLessThan`、`DateGreaterThan` 和 `IpAddress` 值的詳細資訊，請參閱 [您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值](#private-content-custom-policy-statement-cookies-values)。

1. 從政策陳述式中刪除所有空格 (包括標籤和新行字元)。您可能必須在應用程式的程式碼的字串中包含逸出字元。

1. 使用 MIME base64 編碼 Base64-encode 政策聲明。如需詳細資訊，請參閱 *RFC 2045，MIME (多用途網際網路郵件延伸) 第一部分：網際網路訊息內文的格式*中的[第 6.8 節：Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8)。

1. 將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html)

1. 將結果值包含在您的 `Set-Cookie` 標頭後的 `CloudFront-Policy=`。

1. 透過進行雜湊、簽章和 base64 編碼政策聲明來為 `Set-Cookie` 建立`CloudFront-Signature` 標頭的簽章。如需詳細資訊，請參閱 [為使用自訂政策的已簽署 Cookie 建立簽章](#private-content-custom-policy-signature-cookies)。

### 您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值
<a name="private-content-custom-policy-statement-cookies-values"></a>

當您為自訂政策建立政策聲明時，您可以指定以下值。

**資源**  
包含查詢字串的基本 URL (如果有)：  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
如果省略 `Resource` 參數，則使用者可以存取與用於建立已簽章的 URL 的金鑰對相關聯的任何分佈的所有檔案。
您只能為 `Resource` 指定一個值。  
注意下列事項：  
+ **通訊協定** – 此值必須以 `http://` 或 `https://` 開頭。
+ **查詢字串參數** – 如果沒有查詢字串參數，請省略問號。
+ **萬用字元** – 可以使用比對零或多個字元 (\$1) 的萬用字元，或比對字串中任意位置單一字元 (?) 的萬用字元。例如，值為：

  `https://d111111abcdef8.cloudfront.net/*game_download.zip*`

  將包括 (例如) 下列檔案：
  + `https://d111111abcdef8.cloudfront.net/game_download.zip`
  + `https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes`
  + `https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp`
+ **替代網域名稱** – 如果在 URL 中指定了替代網域名稱 (CNAME)，則在引用網頁或應用程式中的檔案時，必須指定替代網域名稱。請勿為檔案指定 Amazon S3 URL。

**DateLessThan**  
Unix 時間格式 (以秒為單位) 和國際標準時間 (UTC) 的 URL 的到期日期和時間。不要將值括在引號中。  
例如，2015 年 3 月 16 日上午 10:00 UTC 以 Unix 時間格式轉換為 1426500000。  
如需詳細資訊，請參閱 [CloudFront 何時檢查已簽署 Cookie 中的到期日期和時間](private-content-signed-cookies.md#private-content-check-expiration-cookie)。

**DateGreaterThan (選用)**  
Unix 時間格式 (以秒為單位) 和國際標準時間 (UTC) 的 URL 的選用日期和時間。不允許使用者在指定的日期和時間之前存取檔案。不要將值括在引號中。

**IpAddress (選用)**  
提出 GET 請求的用戶端 IP 位址。注意下列事項：  
+ 要允許任何 IP 位址存取該檔案，請省略 `IpAddress` 參數。
+ 您可以指定一個 IP 位址或一個 IP 位址範圍。例如，如果用戶端的 IP 位址位於兩個不同的範圍之一，則無法設定政策以允許存取。
+ 若要允許從單一 IP 位址存取，您需要指定：

  `"`*IPv4 IP 位址*`/32"`
+ 必須以標準 IPv4 CIDR 格式指定 IP 位址範圍 (例如 `192.0.2.0/24`)。如需詳細資訊，請前往 *RFC 4632，無類別網域間路由選擇 (CIDR)：網際網路地址指派和彙總計劃*，[https://tools.ietf.org/html/rfc4632](https://tools.ietf.org/html/rfc4632)。
**重要**  
不支援 IPv6 格式的 IP 位址，例如 2001:0db8:85a3::8a2e:0370:7334。

  如果您使用的是包括 `IpAddress` 的自訂政策，請不要為分佈啟用 IPv6。如果您希望透過 IP 位址限制對某些內容的存取，並支援對其他內容的 IPv6 請求，則可以建立兩個分佈。如需詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md) 主題中的 [啟用 IPv6 (檢視器請求)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6)。

## 使用自訂政策的已簽署 Cookie 範例政策陳述式
<a name="private-content-custom-policy-statement-signed-cookies-examples"></a>

以下範例說明政策聲明說明了如何控制對特定檔案的存取、目錄中的所有檔案，或與金鑰對 ID 相關聯的所有檔案。此範例還會說明如何控制來自個別的 IP 位址或各種 IP 位址的存取，以及如何防止使用者在指定的日期和時間之後使用已簽章的 Cookie。

如果複製並貼上這些範例中的任何一項，請刪除所有空格 (包括索引標籤和換行符號字元)、用您自我的值取代該值，並在大括弧 ( \$1 ) 的後面加上換行字元。

如需詳細資訊，請參閱[您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值](#private-content-custom-policy-statement-cookies-values)。

**Topics**
+ [範例政策陳述式：從一個 IP 位址範圍存取一個檔案](#private-content-custom-policy-statement-signed-cookies-example-one-object)
+ [範例政策陳述式：從一個 IP 位址範圍存取目錄中的所有檔案](#private-content-custom-policy-statement-signed-cookies-example-all-objects)
+ [範例政策陳述式：從一個 IP 位址存取與金鑰對 ID 相關的所有檔案](#private-content-custom-policy-statement-signed-cookies-example-one-ip)

### 範例政策陳述式：從一個 IP 位址範圍存取一個檔案
<a name="private-content-custom-policy-statement-signed-cookies-example-one-object"></a>

以下範例自訂政策在已簽署的 Cookie 中，其指定使用者在 2023 年 1 月 1 日上午 10:00 (UTC) 之前，可以從 `192.0.2.0/24` 範圍內的 IP 位址存取檔案 `https://d111111abcdef8.cloudfront.net/game_download.zip`：

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### 範例政策陳述式：從一個 IP 位址範圍存取目錄中的所有檔案
<a name="private-content-custom-policy-statement-signed-cookies-example-all-objects"></a>

以下範例自訂政策允許您為 `training` 目錄中的任何檔案建立已簽章的 Cookie，如 `Resource` 參數中的 \$1 萬用字元所示。使用者在到 UTC 2013 年 1 月 1 日上午 10:00 之前可以從 `192.0.2.0/24` 範圍內的 IP 位址存取該檔案：

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/training/*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

您使用此政策的每個已簽章的 Cookie 都包括一個識別特定的檔案的基本 URL，例如：

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

### 範例政策陳述式：從一個 IP 位址存取與金鑰對 ID 相關的所有檔案
<a name="private-content-custom-policy-statement-signed-cookies-example-one-ip"></a>

以下範例自訂政策允許您為與任何分佈關聯的任何檔案設定已簽章的 Cookie，如 `Resource` 參數中的 \$1 萬用字元所示。使用者必須使用 IP 位址 `192.0.2.10/32`。(CIDR 表示法中的 `192.0.2.10/32` 值是指單個 IP 位址 `192.0.2.10`。) 這些檔案只能在 2013 年 1 月 1 日上午 10:00 UTC 至 2013 年 1 月 2 日上午 10:00 UTC 之間可用：

```
{
    "Statement": [
        {
            "Resource": "https://*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.10/32"
                },
                "DateGreaterThan": {
                    "AWS:EpochTime": 1767290400
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767376800
                }
            }
        }
    ]
}
```

您使用此政策的每個已簽署的 Cookie 都包括一個基本 URL，用於識別特定 CloudFront 分佈中的特定檔案，例如：

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

該已簽署 Cookie 還包括金鑰對 ID，必須與在基本 URL 中指定的分佈 (d111111abcdef8.cloudfront.net) 內信任的簽署者相關聯。

## 為使用自訂政策的已簽署 Cookie 建立簽章
<a name="private-content-custom-policy-signature-cookies"></a>

使用自訂政策的已簽章的 Cookie 的簽章是政策聲明的雜湊、簽章和 base64-encoded 版本。

如需有關如何對政策聲明進行雜湊、簽章和編碼的詳細資訊和範例，請參閱：
+ [用於 Base64 編碼和加密的 Linux 命令和 OpenSSL](private-content-linux-openssl.md)
+ [為已簽署 URL 建立簽章的程式碼範例](PrivateCFSignatureCodeAndExamples.md)

**注意**  
連結的範例預設使用 SHA-1。若要改為使用 SHA-256，請在 OpenSSL 命令`sha256`中`sha1`將 取代為 ，並包含值為 的 `CloudFront-Hash-Algorithm` Cookie`SHA256`。<a name="private-content-custom-policy-signature-cookies-procedure"></a>

**使用自訂政策為已簽章的 Cookie 建立簽章**

1. 使用 SHA-1 或 SHA-256 雜湊函數和 RSA 來雜湊和簽署您在程序 中建立的 JSON 政策陳述式[為使用自訂政策的已簽章的 URL 建立政策聲明](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-creating-policy-procedure)。使用不再包含空格但尚未進行 base64 編碼的政策陳述式版本。

   如果您使用 SHA-256，則必須包含值為 的 `CloudFront-Hash-Algorithm` Cookie`SHA256`。

   對於雜湊函數所需的私有金鑰，使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。
**注意**  
用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例，請參閱 [為已簽署 URL 建立簽章的程式碼範例](PrivateCFSignatureCodeAndExamples.md)。

1. 從雜湊和已簽署字串中移除所有空格 (包括索引標籤和新行字元)。

1. 使用 MIME base64 編碼的 Base64-encode 字串。如需詳細資訊，請參閱 *RFC 2045，MIME (多用途網際網路郵件延伸) 第一部分：網際網路訊息內文的格式*中的[第 6.8 節：Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8)。

1. 將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html)

1. 將結果值包含在 `Set-Cookie` 名稱值組的 `CloudFront-Signature=` 標頭中，並返回到 [使用自訂政策設定已簽章的 Cookie](#private-content-setting-signed-cookie-custom-policy-procedure) 為 `Set-Cookie` 新增 `CloudFront-Key-Pair-Id` 標頭。