我已經為 AWS 應用程式負載平衡器 DNS 建立了一個 Route53 記錄集。我的問題是 AWS Cloudfront 來源是否可以包含此記錄集 url?
例如:ALB DNS 名稱:xxxx.us-east-1.elb.amazonaws.com。應用程式負載平衡器 DNS 的 Route53 中的記錄集項目:www.abc.com
現在我可以將 www.abc.com 作為 cloudfront 中的來源嗎?
答案1
如果您將來源協定設定為僅 HTTPS,則 CloudFront 和 ELB 之間的流量將透過 TLS 進行保護,並且您可以透過任何一種方式設定實際的來源網域名稱。標Cloudfront-Forwarded-Proto
頭將指示 CloudFront 和檢視器之間使用的協定(因為在此配置中,負載平衡器將始終設定X-Forwarded-Proto: https
)。
CloudFront 堅持其自身與 Origin 之間的 TLS 協商是值得信賴的。一個經常被忽視的因素是 TLS (SSL) 證書做兩件事:提供連接加密(顯而易見)和提供伺服器身份驗證——證明伺服器被授權成為所請求主機名的伺服器,並且是不是冒名頂替者(不太明顯)。這就是為什麼如果伺服器憑證的主題和/或主題備用名稱與瀏覽器網址列中的主機名稱不匹配,您會收到瀏覽器警告的原因。
CloudFront 對此要求允許有限的例外,只要滿足兩個條件之一,憑證驗證就會成功:
- ELB 必須出示與來源網域相符的證書,或者
- ELB 必須提供
Host
與 CloudFront 從瀏覽器轉送至 ELB 的標頭相符的憑證。
否則,CloudFront 會回傳502 Bad Gateway
。
如果您使用 ELB 主機名稱作為來源域名,則第一個條件不成立,這就是為什麼 CloudFront 控制台Host
在發現您的目標是 ELB 時提示您將標頭列入白名單以進行轉送。
但只要你的環境看起來像這樣...
www.example.com
指向 CloudFront 並在分配的備用網域中進行配置,並且- 標
Host
頭配置為白名單,且 - ELB主機名稱設定為來源域名,且
- ELB 擁有有效的證書
www.example.com
……然後它就可以工作,但有一個例外:dzczcexample.cloudfront.net
無法在瀏覽器中使用該網域透過 CloudFront 存取您的來源。在某些配置中,這是可取的,因為您實際上並不希望透過第二個入口點存取您的內容。
否則,您最好的選擇確實是按照您的建議進行操作 - 將您控制的網域中的主機名稱對應到 DNS 中的 ELB,並將該主機名稱配置為 CloudFront 中的原始網域名稱。
CloudFront 可以使用任何可透過 Internet 存取的主機名稱作為其來源 - 來源不必位於 AWS 內部。作為一個隨機範例,您可以使用 Google Cloud Storage 儲存桶作為 CloudFront 中的來源。 CloudFront 和 Origin 之間的整合是鬆散的——我的意思是 CloudFront 對 ELB 沒有特殊的認識。它只是透過公共 DNS 解析主機名稱並建立連線。
另請注意,如果您想確保只有您的 CloudFront 分配可以與您的來源進行通信,您將需要在 CloudFront 中配置一個秘密的自訂來源標頭,並且來源需要拒絕缺少此值的請求。雖然可以使用 ELB 安全群組僅允許從 CloudFront 位址空間進行訪問,但該空間經常增長,您需要一種方法來保持安全群組更新以允許新的位址範圍...但我認為這提供了一種錯誤的安全感,因為任何人都可以在技術上創建CloudFront 發行版並將其指向任何地方,包括您的ELB。使用自訂標頭可以避免這種情況。