使用自訂原則設定已簽署的 Cookie - Amazon CloudFront

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

使用自訂原則設定已簽署的 Cookie

若要設定使用標準政策的已簽署 Cookie,請完成以下步驟。

請參閱標Set-Cookie題對的下面的例子。

如果您想要使用替代網域名稱 (例如 example.org in)URLs,則無論您是否指定屬性,都必須將替代網域名稱新增至您的分發中Domain。如需詳細資訊,請參閱 發佈設定參考 主題中的 替代網域名稱 (CNAMEs)

範例 1

當您針對檔案使用與您的分發相關聯的網域名稱時,您可以URLs針對一個已簽署的 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
範例 2

當您在中為檔案使用替代網域名稱 (example.org) 時,您可以URLs針對一個已簽署的 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
範例 3

當您使用的網域名稱與您的檔案的分發相關聯的網域名稱時,您可以URLs針對已簽署的要求使用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
範例 4

當您使用與檔案中的分發相關聯的備用網域名稱 (example.org) 時,您可以URLs針對一個已簽署的請求使用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

為使用自訂政策的已簽署 Cookie 建立政策聲明

若要為自訂政策建立政策陳述式,請執行以下步驟。如需以各種方式控制對檔案存取的幾個政策聲明範例,請參閱 使用自訂政策的已簽署 Cookie 範例政策陳述式

為使用自訂政策的簽章的 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 部分的參數順序不重要。

    • 如需有關 ResourceDateLessThanDateGreaterThanIpAddress 值的詳細資訊,請參閱 您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值

  2. 從策略語句中刪除所有空格(包括製表符和換行符)。您可能必須在應用程式的程式碼的字串中包含逸出字元。

  3. 使用 base64 編碼來編碼政策陳述式MIME。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME (多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。

  4. 以有效的字元取代URL查詢字串中無效的字元。下表列出無效和有效的字元。

    取代這些無效的字元 有了這些有效的字元

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

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

  6. 透過進行雜湊、簽章和 base64 編碼政策聲明來為 Set-Cookie 建立CloudFront-Signature 標頭的簽章。如需詳細資訊,請參閱 為使用自訂政策的已簽署 Cookie 建立簽名

您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值

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

資源

URL包含查詢字串的基底 (如果有的話):

https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes

重要

如果您省略Resource參數,使用者可以存取與您用來建立已簽署之 key pair 相關聯的任何發行版相關聯的所有檔案URL。

您只能為 Resource 指定一個值。

注意下列事項:

  • 通訊協定 – 此值必須以 http://https:// 開頭。

  • 查詢字串參數 – 如果沒有查詢字串參數,請省略問號。

  • 萬用字元 – 可以使用比對零或多個字元 (*) 的萬用字元,或比對字串中任意位置單一字元 (?) 的萬用字元。例如,值為:

    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

  • 替代網域名稱 — 如果您在中指定替代網域名稱 (CNAME)URL,則在您的網頁或應用程式中參照檔案時,必須指定替代網域名稱。請勿URL為檔案指定 Amazon S3。

DateLessThan

Unix 時間格式(以秒為單URL位)和協調世界時()表示的到期日期和時間。UTC不要將值括在引號中。

例如,2015 年 3 月 16 日上午 10 時以 Unix 時間格式UTC轉換為 142650 萬。

如需詳細資訊,請參閱在已簽署的 Cookie 中 CloudFront 檢查到期日期和時間時

DateGreaterThan (選擇性)

Unix 時間格式(以秒為單URL位)和協調世界時()的可選開始日期和時間。UTC不允許用戶在指定的日期和時間或之前訪問文件。不要將值括在引號中。

IpAddress (選擇性)

提出GET要求的用戶端 IP 位址。注意下列事項:

  • 要允許任何 IP 位址存取該檔案,請省略 IpAddress 參數。

  • 您可以指定一個 IP 地址或一個 IP 地址範圍。例如,如果用戶端的 IP 位址位於兩個不同的範圍之一,則無法設定政策以允許存取。

  • 若要允許從單一 IP 地址存取,您需要指定:

    "IPv4 IP address/32"

  • 您必須以標準IPv4CIDR格式指定 IP 位址範圍 (例如,192.0.2.0/24)。如需詳細資訊,請移至 RFC4632,無類別網域間路由 (CIDR):網際網路位址指派與彙總計劃。https://tools.ietf.org/html/rfc4632

    重要

    不支援採用IPv6格式的 IP 位址,例如:分貝 8:85:: 8a2e:

    如果您使用的是包含的自訂原則IpAddress,請勿IPv6針對散佈啟用。如果您想要透過 IP 位址和對其他內容的支援要IPv6求來限制對某些內容的存取,您可以建立兩個分發。如需詳細資訊,請參閱 發佈設定參考 主題中的 啟用 IPv6

使用自訂政策的已簽署 Cookie 範例政策陳述式

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

如果您複製並貼上這些範例中的任何一個,請移除任何空格 (包括定位字元和換行字元)、以您自己的值取代這些值,並在右括號 (}) 後加入新行字元。

