# AWS - CloudFront Signed URLs & Signed Cookies


# CloudFront 限定時間內存取受保護的內容

CloudFront 安全機制的核心概念之一『Signed URLs/Cookies』,這兩個都能控制誰能在限定時間內存取受保護的 CloudFront 內容 (如 S3 私有檔案)

類型 基本定義
Signed URL 在單一物件上加上授權簽章,允許短期訪問
Signed Cookie 用瀏覽器 Cookie 儲存授權簽章,允許同一用戶連續存取多個保護檔案

# 背景 CloudFront + Private Content

當你的 CloudFront Distribution 背後的 S3 Bucket 是 Private 的 (例如使用 OAC/OAI),外部使用者無法直接訪問 S3 物件。這時就必須透過 簽章 (Signature) 授權暫時存取


# CloudFront 簽章授權的兩種方式

類型 Signed URLs Signed Cookies
適用情境 少量特定檔案 (單一物件) 多個物件 (整個資料夾或是網站)
使用方式 每個 URL 都加上授權參數 用瀏覽器 Cookie 儲存授權
用戶端 適合行動 App/API 適合瀏覽器
效果 |僅該 URL 可存取 該 Cookie 期間內所有保護內容都可存取
驗證邏輯 每次請求都帶上簽章 每次請求瀏覽器自動附上 Cookie

# Signed URL 運作原理機制

  1. 建立一個 CloudFront Key Pair (Public/Private)
    • Public Key 給 CloudFront 用來驗證
    • Private Key 給你的 Server 簽章用
  2. 伺服器產生簽章的 URL
  3. 使用者在有效期間內點開此 URL - CloudFront 驗證簽章 -> 通過 -> 回傳檔案

適用

  • 單一影片圖片檔案授權下載
  • 行動 APP 或 API 提供授權連結
  • 電子票卷,付費內容等需要『一次性訪問』的情境

  1. 同樣需要建立 CloudFront Key Pair
  2. 伺服器產生三個 Cookie
    • CloudFront-Policy
    • CloudFront-Signature
    • CloudFront-Key-Pair-Id
  3. 前端 (如 Web 登入後) 設定這三個 Cookie
  4. 使用者在該 Cookie 有效期間內 -> 所有同 Distribution 的受保護內容都可以直接訪問

適用

  • 網站登入後才能瀏覽的圖片或影片資源
  • 整個目錄保護
  • 希望瀏覽器自動帶授權

# 兩種簽章 Policy

  • Canned Policy (簡化策略): 只設定 Expires
  • Custome Policy (自訂策略): 可設定
    • DateLessThan (到期時間)
    • DateGreaterThan (起始時間)
    • IPRange (允許 IP 範圍)