iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Cloud Native

2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 系列 第 13

Day 13 - CloudFront 的 Policy 是什麼,該怎麼用? (上篇)

  • 分享至 

  • xImage
  •  

設定 CloudFront 時,會看到有不同的 Policy,我預計用兩篇文章為大家介紹。在 CloudFront Console 中,可以看到 3 種不同的 Policy:
https://ithelp.ithome.com.tw/upload/images/20230915/201625025JAWQRAsi9.png

其中可以區分為:

CloudFront 收到請求的如何發給 Origin,並存下來:

Cache Policy
OriginRequestPolicy (Optional)

CloudFront 收到回應後如何回傳給 Client:

ResponsePolicy

讓我們開始吧。


CloudFront 收到請求的如何發給 Origin,並做對應緩存管理:

Cache Policy: 我們從 Cache Policy 開始說起。
CloudFront 處於 Client 和 Origin(HTTP Server) 之間,也盡可能的透過讓 Client端使用緩存來加快回應的速度。
如果我們換個方向看,Origin 是依據什麼回應內容的呢?

「很簡單啊,Server 依據收到的網址啊」
「嗯,喔還有 QueryString 中帶的參數,在 Header 中的參數。
「對對,還有我們也會檢查 Cookie,看 token是否還合法」

上面的這些的組合,對 CDN 來說,就叫做 Cache Key
到這邊,我們回來看一下如果要自訂(創建/修改)一組 Cache Policy 時,可以看到裡面有一個區塊,好像剛剛才講到這幾個東西?
對,就是 "Cache key Settings" 這個區塊
https://ithelp.ithome.com.tw/upload/images/20230915/20162502wl1QweF6hr.png

透過設定,將「Origin 回應時需要參考的東西」添加進去,就完成設定。

  • Headers: 選項包含 - 都不包含(None) 或 自行選擇要包含哪些標頭(含自訂),最大可選 10 個。
  • QueryStrings: 選項包含 - 都不包含(None)、全部(All)、黑名單(All ... except)、白名單(include the following..)
  • Cookies: 選項包含 - 都不包含(None)、全部(All)、黑名單(All ... except)、白名單(include the following..)

在確認 Cookie Key 之後,還有一個重要的部分:TTL 。這部分可以參考 Day 10 - 我可以控制 CloudFront 中的檔案可以用多久嗎?瞭解概念。通常建議: 如果你不知道設定什麼多少 TTL 比較合適,那麼通常預設的 Min/Max/Default 1(1秒)/31536000(1年)/86400(1天)大概有 80%以上的機率可以滿足你的需求。

接著,來看 Origin Request Policy
Origin Request Policy: 這是個很微妙的東西。
就我個人的理解,Origin Request Policy 是一個很微妙的存在,在需要 CloudFront 緩存內容的時候,我基本上不會使用他,雖然即便還是有應用場景會需要。
在講應用場景前,我們先來看 AWS 公開文件中的說法:

您可以單獨控制原始伺服器請求中包含哪些資訊 (使用原始伺服器請求政策) 以及包含在快取金鑰中 (使用快取政策) 來執行此操作。
雖然這兩種政策彼此獨立,但實際上彼此相關聯。您包含在快取金鑰 (使用快取政策) 中的所有 URL 查詢字串、HTTP 標頭和 Cookie 都會自動包含在原始伺服器請求中。使用原始伺服器請求政策,指定您要包含在原始伺服器請求中,但不包含在快取金鑰中的資訊。就像快取原則一樣,您可以將原始伺服器請求原則附加到 CloudFront 分發中的一或多個快取行為。
您也可以使用原始伺服器請求政策,將其他 HTTP 標頭新增至未包含在檢視器請求中的原始伺服器請求。這些額外的標頭是由傳送原始伺服器請求 CloudFront 之前新增的,標頭值會根據檢視器請求自動確定。如需更多詳細資訊,請參閱 正在新增 CloudFront 請求標頭。

沒看懂別著急,我建議只要記住以下應用情境。

  • 不希望 CloudFront 緩存內容,讓每次都取到新的內容: 因為 Cache Policy 不允許將 TTL 都設置為 0/0/0,所以我們只能選擇託管的 'CachingDisabled',搭配 Origin Request Policy,看你想要傳啥給 Origin.(甚至就直接使用託管的 AllViewer)
  • 想要讓 Origin 收到一些 CloudFront 協助添加的標頭: 比方說看 client 是哪一種裝置、來自哪個地理位置/國家特殊資訊(如 JA3 Fingerprint)
    然後? 然後沒了。

CloudFront 收到回應後如何回傳給 Client

講完了前面兩種 Policy,我們還剩下一種,Request Response Policy。
Request Response Policy: 簡單說,這就是一種可以簡單的改變/添加/調整回傳標頭的工具。

特別注意,是標頭,不是內文

在這東西橫空出現之前,如果我們要動態讓 CloudFront 在回傳的標頭做改變,比方說添加 'Cache-Control: max-age',讓 Client 端可以緩存回傳的資料,我們只能選擇 lambda@edge 來達成。但l@e需要寫程式
所以可以把這 Policy 想成某種程度的套餐版本,然後裡面多了些 CloudFront 額外提供的東西。
雖然不可能啥都做得到,但帶來了方便。其中,我很推薦幾個套餐。

  • CORS: 這是很多人最常遇到的坑,沒關係,CloudFront 幫您。
  • Security Headers: 安全稽核、弱點掃描時的大腿,善用這個就可以搞定資安單位的許多要求(X) 提高許多安全性(O)。
  • Remove headers: 除了加,當然也可以減。當透露給外部的資訊越少,壞人要來攻擊的成本也越高。很推薦移除的標頭包含有: 'X-Powered-By', 'Server'。
  • Server-timing: 這是很方便就可以得到 CloudFront 請求處理的一堆資訊的方法,非常建議打開。 Server-timing 詳細到底是啥,可以看這文件

好,今天先到這邊打住,先知道有這些東西,下一篇我們再來進一步討論。


如果有什麼看法想分享或詢問,歡迎留言一起討論喔!


上一篇
Day 12 - 來聊聊 CloudFront 的 Origin
下一篇
Day 14 - CloudFront 的 Policy 是什麼,該怎麼用? (下篇)
系列文
2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言