使用簽名 URL 和已簽名的 Cookie 提供私有內容

 

許多通過互聯網分發內容的公司都希望限制對文檔、業務數據、流媒體或面向選定用戶(例如付費用戶)的內容的訪問。要使用 CloudFront 安全地提供這種私有內容,可執行以下操作:

  • 要求用戶使用特殊的 CloudFront 簽名 URL 或簽名 Cookie 訪問私有內容。

  • 要求您的用戶使用 CloudFront URL 訪問內容,而不是直接用源服務器(例如 Amazon S3 或私有 HTTP 服務器)上的 URL 訪問內容。CloudFront URL 不是必需的,但建議使用,以防止用戶繞過在簽名 URL 或簽名 Cookie 中指定的限制。

簽名 URL 包括額外的信息,例如,過期日期和時間,爲您提供內容訪問方面的更多控制權。該額外信息出現在策略聲明中,且是基於固定策略或自定義策略。固定策略和自定義策略之間的差別將在接下來的兩節中予以說明。

注意

針對相同分配,您可以使用固定策略創建一些簽名 URL 以及使用自定義策略創建一些簽名 URL。

爲簽名 URL 選擇標準策略或自定義策略

創建簽名 URL 時,需要編寫 JSON 格式的策略聲明,以指定對簽名 URL 的限制,例如,URL 的有效期。可以使用標準策略或自定義策略。以下是標準策略和自定義策略的比較:

描述 標準策略 自定義策略

可對多個文件重複使用策略聲明。要重複使用策略聲明,您必須在 Resource 對象中使用通配符。有關更多信息,請參閱 在使用自定義策略的簽名 URL 的策略聲明中指定的值。)

可指定用戶開始訪問內容的日期和時間。

是(可選)

可指定用戶無法再訪問內容的日期和時間。

可指定能夠訪問內容的用戶的 IP 地址或 IP 地址範圍。

是(可選)

簽名 URL 包括策略的 Base64 編碼版本,這會導致更長的 URL。

 

 

簽名 URL 的工作方式

下面概述瞭如何爲簽名 URL 配置 CloudFront 和 Amazon S3,以及在用戶使用簽名 URL 請求文件時 CloudFront 如何響應。

  1. 在您的 CloudFront 分配中,指定一個或多個您希望有權限創建簽名 URL 的 AWS 賬戶的可信簽署人。

    有關更多信息,請參閱 指定可創建簽名 URL 和簽名 Cookie 的 AWS 賬戶 (可信簽署人)

  2. 您開發應用程序,以確定用戶是否應擁有對您的內容的訪問權,以及爲您希望限制訪問的文件或應用程序的某些部分創建簽名 URL。有關更多信息,請參閱以下主題:

  3. 用戶請求您要求對其使用簽名 URL 的文件。

  4. 應用程序驗證用戶是否有權訪問文件:他們已登錄、已付費訪問內容或已滿足一些其他訪問要求。

  5. 您的應用程序創建並返回簽名 URL 給用戶。

  6. 簽名 URL 允許用戶下載或流式傳輸內容。

    此步驟是自動的;用戶通常不必做任何額外的事情以訪問內容。例如,如果用戶是在 Web 瀏覽器中訪問您的內容,那麼您的應用程序會將簽名 URL 發回瀏覽器。瀏覽器立即在無用戶干預的情況下使用簽名 URL 訪問 CloudFront 邊緣緩存中的文件。

  7. CloudFront 使用公有密鑰驗證簽名並確認該 URL 沒有被篡改。如果簽名無效,則請求將被拒絕。

    如果簽名有效,CloudFront 將查看 URL 中的策略聲明 (如果使用標準策略,則構造一個),以確認該請求仍然有效。例如,如果您爲該 URL 指定了開始和結束日期及時間,CloudFront 會確認用戶是否是在您希望允許訪問的時間段嘗試訪問您的內容。

    如果請求滿足策略聲明中的要求,CloudFront 將執行標準操作:確定文件是否已位於邊緣緩存中,必要時將請求轉發到源,然後向用戶返回文件。

注意

簽名 CloudFront URL 不能包含額外的查詢字符串參數。如果在創建查詢字符串後將其添加到簽名 URL 中,該 URL 將返回 HTTP 403 狀態。

選擇簽名 URL 的有效時間

您可以使用僅在很短時間內有效(可能只有幾分鐘)的簽名 URL 分配私有內容。—有效時間如此短的簽名 URL 適用於出於特定的目的即時向用戶分發內容,如按需向客戶分發租賃的電影或下載的音樂。如果您的簽名 URL 有效期較短,您將可能希望使用您開發的應用程序自動生成它們。當用戶開始下載文件或開始播放媒體文件時,CloudFront 將比較 URL 中的過期時間和當前時間,以確定 URL 是否仍然有效。

您也可使用有效時間較長 (可能數年) 的簽名 URL 來分配私有內容。有效時間較長的簽名 URL 適用於向已知用戶分發私有內容,如向投資者分發業務計劃或向員工分發培訓材料等。您可開發應用程序,以爲您產生長期的簽名 URL,或您可以使用配置私有內容的工具和代碼示例中所列的第三方 GUI工具之一。

CloudFront 何時檢查簽名 URL 中的過期日期和時間?

CloudFront 何時檢查簽名 URL 中的過期日期和時間來確定該 URL 是否仍有效,取決於該 URL 是用於 Web 分配還是用於 RTMP 分配:

  • Web 分配 – 在發出 HTTP 請求時,CloudFront 檢查簽名 URL 中的過期日期和時間。如果客戶端剛好在過期時間之前開始下載大型文件,即使在下載過程中到了過期時間,該下載也應該完成。如果 TCP 連接斷開,並且客戶端試圖在過期時間到期後重新開始下載,則下載將會失敗。

    如果客戶端使用 Range GET 來獲取較小的文件,在過期時間到期後發生的任何 GET 請求將會失敗。有關 Range GET 的更多信息,請參閱CloudFront 如何處理對象的部分請求(Range GET)

  • RTMP 分配 – 在播放事件開始時,CloudFront 檢查簽名 URL 中的過期時間。如果客戶端在過期時間到期之前開始播放媒體文件,CloudFront 將允許播放整個媒體文件。然而,根據媒體播放器,暫停和重新開始可能觸發另一個播放事件。跳到媒體文件中另一個位置將觸發另一個播放事件。如果在過期時間到期後發生播放事件,CloudFront 不會提供媒體文件。

    注意

    Adobe 宣佈將在 2020 年 12 月 31 日前停用 Flash。因此,Amazon CloudFront 將不再支持 Adobe Flash Media Server,並將在 2020 年 12 月 31 日前棄用實時消息協議 (RTMP) 發行版。有關更多信息,請參閱 Amazon CloudFront 開發論壇上的完整通告

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章