如需詳細資訊,請參閱您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值

原則陳述式範例:從 IP 位址範圍存取一個檔案

下列已簽署 Cookie 中的自訂原則範例會指定使用者可以https://d111111abcdef8.cloudfront.net/game_download.zip從範圍內的 IP 位址存取檔案,192.0.2.0/24直到 2023 年 1 月 1 日上午 10:00 UTC 為止:

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

原則陳述式範例:從 IP 位址範圍存取目錄中的所有檔案

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

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

您使用此政策的每個已簽署 Cookie 都包含URL可識別特定檔案的基礎,例如:

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

原則陳述式範例:從一個 IP 位址存取與 key pair ID 相關聯的所有檔案

以下範例自訂政策允許您為與任何分佈關聯的任何檔案設定已簽章的 Cookie,如 Resource 參數中的 * 萬用字元所示。使用者必須使用 IP 地址 192.0.2.10/32。(CIDR符號192.0.2.10/32中的值是指單一 IP 位址、192.0.2.10。) 這些檔案只能從二 ○ 一三年一月一日上午十時UTC至二 ○ 一三年一月二日上午十時提供UTC:

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

您使用此政策的每個已簽署 Cookie 都包含一個基礎URL,用於識別特定 CloudFront 發行版中的特定檔案,例如:

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

已簽署的 Cookie 也包含 key pair 識別碼,該識別碼必須與您在基底中指定的分發 (d111111abcdef8.cloudfront.net) 中的受信任金鑰群組相關聯。URL

為使用自訂政策的已簽署 Cookie 建立簽名

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

如需有關如何對政策聲明進行雜湊、簽章和編碼的詳細資訊和範例,請參閱:

使用自訂政策為已簽章的 Cookie 建立簽章
  1. 使用 SHA -1 雜湊函數和RSA雜湊並簽署您在程序中建立的JSON原則陳述式若要為使用自訂原則的已簽署建立原則URL的原則陳述式。使用不再包含空白空格,但尚未經 base64 編碼的原則陳述式版本。

    對於雜湊函數所需的私有金鑰,使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。

    注意

    用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例,請參閱 建立已簽署簽章的程式碼範例 URL

  2. 從雜湊和簽署的字串中移除空格 (包括製表符和換行符)。

  3. 使MIME用 base64 編碼對字串進行編碼。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME (多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。

  4. 以有效的字元取代URL查詢字串中無效的字元。下表列出無效和有效的字元。

    取代這些無效的字元 有了這些有效的字元

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. 將結果值包含在 Set-Cookie 名稱值組的 CloudFront-Signature= 標頭中,並返回到 使用自訂政策設定已簽章的 CookieSet-Cookie 新增 CloudFront-Key-Pair-Id 標頭。