

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

# 架构详情
<a name="architecture-details"></a>

本节介绍构成此解决方案的组件和 AWS 服务，以及这些组件如何协同工作的架构详情。

## 此解决方案中的 AWS 服务
<a name="aws-services-in-this-solution"></a>


| AWS 服务 | 描述 | 
| --- | --- | 
|   [AWS WAF](https://aws.amazon.com/waf/)   |   **核心。**部署 AWS WAF Web ACL、AWS 托管规则规则组、自定义规则和 IP 集。发出 AWS WAF API 调用以阻止常见攻击和保护 Web 应用程序。  | 
|   [Amazon Data Firehose](https://aws.amazon.com/kinesis/data-firehose/)   |   **核心。**将 AWS WAF 日志传送到亚马逊 S3 存储桶。  | 
|   [Amazon S3](https://aws.amazon.com/s3/)   |   **核心。**存储 AWS WAF CloudFront、和 ALB 日志。  | 
|   [AWS Lambda](https://aws.amazon.com/lambda/)   |   **核心。**部署多个 Lambda 函数以支持自定义规则。  | 
|   [Amazon EventBridge](https://aws.amazon.com/eventbridge/)   |   **核心。**创建事件规则以调用 Lambda。  | 
|   [Amazon Athena](https://aws.amazon.com/athena/)   |   **支持。**创建 Athena 查询和工作组以支持 Athena 日志解析器。  | 
|   [AWS Glue](https://aws.amazon.com/glue/)   |   **支持。**创建数据库和表以支持 Athena 日志解析器。  | 
|   [Amazon SNS](https://aws.amazon.com/sns/)   |   **支持。**发送亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 电子邮件通知，以支持在允许和拒绝的名单上保留 IP。  | 
|   [AWS Systems Manager](https://aws.amazon.com/systems-manager/)   |   **支持。**提供应用程序级资源监控，并可视化资源操作和成本数据。  | 

# 日志解析器选项
<a name="log-parser-options"></a>

如[架构概述中所述](architecture-overview.md)，有三个选项可以处理 HTTP 泛洪以及扫描器和探测器保护。以下各节将更详细地解释这些选项。

## AWS WAF 基于费率的规则
<a name="aws-waf-rate-based-rule"></a>

基于速率的规则可用于 HTTP 洪水防护。默认情况下，基于速率的规则会根据请求 IP 地址对请求进行聚合和速率限制。此解决方案允许您指定客户端 IP 在随后、持续更新的五分钟内允许的 Web 请求数量。如果某个 IP 地址违反了配置的配额，AWS WAF 会阻止新的请求，直到请求速率低于配置的配额。

如果请求配额为每五分钟超过 2,000 个请求，并且您无需进行自定义，我们建议您选择基于速率的规则选项。例如，在计算请求数时不考虑静态资源访问权限。

您可以进一步配置规则，使其使用其他各种聚合键和密钥组合。有关更多信息，请参阅[聚合选项和密钥](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-rate-based-aggregation-options.html)。

## 亚马逊 Athena 日志解析器
<a name="amazon-athena-log-parser"></a>

**HTTP Flood Protec** tion 和 **Scanner & Prob** e Prot **ec** tion 模板参数都提供 Athena 日志解析器选项。激活后，预 CloudFormation 置 Athena 查询和计划的 Lambda 函数，负责编排 Athena 的运行、处理结果输出和更新 AWS WAF。此 Lambda 函数由配置为每五分钟运行一次 CloudWatch 的事件调用。可以使用 **Athena 查询运行时间计划**参数对其进行配置。

如果您无法使用基于 AWS WAF 费率的规则，并且熟悉 SQL 来实现自定义，我们建议您选择此选项。有关如何更改默认查询的更多信息，请参阅[查看 Amazon Athena](view-amazon-athena-queries.md) 查询。

HTTP 洪水防护基于 AWS WAF 访问日志处理并使用 WAF 日志文件。与 ALB 日志的传输时间相比，WAF 访问日志类型的延迟时间更短，您可以使用它来更快地识别 HTTP 洪水来源。 CloudFront 但是，您必须在 “**激活扫描仪和探测器保护**” 模板参数中选择 CloudFront 或 ALB 日志类型才能接收响应状态代码。

**注意**  
如果恶意机器人绕过蜜罐直接与 ALB 交互，则系统会通过日志分析检测恶意行为 CloudFront，除非 HTTP 洪水防护和扫描器和探测器保护都未使用 Lambda 日志解析器。

## AWS Lambda 日志解析器
<a name="aws-lambda-log-parser"></a>

**HTTP 洪水防护**和**扫描器和探测器保护**模板参数提供了 **AWS Lambda 日志解析**器选项。仅当基于速率的 **AWS WAF 规则和** Amazon **Athena 日志解析器选项不可用时，才使用 Lambda** 日志解析器。此选项的一个已知局限性是，信息是在正在处理的文件上下文中处理的。例如，一个 IP 生成的请求或错误可能超过定义的配额，但是由于这些信息被拆分为不同的文件，因此每个文件存储的数据不足以超过配额。

**注意**  
此外，如果恶意机器人绕过蜜罐直接与 ALB 或交互 CloudFront，则检测依赖于所选的日志解析器选项来有效识别和阻止恶意活动。

# 组件详细信息
<a name="component-details"></a>

如[架构图](architecture-overview.md#architecture-diagram)所述，该解决方案的四个组件使用自动化来检查 IP 地址并将其添加到 AWS WAF 阻止列表中。以下各节将更详细地解释其中的每一个组件。

## 日志解析器-应用程序
<a name="log-parser--application"></a>

应用程序日志解析器有助于防范扫描器和探测器。

 **应用程序日志解析器流程。**

![\[应用程序日志解析器流程\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/security-automations-for-aws-waf/images/app-log-parser-flow.png)


1. 当 CloudFront 或 ALB 代表您的 Web 应用程序收到请求时，它会将访问日志发送到 Amazon S3 存储桶。

   1. （可选）如果您`Yes - Amazon Athena log parser`为模板参数选择 “**激活 HTTP 防洪保护**” 和 “**激活扫描器和探测器保护**”，Lambda 函数会在访问日志到达 Amazon S3 后将其从其原始文件夹*<customer-bucket>*`/AWSLogs`移动到新分区的文件夹 *<customer-bucket>* `/AWSLogs-partitioned/` *<optional-prefix>* `/year=` *<YYYY>* `/month=` *<MM>* `/day=` *<DD>* `/hour=` *<HH>* /中。

   1. （可选）如果您选择`yes`**将数据保留在原始 S3 位置**模板参数，则日志将保留在原始位置并复制到其分区文件夹，从而复制您的日志存储。
**注意**  
对于 Athena 日志解析器，此解决方案仅在您部署此解决方案后对到达您的 Amazon S3 存储桶的新日志进行分区。如果您要对现有日志进行分区，则必须在部署此解决方案后手动将这些日志上传到 Amazon S3。

1. 根据您选择的模板参数 “**激活 HTTP 防洪保护**” 和 “**激活扫描仪和探测器保护**”，此解决方案使用以下方法之一来处理日志：

   1.  **Lambda**-每次在 Amazon S3 存储桶中存储新的访问日志时，都会启动 Lambda `Log Parser` 函数。

   1.  **Athena**-默认情况下，**扫描器和探测保护** Athena 查询每五分钟运行一次，输出将推送到 AWS WAF。此过程由事件启动，该 CloudWatch 事件启动负责运行 Athena 查询的 Lambda 函数，并将结果推送到 AWS WAF。

1. 该解决方案分析日志数据，以确定产生比定义配额更多的错误的 IP 地址。然后，该解决方案会更新 AWS WAF IP 设置条件，以便在客户定义的时间段内屏蔽这些 IP 地址。

## 日志解析器-AWS WAF
<a name="log-parser--aws-waf"></a>

如果您`yes - Amazon Athena log parser`为 “**激活 HTTP 防洪保护**” 选择`yes - AWS Lambda log parser`或，则此解决方案会预配置以下组件，这些组件会解析 AWS WAF 日志，以识别和阻止请求速率大于您定义的配额的终端节点的来源。

 **AWS WAF 日志解析器流程。**

![\[waf 日志解析器流程\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/security-automations-for-aws-waf/images/waf-log-parser-flow.png)


1. 当 AWS WAF 收到访问日志时，它会将日志发送到 Firehose 终端节点。然后 Firehose 将日志传送到亚马逊 S3 中名为的分区存储桶 *<customer-bucket>* `/AWSLogs/` *<optional-prefix>* `/year=` *<YYYY>* `/month=` *<MM>* `/day=` *<DD>* `/hour=` *<HH>* `/` 

1. 根据您选择的模板参数 “**激活 HTTP 防洪保护**” 和 “**激活扫描仪和探测器保护**”，此解决方案使用以下方法之一来处理日志：

   1.  **Lambda**：每次在 Amazon S3 存储桶中存储新的访问日志时，都会启动 Lambda `Log Parser` 函数。

   1.  **Athena**：默认情况下，每五分钟运行一次扫描器和探测器 Athena 查询，并将输出推送到 AWS WAF。此过程由亚马逊 CloudWatch 事件启动，然后启动负责执行亚马逊 Athena 查询的 Lambda 函数，并将结果推送到 AWS WAF。

1. 该解决方案分析日志数据，以确定发送的请求数超过定义配额的 IP 地址。然后，该解决方案会更新 AWS WAF IP 设置条件，以便在客户定义的时间段内屏蔽这些 IP 地址。

## 日志解析器-Bad bot
<a name="log-parser--badbot"></a>

Bad bot 日志解析器会检查向 honeypot 端点发出的请求以提取其源 IP 地址。

 **机器人日志解析器流程不正确。**

![\[badbot 日志解析器流程\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/security-automations-for-aws-waf/images/badbot-log-parser-flow.png)


1. 如果`Bad Bot Protection`已激活并禁用 HTTP 洪水防护和扫描器和探测器保护功能：系统将使用 Log Lambda 解析器，该解析器基于 [WA](https://docs.aws.amazon.com/waf/latest/developerguide/waf-labels.html) F 标签筛选器仅记录错误的机器人请求。

1. Lambda 函数拦截并检查请求标头，以提取访问陷阱端点的源的 IP 地址。

1. 该解决方案分析日志数据，以确定发送的请求数超过定义配额的 IP 地址。然后，该解决方案会更新 AWS WAF IP 设置条件，以便在客户定义的时间段内屏蔽这些 IP 地址。

## IP 列表解析器
<a name="ip-lists-parser"></a>

`IP Lists Parser`Lambda 函数有助于抵御第三方 IP 信誉列表中识别的已知攻击者。

 **IP 声誉列出了解析器流程。**

![\[IP 信誉列表流程\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/security-automations-for-aws-waf/images/ip-reputation-lists-flow.png)


1. 每小时一次的亚马逊 CloudWatch 事件会调用 Lambda 函数`IP Lists Parser`。

1. Lambda 函数从三个来源收集和解析数据：
   + Spamhaus DROP 和 EDROP 列表
   + Proofpoint 新兴威胁 IP 列表
   + Tor 退出节点列表

1. Lambda 函数使用当前 IP 地址更新 AWS WAF 阻止列表。