# 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 運作原理機制
- 建立一個 CloudFront Key Pair (Public/Private)
- Public Key 給 CloudFront 用來驗證
- Private Key 給你的 Server 簽章用
- 伺服器產生簽章的 URL
- 使用者在有效期間內點開此 URL - CloudFront 驗證簽章 -> 通過 -> 回傳檔案
適用
- 單一影片圖片檔案授權下載
- 行動 APP 或 API 提供授權連結
- 電子票卷,付費內容等需要『一次性訪問』的情境
# Signed Cookie 運作原理機制
- 同樣需要建立 CloudFront Key Pair
- 伺服器產生三個 Cookie
- CloudFront-Policy
- CloudFront-Signature
- CloudFront-Key-Pair-Id
- 前端 (如 Web 登入後) 設定這三個 Cookie
- 使用者在該 Cookie 有效期間內 -> 所有同 Distribution 的受保護內容都可以直接訪問
適用
- 網站登入後才能瀏覽的圖片或影片資源
- 整個目錄保護
- 希望瀏覽器自動帶授權
# 兩種簽章 Policy
- Canned Policy (簡化策略): 只設定 Expires
- Custome Policy (自訂策略): 可設定
- DateLessThan (到期時間)
- DateGreaterThan (起始時間)
- IPRange (允許 IP 範圍)