使用地形表單部署 AWS WAF 解決方案的安全自動化 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用地形表單部署 AWS WAF 解決方案的安全自動化

由拉胡爾·沙拉德·蓋克瓦德博士(AWS)和泰米爾塞爾文 P(AWS)創建

代碼存儲庫:aws-waf-automation-terraform-示

環境:PoC 或試點

技術:安全性、身分識別、合規性;基礎架構;內容交付; DevOps

工作負載:所有其他工作

AWS 服務:AWS WAF

Summary

AWS WAF 是一種 Web 應用程式防火牆,可使用可在 Web 存取控制清單 (ACL) 中定義和部署的可自訂規則,協助保護應用程式免於遭受常見入侵。設定 AWS WAF 規則可能具有挑戰性,尤其是對於沒有專門安全團隊的組織而言。為了簡化此程序,Amazon Web Services (AWS) 提供 AWS WAF 的安全自動化解決方案,該解決方案會自動部署單一 Web ACL,其中包含一組可篩選網路攻擊的 AWS WAF 規則。在 Terraform 部署期間,您可以指定要包含哪些保護功能。部署此解決方案之後,AWS WAF 會檢查對現有 Amazon CloudFront 分發或應用程式負載平衡器的 Web 請求,並封鎖任何不符合規則的請求。

AWS WAF 解決方案的安全自動化可 CloudFormation 根據 AWS WAF 實作指南的安全自動化指南中的指示使用 AWS 來部署。此模式為使用 HashiCorp Terraform 做為其慣用基礎結構即程式碼 (IaC) 工具來佈建和管理其雲端基礎結構的組織提供替代部署選項。部署此解決方案時,Terraform 會自動套用雲端中的變更,並部署和設定 AWS WAF 設定和保護功能。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 使用必要許可安裝和設定 AWS Command Line Interface (AWS CLI) (AWS CLI)。如需詳細資訊,請參閱入門 (AWS CLI 文件)。

  • 安裝和配置地形。如需詳細資訊,請參閱安裝地形 (地形文件)。

產品版本

  • AWS CLI 版本 2.4.25 或更新版本

  • 地形版本 1.1.9 或更高版本

架構

目標架構

此模式會為 AWS WAF 解決方案部署安全自動化。如需目標架構的詳細資訊,請參閱 AWS WAF 安全自動化指南中的架構概觀如需有關此部署中 AWS Lambda 自動化、應用程式日誌剖析器、AWS WAF 日誌剖析器、IP 清單剖析器和存取處理常式的詳細資訊,請參閱 AWS WAF 安全自動化實作指南中的元件詳細資訊。

地形部署

當您運行時terraform apply,地形會執行以下操作:

  1. Terraform 會根據測試 .tfvars 檔案的輸入來建立 IAM 角色和 Lambda 函數。

  2. Terraform 會根據測試 .tfvars 檔案的輸入來建立 AWS WAF ACL 規則和 IP 集。

  3. Terraform 會根據測試 .tfvars 檔案的輸入,建立 Amazon 簡單儲存服務 (Amazon S3) 儲存貯體、亞馬遜 EventBridge 規則、AWS Glue 資料庫表和亞馬遜雅典娜工作群組。

  4. Terraform 會部署 AWS CloudFormation 堆疊以佈建自訂資源。

  5. Terraform 會根據來自測試 .tfvars 檔案的指定輸入來建立 Amazon API Gateway 資源。

自動化和規模

您可以使用此模式為多個 AWS 帳戶和 AWS 區域建立 AWS WAF 規則,以便在整個 AWS 雲端環境中部署 AWS WAF 解決方案的安全自動化。

工具

AWS 服務

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • AWS WAF 是一種 Web 應用程式防火牆,可協助您監控轉寄至受保護 Web 應用程式資源的 HTTP 和 HTTPS 請求。

其他服務

  • Git 是一個開放原始碼的分散式版本控制系統。

  • HashiCorp Terraform 是一個命令列介面應用程式,可協助您使用程式碼來佈建和管理雲端基礎結構和資源。

代碼存儲庫

此模式的程式碼可在 GitHub AWS WAF 自動化使用地形儲存庫取得

最佳實務

  • 將靜態文件放在單獨的 S3 存儲桶中。

  • 避免對變量進行硬編碼。

  • 限制自訂指令碼的使用。

  • 採用命名慣例。

史诗

任務描述所需技能

安裝 Git。

按照入門(Git 網站)中的說明在本地工作站上安裝 Git。

DevOps 工程師

複製儲存庫。

在您的本機工作站上,輸入下列指令以複製程式碼儲存庫。若要複製完整指令 (包括 repo URL),請參閱此模式的其他資訊一節。

git clone <repo-URL>.git
DevOps 工程師

更新變數。

  1. 輸入下列命令,導覽至複製的目錄。

    cd terraform-aws-waf-automation
  2. 在任何文字編輯器中,開啟測試 .t fvars 檔案。

  3. 更新測試 .t fvars 檔案中變數的值。

  4. 儲存並關閉檔案。

DevOps 工程師
任務描述所需技能

初始化地形組態。

輸入下列命令以初始化包含 Terraform 組態檔的工作目錄。

terraform init
DevOps 工程師

預覽地形計劃。

輸入以下命令。Terraform 會評估組態檔案,以判斷宣告資源的目標狀態。然後將目標狀態與目前狀態進行比較,並建立計劃。

terraform plan -var-file="testing.tfvars"
DevOps 工程師

驗證計劃。

檢閱計劃並確認其在目標 AWS 帳戶中設定所需的架構。

DevOps 工程師

部署解決方案。

  1. 輸入下列指令以套用計劃。

    terraform apply -var-file="testing.tfvars"
  2. 輸入 yes 以確認。Terraform 會建立、更新或銷毀基礎結構,以達到組態檔案中宣告的目標狀態。如需序列的詳細資訊,請參閱此模式的「架構」一節中的 Terraform 部署

DevOps 工程師
任務描述所需技能

驗證變更。

  1. 在 Terraform 主控台中,確認輸出符合預期的結果。

  2. 登入 AWS 管理主控台。

  3. 確認 Terraform 主控台中的輸出是否已成功部署在您的 AWS 帳戶中。

DevOps 工程師

(選擇性) 清理基礎結構。

如果您想要移除此解決方案所做的所有資源和組態變更,請執行下列動作:

  1. 在地形控制台中,輸入以下命令。

    terraform destroy -var-file="testing.tfvars”
  2. 輸入 yes 以確認。

DevOps 工程師

故障診斷

問題解決方案

WAFV2 IPSet: WAFOptimisticLockException 錯誤

如果您在執行terraform destroy命令時收到此錯誤,則必須手動刪除 IP 集。如需指示,請參閱刪除 IP 集 (AWS WAF 文件)。

相關資源

AWS 參考資料

地形參考

其他資訊

以下命令克隆此模式的 GitHub 存儲庫。

git clone https://github.com/aws-samples/aws-waf-automation-terraform-samples.git