本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
限制對應用程式負載平衡器的存取
對於在 Elastic Load Balancing 中由面向網際網路的應用程式負載平衡器提供的 Web 應用程式或其他內容, CloudFront 可以快取物件並直接提供給使用者 (檢視者),從而降低應用程式負載平衡器的負載。面向網際網路的負載平衡器具有可公開解析的DNS名稱,並透過網際網路將來自用戶端的要求路由到目標。
CloudFront還可以幫助減少延遲,甚至吸收一些分佈式拒絕服務(DDoS)攻擊。
但是,如果使用者可以直接略過 CloudFront 並存取您的 Application Load Balancer,您將無法獲得這些好處。但是您可以設定 Amazon CloudFront 和 Application Load Balancer,以防止使用者直接存取應用程式負載平衡器。這讓使用者只能透過以下方式存取 Application Load Balancer CloudFront,確保您獲得使用的好處 CloudFront。
若要防止使用者直接存取應用程式負載平衡器並僅允許透過存取 CloudFront,請完成下列高階步驟:
-
設定 CloudFront 為將自訂HTTP標頭新增至傳送至 Application Load Balancer 的要求。
-
將應用程式負載平衡器設定為僅轉寄包含自訂標HTTP頭的要求。
-
(選擇性) 必須HTTPS改善此解決方案的安全性。
如需詳細資訊,請參閱下列主題。完成這些步驟後,使用者只能透過存取您的 Application Load Balancer CloudFront。
主題
設定 CloudFront 為將自訂標HTTP頭新增至要求
您可以設定 CloudFront 為將自訂HTTP標頭新增至傳送至原始伺服器的要求 (在本例中為 Application Load Balancer)。
重要
此用例依賴於保留自訂標頭名稱和值密碼。如果標頭名稱和值不是秘密的,其他用HTTP戶端可能會將它們包含在直接傳送至 Application Load Balancer 的要求中。這可能會導致 Application Load Balancer 的運作方式,就像要求來自其他 CloudFront 時間一樣。若要防止這種情況,請保留自訂標頭名稱和值密碼。
您可以設 CloudFront 定使用 CloudFront主控台將自訂HTTP標頭新增至原始請求 AWS CloudFormation,或 CloudFront API.
- 若要新增自訂HTTP標頭 (CloudFront 主控台)
-
在 CloudFront 主控台中,使用 Origin 設定中的 Origin 自訂標題設定。輸入「表頭名稱」及其「值」。
注意
在生產中,使用隨機生成的標題名稱和值。將標頭名稱和值視為安全憑據,例如用戶名和密碼。
當您為現有發行版建立或編輯原點時,以及建立新 CloudFront 發佈時,您可以編輯 Origin 自訂標題設定。如需詳細資訊,請參閱 更新分佈 和 建立分發。
- 若要新增自訂HTTP標頭 (AWS CloudFormation)
-
在 AWS CloudFormation 範本中,使用
OriginCustomHeaders
屬性,如下列範例所示。注意
此範例中的標頭名稱和值僅為演示。在生產中,使用隨機產生的值。將標頭名稱和值視為安全登入資料,如使用者名稱和密碼。
AWSTemplateFormatVersion: '2010-09-09' Resources: TestDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: app-load-balancer.example.com Id: Example-ALB CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 OriginCustomHeaders: - HeaderName: X-Custom-Header HeaderValue: random-value-1234567890 Enabled: 'true' DefaultCacheBehavior: TargetOriginId: Example-ALB ViewerProtocolPolicy: allow-all CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 PriceClass: PriceClass_All ViewerCertificate: CloudFrontDefaultCertificate: 'true'
若要取得更多資訊,請參閱《AWS CloudFormation 使用指南》中的原點和OriginCustomHeader性質。
- 若要新增自訂HTTP標頭 (CloudFront API)
-
在中 CloudFront API,使用內部的
CustomHeaders
物件Origin
。如需詳細資訊,請參閱 CreateDistributionAmazon CloudFront API 參考UpdateDistribution中的和,以及您SDK或其他API客戶的文件。
有一些標頭名稱不能指定為來源自訂標頭。如需詳細資訊,請參閱無法新增至原始請求的 CloudFront 自訂標頭。
將應用程式負載平衡器設定為僅轉寄包含特定標頭的要求
設定為將自訂HTTP標頭新增 CloudFront 至傳送至 Application Load Balancer 的要求後 (請參閱上一節),您可以將負載平衡器設定為僅轉寄包含此自訂標頭的要求。您可以透過在負載平衡器的接聽程式中新增規則並修改預設規則來執行此動作。
必要條件
若要使用下列程序,您必須具有至少一個接聽程式的 Application Load Balancer。如果您尚未建立應用程式負載平衡器,請參閱應用程式負載平衡器使用者指南中的建立應用程式負載平衡器。
下列程序會修改HTTPS監聽器。您可以使用相同的處理程序來修改HTTP監聽器。
更新 Application Load Balancer 接聽程式中的規則
-
新增規則。使用新增規則中的指示,並進行下列修改:
將規則新增至負載平衡器,該平衡器為您的 CloudFront 發佈的原點。
在「新增條件」中,選擇「HTTP 標頭」。指定HTTP您在中加入做為原點自訂標頭的標頭名稱和值 CloudFront。
針對 [新增動作],選擇 [轉寄至]。選擇要轉寄請求的目標群組。
-
在負載平衡器的接聽程式中編輯預設規則。使用「編輯規則」中的指示,並進行下列修改:
編輯負載平衡器的預設規則,該規則是您 CloudFront 發佈的原點。
刪除預設動作,然後針對 [新增動作] 選擇 [傳回固定回應]。
在回應代碼中,輸入
403
。在回應主體中,輸入
Access denied
。
完成這些步驟之後,負載平衡器接聽程式會有兩個規則。一個規則會轉寄包含HTTP標頭 (來自的要求 CloudFront) 的要求。另一個規則會針對所有其他要求 (不來自的要求 CloudFront) 傳送固定回應。
您可以將要求傳送至您的 CloudFront 散發,並傳送至您的 Application Load Balancer,以驗證解決方案是否有效。傳 CloudFront 回 Web 應用程式或內容的要求,而直接傳送至 Application Load Balancer 的要求會傳回含純文字訊息的回403
應Access denied
。
(選用) 改善此解決方案的安全性
為了提高此解決方案的安全性,您可以將分發 CloudFront 配置為在向應用程序負載平衡器發送請求HTTPS時始終使用。請記住,此解決方案僅適用於保留自訂標頭名稱和值密碼的情況下。使用HTTPS可協助防止竊聽器探索標頭名稱和值。我們也建議定期輪換標頭名稱和值。
用HTTPS於原始請求
若要設定HTTPS為用於原始要求,請 CloudFront 將「原始通訊協定原則」設定設定設定為「HTTPS僅」。此設定可在 CloudFront 主控台 AWS CloudFormation、和中使用 CloudFront API。如需詳細資訊,請參閱通訊協定 (僅限自訂原始伺服器)。
當您設定 CloudFront 為用於原始要求時,下列條件也HTTPS適用:
-
您必須設定 CloudFront 使用原始要求原則將
Host
標頭轉寄至原始位置。您可以使用AllViewer 受管理的來源請求策略。 -
請確定您的 Application Load Balancer 具有HTTPS接聽程式 (如前一節所示)。如需詳細資訊,請參閱應用程式負載平衡器使用者指南中的建立HTTPS接聽程式。使用接HTTPS聽程式時,您必須擁有與路由到 Application Load Balancer 的網域名稱相符的SSL/TLS憑證。
-
SSL/TLS證書 CloudFront 只能請求(或導入)
us-east-1
AWS 區域 in AWS Certificate Manager (ACM)。由於 CloudFront 是全球服務,因此它會自動將憑證從「us-east-1
區域」散發到與您的散 CloudFront發相關聯的所有區域。-
例如,如果您在區域中有一個 Application Load Balancer (ALB),則必須在
ap-southeast-2
區ap-southeast-2
域 (用於與ALB來源HTTPS之間使用) CloudFront 和區us-east-1
域 (用於檢視器和HTTPS之間使用 CloudFront) 中設定SSL/TLS憑證。這兩個憑證都應與路由到應 Application Load Balancer 的網域名稱相符。如需詳細資訊,請參閱AWS 區域 適用於 AWS Certificate Manager。
-
-
如果 Web 應用程式的一般使用者 (也稱為檢視者或用戶端) 可以使用HTTPS,您也可以設定 CloudFront 為偏好 (甚至需要) 一般使用者的HTTPS連線。若要這樣做,請使用檢視器協定政策設定。您可以將其設定為將使用者從重新導向HTTP至HTTPS,或拒絕使用的要求HTTP。此設定可在 CloudFront 主控台 AWS CloudFormation、和中使用 CloudFront API。如需詳細資訊,請參閱檢視器通訊協定政策。
輪換標頭名稱和值
除了使用之外HTTPS,我們還建議您定期旋轉標頭名稱和值。執行這項操作的高階步驟如下:
-
設定 CloudFront 以將其他自訂HTTP標頭新增至傳送至 Application Load Balancer 的要求。
-
更新應用程式負載平衡器接聽程式規則,以轉寄包含此額外自訂HTTP標頭的要求。
-
設定 CloudFront 以停止將原始自訂HTTP標頭新增至傳送至 Application Load Balancer 的要求。
-
更新應用程式負載平衡器接聽程式規則,以停止轉送包含原始自訂HTTP標頭的要求。
如需完成這些步驟的詳細資訊,請參閱前一章節。
(選擇性) 透過使用 AWS-managed 前置詞清單來限制對原點的存取 CloudFront
若要進一步限制對 Application Load Balancer 的存取,您可以設定與 Application Load Balancer 相關聯的安全性群組,以便僅接受服務使用 AWS-managed 前置詞清單 CloudFront 時來自的流量。如此可防止非源 CloudFront 自網路層 (第 3 層) 或傳輸層 (第 4 層) 的流量到達您的 Application Load Balancer。
如需詳細資訊,請參閱使用 Amazon CloudFront 部落格文章的 AWS-managed 前置詞清單限制對您來源的存