本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
確保 AWS 負載平衡器使用安全接聽程式通訊協定 (HTTPS、SSL/TLS)
Chandini Penmetsa 和 Purushotham G K,Amazon Web Services
Summary
在 Amazon Web Services (AWS) 雲端上,Elastic Load Balancing 會自動將傳入的應用程式流量分散到多個目標,例如 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、容器、IP 地址和 AWS Lambda 函數。負載平衡器使用接聽程式來定義負載平衡器用來接受來自使用者的流量的連接埠和通訊協定。Application Load Balancer 在應用程式層進行路由決策,並使用 HTTP/HTTPS 通訊協定。Network Load Balancer 在傳輸層做出路由決策,並使用傳輸控制通訊協定 (TCP)、傳輸層安全性 (TLS)、使用者資料包通訊協定 (UDP) 或 TCP_UDP 通訊協定。Classic Load Balancer 會在傳輸層、使用 TCP 或 Secure Sockets Layer (SSL) 通訊協定,或在應用程式層使用 HTTP/HTTPS 進行路由決策。
您的組織可能有安全或合規要求,負載平衡器只接受來自安全通訊協定之使用者的流量,例如 HTTPS 或 SSL/TLS。
此模式提供安全控制,使用 Amazon EventBridge 規則來監控 Application Load Balancer CreateListener和 Network Load Balancer 的 和 ModifyListener API 呼叫,以及 Classic Load Balancer 的 CreateLoadBalancerListeners和 CreateLoadBalancer API 呼叫。如果 HTTP、TCP/UDP 或 TCP_UDP 用於負載平衡器的接聽程式通訊協定,則控制項會叫用 Lambda 函數。Lambda 函數會將訊息發佈至 Amazon Simple Notification Service (Amazon SNS) 主題,以傳送包含負載平衡器詳細資訊的通知。
先決條件和限制
先決條件
- 作用中的 AWS 帳戶 
- 您想要接收違規通知的電子郵件地址 
- 儲存 Lambda 程式碼 .zip 檔案的 Amazon Simple Storage Service (Amazon S3) 儲存貯體 
限制
- 除非更新負載平衡器接聽程式,否則此安全控制不會檢查現有的負載平衡器。 
- 此安全控制是區域性的,必須部署在您打算監控的 AWS 區域中。 
架構
目標技術堆疊
- Lambda 函數 
- Amazon SNS 主題 
- EventBridge 規則 
目標架構

自動化和擴展
- 如果您使用的是 AWS Organizations,則可以使用 AWS Cloudformation StackSets,將此範本部署在您想要監控的多個帳戶中。 
工具
- AWS CloudFormation – AWS CloudFormation 是一項服務,可協助您使用基礎設施做為程式碼來建立模型和設定 AWS 資源。 
- Amazon EventBridge – Amazon EventBridge 可從您自己的應用程式、軟體即服務 (SaaS) 應用程式和 AWS 服務提供即時資料串流,將該資料路由到 Lambda 函數等目標。 
- AWS Lambda – Lambda 支援執行程式碼,無需佈建或管理伺服器。 
- Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一種高度可擴展的物件儲存服務,可用於各種儲存解決方案,包括網站、行動應用程式、備份和資料湖。 
- Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 會協調和管理發佈者和用戶端之間的訊息傳遞或傳送,包括 Web 伺服器和電子郵件地址。訂閱者會收到發佈到所訂閱主題的所有訊息,且某一主題的所有訂閱者均會收到相同訊息。 
最佳實務
確保使用的 SNS 主題無法公開存取。如需詳細資訊,請參閱 AWS 文件。
史詩
| 任務 | 描述 | 所需的技能 | 
|---|---|---|
| 定義 S3 儲存貯體。 | 在 Amazon S3 主控台上,選擇或建立具有不包含正斜線之唯一名稱的 S3 儲存貯體。S3 儲存貯體名稱全域唯一,且命名空間由所有 AWS 帳戶共用。您的 S3 儲存貯體必須與正在評估的負載平衡器位於相同的區域。 | 雲端架構師 | 
| 將 Lambda 程式碼上傳至 S3 儲存貯體。 | 將「附件」區段中提供的 Lambda 程式碼 .zip 檔案上傳至定義的 S3 儲存貯體。 | 雲端架構師 | 
| 部署 AWS CloudFormation 範本。 | 在 AWS CloudFormation 主控台上,在與 S3 儲存貯體相同的 AWS 區域中,部署「附件」區段中提供的範本。在下一個史詩中,提供參數的值。 | 雲端架構師 | 
| 任務 | 描述 | 所需的技能 | 
|---|---|---|
| 命名 S3 儲存貯體。 | 輸入您在第一個 epic 中建立的 S3 儲存貯體名稱。 | 雲端架構師 | 
| 提供 Amazon S3 字首。 | 在您的 S3 儲存貯體中提供 Lambda 程式碼 .zip 檔案的位置,不帶正斜線 (例如  | 雲端架構師 | 
| 提供 SNS 主題 ARN。 | 如果您想要將現有的 SNS 主題用於違規通知,請提供 SNS 主題 Amazon Resource Name (ARN)。若要建立新的 SNS 主題,請將值保留為  | 雲端架構師 | 
| 提供電子郵件地址。 | 提供作用中的電子郵件地址以接收 Amazon SNS 通知。 | 雲端架構師 | 
| 定義記錄層級。 | 定義 Lambda 函數的記錄層級和頻率。 會 | 雲端架構師 | 
| 任務 | 描述 | 所需的技能 | 
|---|---|---|
| 下載 範本。 | 下載附件區段中提供的 CloudFormation 範本。 | 雲端架構師 | 
| 建立堆疊。 | 在與 S3 儲存貯體相同的區域中,導覽至 CloudFormation 服務主控台,並部署下載的範本。如需參數詳細資訊,請參閱上一個史詩。 | 雲端架構師 | 
| 驗證資源。 | 完全建立堆疊後,導覽至資源索引標籤,然後驗證資源。範本將建立下列資源: 
 | 雲端架構師 | 
| 任務 | 描述 | 所需的技能 | 
|---|---|---|
| 確認訂閱。 | 當範本成功部署時,如果建立新的 SNS 主題,訂閱電子郵件訊息會傳送至 參數中提供的電子郵件地址。您必須確認此電子郵件訂閱,才能接收違規通知。 | 雲端架構師 | 
故障診斷
| 問題 | 解決方案 | 
|---|---|
| 堆疊建立失敗。GetObject 時發生錯誤。S3 錯誤代碼:PermanentRedirect. S3 錯誤訊息:儲存貯體位於此區域:xx-xxxx-1。請使用此區域重試請求。 | 請確定 S3 儲存貯體區域和正在部署堆疊的區域相同。 | 
| 堆疊建立失敗。python3.6 的執行時間參數不再支援建立或更新 AWS Lambda 函數。 | 將第 186 行下載的範本從 Python 3.6 版更新為 3.9。 | 
相關資源
附件
若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip