

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Terraform 为 AWS WAF 解决方案部署安全自动化
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform"></a>

*Rahul Sharad Gaikwad 博士和 Tamilselvan P，Amazon Web Services*

## Summary
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-summary"></a>

AWS WAF 是一种 Web 应用程序防火墙，它通过使用可自定义的规则（您可以在 *Web 访问控制列表*中定义和部署）来帮助保护应用程序免受常见漏洞攻击（ACLs）。配置 AWS WAF 规则可能具有挑战性，特别是对于没有专门安全团队的组织而言。为了简化此过程，Amazon Web Services (AWS) [为 AWS WAF解决方案提供了安全自动化](https://aws.amazon.com/solutions/implementations/security-automations-for-aws-waf/)，该解决方案可自动部署具有一组过滤基于 Web 的攻击的 AWS WAF 规则的单个 Web ACL。Terraform 部署期间，您可以指定要纳入的保护功能。部署此解决方案后，会 AWS WAF 检查向现有 Amazon CloudFront 分配或应用程序负载均衡器发出的网络请求，并阻止任何不符合规则的请求。

可以按 AWS CloudFormation 照《安全自动化[AWS WAF 实施指南》中的说明使用来部署 AWS WAF 解决方案的安全自动化。](https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/overview.html)这种模式为使用 HashiCorp Terraform作为其首选基础设施即代码 (IaC) 工具来配置和管理其云基础架构的组织提供了另一种部署选项。部署此解决方案时，Terraform 会自动将更改应用到云端，并部署和配置 AWS WAF 设置和保护功能。

## 先决条件和限制
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ AWS Command Line Interface (AWS CLI) 版本 2.4.25 或更高版本，已安装并配置了必要的权限。有关更多信息，请参阅[入门](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)（AWS CLI 文档）。
+ Terraform 版本 1.1.9 或更高版本，已安装并配置。有关更多信息，请参阅[安装 Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)（Terraform 文档）。

## 架构
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-architecture"></a>

**目标架构**

此模式为 AWS WAF 解决方案部署安全自动化。有关目标架构的更多信息，请参阅《*安全自动化 AWS WAF 实施指南*》中的[架构概述](https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/overview.html)。有关此部署中的 AWS Lambda 自动化、应用程序日志解析器、日志解析器、IP 列表解析器和访问处理程序的更多信息，请参阅《*安全自动化*实施指南》中的[组件详细信息](https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/appendix-b.html)。 AWS WAF AWS WAF 

**Terraform 部署**

当您运行 `terraform apply` 时，Terraform 会执行以下操作：

1. **Terraform 根据测试.tfvars 文件中的输入创建 AWS Identity and Access Management (IAM) 角色和 Lambda 函数。**

1. Terraform 根据**测试** .tfvars 文件中的输入创建 AWS WAF ACL 规则和 IP 集。

1. **Terraform 根据测试.tfvars 文件中的输入创建了亚马逊简单存储服务 (Amazon S3) 存储桶 AWS Glue 、 EventBridge 亚马逊规则、数据库表和亚马逊雅典娜工作组。**

1. Terraform 部署 AWS CloudFormation 堆栈来配置自定义资源。

1. Terraform 根据 **testing.tfvars** 文件中的指定输入创建 Amazon API Gateway 资源。

**自动化和扩缩**

您可以使用此模式为多个 AWS WAF 规则创建规则， AWS 账户 并在 AWS 区域 整个 AWS 云 环境中为 AWS WAF 解决方案部署安全自动化。

## 工具
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-tools"></a>

**AWS 服务**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行外壳中的命令进行交互。
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) 是一种 Web 应用程序防火墙，可帮助您监控转发至受保护 Web 应用程序资源的 HTTP 和 HTTPS 请求。

**其他服务**
+ [Git](https://git-scm.com/docs) 是开源分布式版本控制系统。
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一款命令行界面应用程序，可帮助您使用代码来配置和管理云基础架构和资源。

**代码存储库**

此模式的代码可在 “[使用 Terraform GitHub AWS WAF 实现自动化](https://github.com/aws-samples/aws-waf-automation-terraform-samples)” 存储库中找到。

## 最佳实践
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-best-practices"></a>
+ 将静态文件置于单独的 Amazon S3 存储桶。
+ 避免对变量执行硬编码。
+ 限制自定义脚本的使用。
+ 采用副本命名约定。

## 操作说明
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-epics"></a>

### 设置本地工作站
<a name="set-up-your-local-workstation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Git。 | 按照[入门](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)（Git 网站）中的说明在本地工作站上安装 Git。 | DevOps 工程师 | 
| 克隆存储库。 | 在您的本地工作站上，输入以下命令以克隆代码存储库：<pre>git clone https://github.com/aws-samples/aws-waf-automation-terraform-samples.git</pre> | DevOps 工程师 | 
| 更新变量。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.html) | DevOps 工程师 | 

### 使用 Terraform 预置目标架构
<a name="provision-the-target-architecture-using-terraform"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 初始化 Terraform 配置。 | 输入以下命令，以初始化包含 Terraform 配置文件的工作目录：<pre>terraform init</pre> | DevOps 工程师 | 
| 预览 Terraform 计划。 | 输入如下命令。Terraform 会评估配置文件，以确定已声明资源的目标状态。然后，它将目标状态与当前状态进行比较，并创建计划：<pre>terraform plan -var-file="testing.tfvars"</pre> | DevOps 工程师 | 
| 验证计划。 | 查看计划，并确认它已在您的目标 AWS 账户中配置了所需架构。 | DevOps 工程师 | 
| 部署解决方案。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.html) | DevOps 工程师 | 

### 验证并清理
<a name="validate-and-clean-up"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证更改。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.html) | DevOps 工程师 | 
| （可选）清理 基础架构。 | 如果想删除此解决方案所执行的所有资源和配置更改，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.html) | DevOps 工程师 | 

## 问题排查
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| `WAFV2 IPSet: WAFOptimisticLockException`错误 | 如果运行 `terraform destroy` 命令时****收到此错误，则必须手动删除 IP 集。有关说明，请参阅[删除 IP 集](https://docs.aws.amazon.com/waf/latest/developerguide/waf-ip-set-deleting.html)（AWS WAF 文档）。 | 

## 相关资源
<a name="deploy-the-security-automations-for-aws-waf-solution-by-using-terraform-resources"></a>

**AWS 参考**
+ [《安全自动化 AWS WAF 实施指南》](https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/welcome.html)
+  AWS WAF（AWS 解决方案库）[的安全自动化](https://aws.amazon.com/solutions/implementations/security-automations-for-aws-waf/)
+ [常见问题解答的安全自动化 AWS WAF](https://aws.amazon.com/solutions/implementations/security-automations-for-aws-waf/resources/#FAQ)

**Terraform 参考**
+ [Terraform 后端配置](https://developer.hashicorp.com/terraform/language/backend)
+ [Terraform P AWS rovider-文档和用法](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Terraform AWS 提供者（存储](https://github.com/hashicorp/terraform-provider-aws)库）GitHub 