使用簽署的餅乾 - Amazon CloudFront

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

使用簽署的餅乾

CloudFront 簽署的 Cookie 可讓您控制當您不想變更目前內容的使用者,URLs或是您想要提供存取多個受限檔案 (例如網站訂閱者區域中的所有檔案) 時,誰可以存取您的內容。本主題說明使用已簽章的 Cookie 時的注意事項,並介紹如何使用標準和自訂政策設定已簽章的 Cookie。

決定對已簽署的 Cookie 使用固定或自訂原則

當您建立已簽署的 Cookie 時,您會以JSON格式撰寫政策陳述式,以指定已簽署 Cookie 的限制,例如 Cookie 的有效時間長度。您可以使用標準政策或自訂政策。下表比較了標準和自訂政策:

描述 標準政策 自訂政策

您可以重複使用多個檔案的政策聲明。要重複使用政策聲明,您必須在 Resource 物件中使用萬用字元。如需詳細資訊,請參閱 您在政策陳述式中為已簽章 Cookie 的自訂政策指定的值)。

您可以指定使用者可以開始存取您的內容的日期和時間

是 (選用)

您可以指定使用者無法再存取您的內容的日期和時間

您可以指定可以存取您的內容的使用者的 IP 地址或 IP 地址範圍

是 (選用)

如需有關使用標準政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用固定原則設定已簽署的 Cookie

如需有關使用自訂政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用自訂原則設定已簽署的 Cookie

已簽署 Cookie 的工作方式

以下是您如何設定 CloudFront 已簽署 Cookie 的概觀,以及使用者提交包含已簽署 Cookie 的要求時如何 CloudFront 回應。

  1. 在您的 CloudFront 發行版中,指定一或多個受信任的金鑰群組,其中包含 CloudFront 可用來驗證URL簽章的公開金鑰。您可以使用對應的私密金鑰來簽署URLs。

    如需詳細資訊,請參閱指定可以建立已簽署URLs和已簽署 Cookie 的簽署者

  2. 您開發應用程式,以判斷使用者是否應該存取您的內容,如果是,則向檢視器傳送三個 Set-Cookie 標頭。(每個Set-Cookie標頭只能包含一個名稱-值對,一個帶 CloudFront 符號的 cookie 需要三個名稱-值對。) 在瀏覽者請求您的私有內容之前,您必須將 Set-Cookie 標頭傳送到檢視器。如果您在 Cookie 上設定了較短的到期時間,則可能還需要傳送三個 Set-Cookie 標頭以回應後續請求,以便使用者持續存取。

    通常,您的 CloudFront 發行版至少會有兩種快取行為,一種不需要驗證,另一種則需要驗證。網站安全部分的錯誤頁面包含重定向器或指向登入頁面的連結。

    如果您將分發配置為基於 Cookie 緩存文件,則 CloudFront 不會根據簽名 cookie 中的屬性緩存單獨的文件。

  3. 使用者登入您的網站,以及付費內容或滿足其他存取需求。

  4. 您的應用程式傳回回應中的 Set-Cookie 標頭,並且檢視器會儲存名稱值組。

  5. 使用者請求了檔案。

    使用者的瀏覽器或其他檢視器從步驟 4 取得名稱值組,並將它們新增至 Cookie 標頭中的請求中。這是已簽章的 Cookie。

  6. CloudFront 使用公開金鑰來驗證已簽署 Cookie 中的簽章,並確認 Cookie 沒有遭到竄改。如果簽章無效,請求會遭到拒絕。

    如果 cookie 中的簽名有效,請查 CloudFront 看 cookie 中的策略聲明(如果您使用固定策略,則構建一個策略)以確認請求仍然有效。例如,如果您為 Cookie 指定了開始和結束日期和時間,請 CloudFront 確認使用者在您要允許存取的期間內嘗試存取您的內容。

    如果要求符合原則陳述式中的需求,就像針對未受限制的內容一樣 CloudFront 提供您的內容:它會判斷檔案是否已在 Edge 快取中,視需要將要求轉送至原始位置,然後將檔案傳回給使用者。

如果您在 Domain 標頭中指定 Set-Cookie 參數,請指定可能的最精確值,以降低具有相同根網域名稱之人員的存取可能性。例如,app.example.com 優於 example.com,尤其是當您無法控制 example.com 時。這有助於防止他人從 www.example.com 存取您的內容。

要協助避免發生這種類型的攻擊,請執行下列動作:

  • 排除 ExpiresMax-Age 的屬性,以便 Set-Cookie 標頭建立工作階段 Cookie。工作階段 Cookie 會在使用者關閉瀏覽器時自動刪除,以降低有人未經授權存取您的內容的可能性。

  • 包含 Secure 屬性,以便檢視器在請求中包含該 Cookie 時,將對其進行加密。

  • 如果可能,請使用自訂政策,並包含檢視器的 IP 地址。

  • CloudFront-Expires 屬性中,根據您希望使用者訪問您的內容的時間長度,指定最短的合理到期時間。

要確定簽署的 cookie 是否仍然有效,請在HTTP請求時 CloudFront 檢查 cookie 中的到期日期和時間。如果用戶端在到期前一刻才開始下載大型檔案,則即使在下載期間過期了,下載也應該要完成。如果TCP連線中斷,且用戶端在到期時間過後嘗試重新啟動下載,下載將會失敗。

如果用戶端使用 Range GETs 取得較小片段的檔案,則在到期時間過後發生的任何GET要求都會失敗。如需「範圍」的更多資訊GETs,請參閱如何 CloudFront 處理物件 (範圍GETs) 的部分要求

範例程式碼和第三方工具

私人內容的範例程式碼只會顯示如何建立已簽署的簽名URLs。但是,針對已簽章的 Cookie 建立簽章的程序非常類似,因此大部分範本程式碼仍然相關。如需詳細資訊,請參閱下列主題: