# cloud front 盡量將動態或靜態的內容透過AWS cloud front來交付內容,分送到amazon的端點上,減輕應用程式的本身負擔,比如說css.html.圖片檔案等這類內容可以放置到Amazon s3,而不是留在web instance 的靜態內容,這樣就能減輕web instance的負擔,增進維護這些內容的效率(因為放在s3了),還能提高終端使用者收到回應的速度,並且較低成本(因為web instance所需的等級需求變低了)。 至於動態內容,像是某些來自不同使用者的查詢請求,在伺服器接收到後,都回傳一樣的結果內容,這時候就可以將這類查詢與結果快取在端點上,這樣這樣子可以達到和發布靜態內容到端點上類似的效果。這方法在提升行動應用程式的回應速度上特別有效。 ## cloud front Cache Policy ### 緩存(快取) 使用 Amazon CloudFront,您可以控制在 CloudFront 邊緣站點緩存的對象的緩存鍵。緩存鍵是緩存中每個對象的唯一標識符,它決定查看器請求是否導致 緩存命中. 當查看器請求生成與先前請求相同的緩存鍵,並且該緩存鍵的對象位於邊緣站點的緩存中並且有效時,就會發生緩存命中。當發生緩存命中時,對象 會從 CloudFront 邊緣站點提供給查看器 ### CachingOptimized 此策略旨在通過最小化 CloudFront 包含在緩存鍵中的值來優化緩存效率。 CloudFront 在緩存鍵中不包含任何查詢字符串或 cookie,僅包含規範化的 Accept-Encoding 標頭。(不管你給他甚麼東西,他都給你同一個值) 這使 CloudFront 能夠在源返回對像或啟用 CloudFront 邊緣壓縮時分別緩存 Gzip 和 Brotli 壓縮格式的對象。 ### CachingOptimizedForUncompressedObjects 此策略旨在通過最小化緩存鍵中包含的值來優化緩存效率。 不包含查詢字符串、標題或 cookie。 此策略與前一個相同,但它禁用緩存壓縮對象設置。 ### CachingDisabled 此策略禁用緩存。 此策略對於動態內容和不可緩存的請求很有用。 ### Elemental-MediaPackage 此策略旨在與作為 AWS Elemental MediaPackage 終端節點的源一起使用。 ### Amplify 此策略旨在與作為 AWS Amplify Web 應用程序的源一起使用。 ## 使用 cloud front 時的安全顧慮 ## PART1 cloud front服務會透過https來做傳輸保護傳輸內容,因為cloud front會往最近的端點傳輸內容相當於由aws來提供一個高品質傳輸路線所以就要利用線路上的端點來做保護,cloud front會向要求資料的使用者以及資料來源方進行授權驗證。授權從端點的SSL(SSL termination)終止機制開始,使用者與端點的通訊會以SSL憑證來保證安全性。如今為保證網站的安全性大部分的使用者會完全使用HTTPS,以此對網站進行100%的保護cloud front,cloud front會自動啟動以下這些進階的SSL功能: ### 高強度的安全加密(High security cipher): cloud front採用高強度加密演算法與加密套件,同時注重效能與安全性。 ### 完美的向前安全性(Perfect forward secrecy): 代表了就算你不小心洩漏了憑證檔案,讓其他人拿到了你的私有金鑰,他們也無法對你過去的傳輸過的資料進行解密。 ### OCSP 裝訂(OCPS stapling): 當用戶端發送TLS用戶端連線建立請求(又被稱為 *握手* 請求),cloud front會向OCSP回應服務(OCSP,Online Certificate Status Protocol,線上憑證狀態協定)詢問憑證的狀態,OCSP回應服務憑證的狀態後cloud front才會繼續完成與用戶端之間的TLS握手流程。 ### TCP快速連線(TCP fast open,又稱TCP快速開啟): 建立TCP session對話階段時,用戶端會收到一個TCP cookie檔案。之後,當下一次用戶端再次和伺服器端進行連線時,就可以將這個TCP cookie跟著 *握手* 請求一起發出。不過,Cloud front只有在TLS協定的網路連線下,才支援此功能。 ### 對資料來源憑證進行驗證: Cloud front會驗證來自資料來的SSL憑證。舉例而言,資料來源端的網域名稱必須和憑證內的憑證主體名稱(subject name)相符,而驗證必須是由可信任的CA(憑證認證機構,Ceritficate Authority)發行,並且憑證必須還沒過期等。 ### Session 紀錄單(Session tickets): 建立TCP連線後,用戶端還要再進行2次往返溝通,才能建立TLS協定連線(總共3次),這個往返溝通過程其時消耗掉不少資源,會造成少許延遲。因此,利用session紀錄單的話,就能讓用戶端重複利用先前的session對話階段,Cloud Front會將加密過的session資料發給用戶端,用戶端可以藉此進行簡化後的SSL握手流程。 ## PART2 可以選擇建立一個同時支援HTTP與HTTPS協定交付的網路,而對HTTP.HTTPS協定下的內容也可以使用同一組Cloud front網域內容。當HTTP的網路請求處理異常時,你可以將HTTP的網路請求重新導向改以HTTPS處理或是使用更加嚴格的HTTPS協定,除了上面的保護外TLS協定還提供了以下3個功能: ### 提供預設產生的CloudFront SSL網域名稱: 這個功能是指CloudFront要提供可分享的憑證時,使用的是對人不友善但是安全的網域名稱。 ### 支援SNI模式且可自訂SSL網域名稱: 這能讓你使用自己的SSL憑證檔案,並且採用支援SNI模式的TLS擴展協定(以便於根據不同用戶需求對應不同憑證)。你可以使用自訂的網域名稱與憑證,但是要注意某些較舊型的網頁瀏覽器或是作業系統,並不支援SNI模式 ### 專屬網路IP位址且可自訂SSL憑證: 這個功能中你也可以利用你自己的SSL憑證檔案,而CloudFront會以專屬網路IP位址來傳輸SSL協定內容。所有網頁瀏覽器或是作業系統都支援這個功能,但是啟用這個功能會產生額外收費 ## 整合CloudFront與ACM AWS驗證管理員(AWS,Certificate Manager)能夠方便建立/部署/管理以及更新在AWS上的SSL/TLS憑證。 你可以從CloudFront的介面,輕鬆透過ACM產生的新驗證,這個憑證產生並回傳的速度相當快,只在幾分鐘之間的事情而已,而且馬上就能使用在CloudFront以及ELB上。ACM完全免費提供支援SNI模式的自訂憑證功能,並且自動化的憑證更新流程用起來也完全沒有問題。 以下兩種SSL終止機制給你選擇: 1. 半加密式終止(Half bridge termination): 端點和終端使用者之間的連線是加密的,但端點和資料來源之間就不是走HTTPS加密連線了。這是為了獲得更好的效能表現,因此在端點與資料來元之間的連線只有用HTTP來連線。 2. 全加密式終止(Full bridge termination): 整段連線路徑都是以加密連線保護起來的。第一段連線只到端點,然後由端點終止後,由端點代理建立到資料來源之間一條新的HTTPS連線。這種機制通常會建議用於要從用戶端蒐集資料,或是要將隱私個資內容呈現給用戶端時。 ## 設定存取管控 當你只想把內容傳遞給特定客戶,限制某個內容的可存取時間,或是想要限制特定網址IP位址的內容存取權時,就可以用到這些存取管控設定。舉例而言,如果你的網站還處在開發階段,那麼就可以將CloudFront設定為只能從公司內部網路IP位址存取。 這裡有2種設定可以讓你控制私有內容存取: * 加上簽章的網路位址(Signed URLs): 如果你的使用者用的用戶端並不支援cookies功能,那麼就可以使用在URL位址加上簽章的方式,將個別檔案的存取限制給特定的使用者群,但是需要改變用來存取的URL位址。 * 加上簽章的Cookies(Signed cookies): 如果你想要同時對多個檔案的存取加上限制,又或者是你不想讓URL位址發生變動,那麼可以選擇將簽章加在cookie的方式,這樣你的URL位址就不會被更動。 ## 網頁應用程式防火牆 花資源來處理不必要的網路請求,就等於浪費成本。因此對不定期出現的惡意機器人程式時,就可以用AWS的網頁應用程式防火牆(WAF,Web Application Firewall)處理。需要設定一個黑名單的網路IP網址(IP Set)以阻擋來自這些網路IP位址請求的規則,最後要用預定允許網路請求進入,再加上這個規則,來將要阻擋的網路IP位址除外的方式,建立網頁的存取控制。除此之外,你還需要設定如何偵測惡意機器人程式的方式,藉此將這些網路IP位址加入IPSet當中。 你可以用ROBOTS.TXT來設定網站或式網頁應用程式中,哪些部分需要被保護起來,並且確保還是會留下一些路徑連往被保護起來內容。如果那些無式ROBOTS.TXT的惡意程式向隱藏起來的路徑發出網路請求,這會觸發指令檔內容,將這些發出請求的來源網路IP位址查詢出來後,把這些網路IP位址加進黑名。存取機制會阻擋住這些網路來源的網路請求。 ## 保護應用程式 由於駭客還是有可能直接繞過CloudFront,對後端展開攻擊,因此你需要對應用程式以及資料來源作一定的保護。 Amazon S3會保障所有用戶效能的同時,使用資料來源存取認證(OAI,Crigion Access Identity),來防止其他人直接存取你的s3 bucket。這個機制原理就是利用一個事先私下定義好的標頭,並將CloudFront加入存取白名單,如此只有CloudFront可以存取S3,不過你的資料來源可能不只會使用s3來儲存資料,因此還需要其他可以保護自訂型態資料的方法。如果是這樣你需要自行將CloudFront的IP位址群加入白名單,並且採用之前私下設定的標頭來建立機制,你還可以建立SNS服務在這組網路IP位址出現更動式通知你。 ###### tags: `林展`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up