Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
使用 Amazon EventBridge 处理 GuardDuty 调查发现
GuardDuty 会自动将调查发现作为事件发布(发送)到 Amazon EventBridge(以前称为 Amazon CloudWatch Events),后者是一项无服务器事件总线服务。EventBridge 将来自应用程序和服务的实时数据流提供给 Amazon Simple Notification Service(Amazon SNS)主题、Amazon Lambda 函数和 Amazon Kinesis 流等目标。有关更多信息,请参阅 Amazon EventBridge 用户指南。
EventBridge 可通过接收事件来自动监控和处理 GuardDuty 调查发现。EventBridge 接收新生成调查发现和聚合调查发现的事件,聚合调查发现会将现有调查发现的后续调查发现与原始调查发现结合在一起。每个 GuardDuty 调查发现都会分配一个调查发现 ID,同时 GuardDuty 会为唯一调查发现 ID 的每个调查发现创建 EventBridge 事件。有关 GuardDuty 中聚合的工作原理的信息,请参阅 GuardDuty 调查发现聚合。
除了自动监控和处理外,使用 EventBridge 还可以长期保留您的调查发现数据。GuardDuty 会将调查发现存储 90 天。借助 EventBridge,您可以将调查发现数据发送到首选存储平台,并根据您所需要的存储时长存储数据。为了更长时间地保留调查发现,GuardDuty 支持将生成的调查发现导出到 Amazon S3。
了解 GuardDuty 中的 EventBridge 通知频率
本节介绍通过 EventBridge 收到调查发现通知的频率,以及如何更新后续调查发现事件的频率。
- 具有唯一调查发现 ID 的新生成调查发现的通知
-
GuardDuty 在生成具有唯一调查发现 ID 的调查发现时,会以接近实时的方式发送这些通知。该通知会包括在通知生成过程中此调查发现 ID 后续的所有事件。
新生成的调查发现的通知频率接近实时。默认情况下,您无法修改此频率。
- 后续调查发现事件的通知
-
GuardDuty 会将某特定调查发现类型 6 小时间隔内发生的所有后续事件聚合到一个事件中。只有管理员账户才能更新后续调查发现事件的 EventBridge 通知频率。成员账户无法更新自己账户的此频率。例如,如果委派 GuardDuty 管理员账户将此频率更新为一小时一次,则所有成员账户的后续调查发现事件发送到 EventBridge 的通知频率也会是一小时一次。有关更多信息,请参阅 Amazon GuardDuty 中的多个账户。
作为管理员账户,您可以自定义有关后续调查发现事件通知的默认频率。可能的值为 15 分钟、1 小时或 6 小时(默认值)。有关设置通知频率的信息,请参阅 第 5 步 – 设置导出更新后活动调查发现的频率。
有关管理员账户接收成员账户的 EventBridge 通知的更多详情,请参阅 适用于多账户环境的 EventBridge 规则。
设置 Amazon SNS 主题和端点(电子邮件、Slack 和 Amazon Chime)
Amazon Simple Notification Service(Amazon SNS)是一项完全托管式服务,提供从发布者至订阅用户的消息传输。发布者通过将消息发送至主题实现与订阅用户的异步交流。主题是一个逻辑接入点和通信渠道,允许您对多个端点 [例如 Amazon Lambda、Amazon Simple Queue Service(Amazon SQS)、HTTP/S 和电子邮件地址] 进行分组。
您可以在创建事件规则期间或之后将 Amazon SNS 主题添加到首选 EventBridge 事件规则中。
- 创建 Amazon SNS 主题
-
首先,您必须在 Amazon SNS 中设置一个主题并添加一个端点。要创建主题,请按照《Amazon Simple Notification Service Developer Guide》中的 Step 1: Creating a topic 的步骤进行操作。创建主题后,将主题 ARN 复制到剪贴板。后续会需要使用此主题 ARN 继续进行首选设置之一。
选择首选方法来建立将 GuardDuty 调查发现数据发送到的位置。
- Email setup
-
设置电子邮件端点
Create an Amazon SNS topic 之后,下一步是创建对此主题的订阅。请按照《Amazon Simple Notification Service Developer Guide》中的 Step 2: Creating a subscription to an Amazon SNS topic 的步骤进行操作。
-
对于主题 ARN,请使用在 Create an Amazon SNS topic 步骤中创建的主题 ARN。主题 ARM 类似于以下内容:
arn:aws:sns:us-east-2:123456789012:your_topic
-
对于协议,请选择电子邮件。
-
对于端点,输入您要从 Amazon SNS 接收通知的电子邮件地址。
创建订阅后,您需要通过电子邮件客户端确认订阅。
- Slack setup
-
在聊天应用程序客户端 Slack 中配置 Amazon Q 开发者版
Create an Amazon SNS topic 之后,下一步是配置 Slack 客户端。
有关任何其他详细信息,请参阅《Amazon Q Developer in chat applications Administrator Guide》中的 Tutorial: Get started with Slack。
- Chime setup
-
在聊天应用程序客户端 Chime 中配置 Amazon Q 开发者版
Create an Amazon SNS topic 之后,下一步是为 Chime 配置 Amazon Q Developer。
有关任何其他详细信息,请参阅《Amazon Q Developer in chat applications Administrator Guide》中的 Tutorial: Get started with Amazon Chime。
使用 Amazon EventBridge 获取 GuardDuty 调查发现
借助 EventBridge,您可创建规则,来指定您要监控的事件。这些规则还可以指定在这些事件发生时可以执行自动操作的目标服务和应用程序。目标是一个目的地(资源或端点),当事件与规则中定义的事件模式匹配时,EventBridge 会向目标发送该事件。每个事件都是一个符合 Amazon 事件 EventBridge 架构的 JSON 对象,并且包含调查发现的 JSON 表示。您可以调整规则,使其仅发送那些符合特定条件的事件。有关更多信息,请参阅 [JSON 架构主题]。由于调查发现数据是以 EventBridge 事件为结构的,因此您可以使用其他应用程序、服务和工具监控、处理调查发现,并根据这些调查发现采取行动。
要接收基于事件的 GuardDuty 调查发现的通知,您必须创建 EventBridge 规则和 GuardDuty 目标。此规则允许 EventBridge 将有关 GuardDuty 生成的调查发现的通知发送到规则中指定的目标。
EventBridge 和 CloudWatch Events 有着相同的基础服务和 API。但是,EventBridge 包含其他功能,让您能够从软件即服务(SaaS)应用程序和您自己的应用程序接收事件。由于基础服务和 API 相同,因此 GuardDuty 调查发现的事件架构也相同。
GuardDuty 中已存档和未存档的调查发现如何与 EventBridge 配合使用
对于手动存档的调查发现,初始调查发现和这些调查发现的所有后续事件(存档完成后生成的事件)会根据具体通知频率发送到 EventBridge。有关更多信息,请参阅 了解 GuardDuty 中的 EventBridge 通知频率。
对于根据抑制规则自动存档的调查发现,初始调查发现和这些调查发现的所有后续事件(存档完成后生成的事件)不会发送到 EventBridge。您可以在 GuardDuty 控制台中查看这些自动存档的调查发现。
事件模式定义了 EventBridge 用于确定是否将事件发送到目标的数据。GuardDuty 的 EventBridge 事件具有以下格式:
{
"version": "0",
"id": "cd2d702e-ab31-411b-9344-793ce56b1bc7",
"detail-type": "GuardDuty Finding",
"source": "aws.guardduty",
"account": "111122223333",
"time": "1970-01-01T00:00:00Z",
"region": "us-east-1",
"resources": [],
"detail": {GUARDDUTY_FINDING_JSON_OBJECT}
}
detail 值将单个调查发现的 JSON 详细信息作为对象返回,而不是返回整个 findings 响应语法,响应语法支持一个数组包含多个调查发现。
有关 GUARDDUTY_FINDING_JSON_OBJECT 中包括的所有参数的完整列表,请参阅 GetFindings。在 GUARDDUTY_FINDING_JSON_OBJECT 中显示的 id 参数是之前介绍的调查发现 ID。
为 GuardDuty 调查发现创建 EventBridge 规则
以下过程说明了如何使用 Amazon EventBridge 控制台和 Amazon Command Line Interface(Amazon CLI)为 GuardDuty 调查发现创建 EventBridge 规则。该规则会检测使用 GuardDuty 调查发现事件架构和模式的 EventBridge 事件,然后将这些事件发送到 Amazon Lambda 函数进行处理。
Amazon Lambda 是一项计算服务,您可用来运行代码而无需预配置或管理服务器。您可将代码打包并上载到 Amazon Lambda 作为 Lambda 函数。然后在调用该函数时,Amazon Lambda 会运行该函数。您可以手动调用函数,自动调用函数以响应事件,或者响应来自应用程序或服务的请求。有关创建和调用 Lambda 函数的信息,请参阅《Amazon Lambda 开发人员指南》。
选择首选方法来创建将 GuardDuty 调查发现发送到目标的 EventBridge 规则。
- Console
-
请按照以下步骤使用 Amazon EventBridge 控制台创建规则,自动将所有 GuardDuty 调查发现事件发送到 Lambda 函数进行处理。该规则对收到特定事件时运行的规则使用默认设置。有关规则设置的详细信息或要了解如何创建使用自定义设置的规则,请参阅 Amazon EventBridge 用户指南中的创建对事件做出反应的规则。
在创建规则之前,请创建您希望该规则用作目标的 Lambda 函数。创建规则时,需要将此函数指定为规则的目标。目标也可以是您之前创建的 SNS 主题。有关更多信息,请参阅 设置 Amazon SNS 主题和端点(电子邮件、Slack 和 Amazon Chime)。
使用控制台创建事件规则
登录 Amazon Web Services 管理控制台并打开 Amazon EventBridge 控制台 (https://console.aws.amazon.com/events/)。
-
在导航窗格中的总线下,选择规则。
-
在规则部分中,选择创建规则。
-
在定义规则详细信息页面上,执行以下操作:
-
对于名称,输入规则的名称。
-
(可选)对于描述,输入规则的简要描述。
-
对于事件总线,请确保选择默认值,以及在选定的事件总线上启用该规则已开启。
-
对于规则类型,选择具有事件模式的规则。
-
完成后,选择 Next (下一步)。
-
在构建事件模式页面上,执行以下操作:
-
对于事件源,选择 Amazon 事件或 EventBridge 合作伙伴事件。
-
(可选)对于示例事件,请查看 GuardDuty 的示例调查发现事件,以了解事件可能包含的内容。为此,请选择 Amazon 事件。对于示例事件,选择 GuardDuty 调查发现。
选项 1:使用模式表单,这是 EventBridge 提供的模板
在事件模式部分中,执行以下操作:
-
对于创建方法,选择使用模式表单。
-
对于事件源,选择 Amazon Web Services 服务。
-
对于 Amazon Web Services 服务,选择 GuardDuty。
-
对于事件类型,选择 GuardDuty 调查发现。
完成后,选择 Next (下一步)。
选项 2:使用 JSON 格式的自定义事件模式
在事件模式部分中,执行以下操作:
-
对于创建方法,选择自定义模式(JSON 编辑器)。
-
对于事件模式,粘贴以下自定义 JSON,该自定义 JSON 将针对中、高和重大严重程度的调查发现创建警报。有关更多信息,请参阅 调查发现的严重性级别。
{
"source": [
"aws.guardduty"
],
"detail-type": [
"GuardDuty Finding"
],
"detail": {
"severity": [
4,
4.0,
4.1,
4.2,
4.3,
4.4,
4.5,
4.6,
4.7,
4.8,
4.9,
5,
5.0,
5.1,
5.2,
5.3,
5.4,
5.5,
5.6,
5.7,
5.8,
5.9,
6,
6.0,
6.1,
6.2,
6.3,
6.4,
6.5,
6.6,
6.7,
6.8,
6.9,
7,
7.0,
7.1,
7.2,
7.3,
7.4,
7.5,
7.6,
7.7,
7.8,
7.9,
8,
8.0,
8.1,
8.2,
8.3,
8.4,
8.5,
8.6,
8.7,
8.8,
8.9,
9,
9.0,
9.1,
9.2,
9.3,
9.4,
9.5,
9.6,
9.7,
9.8,
9.9,
10,
10.0
]
}
}
完成后,选择 Next (下一步)。
选项 A:选择 Amazon Web Services 服务 – Amazon Lambda 作为目标
在选择目标页面上,执行以下操作:
-
对于目标类型,选择 Amazon Web Services 服务。
-
对于 Select a target(选择目标),选择 Lambda function(Lambda 函数)。然后,对于函数,选择您要将调查发现发送到的 Lambda 函数。
-
对于配置版本/别名,输入目标 Lambda 函数的版本或别名设置。
-
(可选)对于其他设置,输入自定义设置以指定要向 Lambda 函数发送哪些事件数据。您还可以指定如何处理未成功传递到函数的事件。
-
完成后,选择 Next (下一步)。
选项 B:选择 SNS 主题作为目标
在选择目标页面上,执行以下操作:
-
对于目标类型,选择 Amazon Web Services 服务。
-
对于 Select a target(选择一个目标),选择 SNS topic(SNS 主题)。然后,对于目标位置,根据您的目标位置选择合适的选项。对于主题,选择您创建的 SNS 主题名称。
-
展开其他设置。对于配置目标输入,选择输入转换器。
-
选择 Configure input transformer(配置输入转换器)。
-
复制以下代码并粘贴到目标输入转换器部分的输入路径字段中。
{
"severity": "$.detail.severity",
"Account_ID": "$.detail.accountId",
"Finding_ID": "$.detail.id",
"Finding_Type": "$.detail.type",
"region": "$.region",
"Finding_description": "$.detail.description"
}
-
复制以下代码并粘贴到模板字段中,以便格式化电子邮件。
"You have a severity <severity> GuardDuty finding type <Finding_Type> in the <region> Region."
"Finding Description:"
"<Finding_description>. "
"For more details open the GuardDuty console at https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID>"
-
在配置标签页面上,可以选择输入要分配给规则的一个或多个标签。然后选择下一步。
-
在查看并创建页面上,查看规则的设置并验证它们是否正确。
要更改设置,选择包含该设置的部分中的编辑,然后输入正确的设置。您也可以使用导航选项卡转到包含设置的页面。
-
在输入完验证设置后,请选择创建规则。
- API
-
以下过程演示了如何使用 Amazon CLI 命令为 GuardDuty 创建 EventBridge 规则和目标。具体来说,该过程向您展示了如何创建规则,使 EventBridge 能够将 GuardDuty 生成的所有调查发现事件,作为规则的目标,发送到 Amazon Lambda 函数。
在上述示例中,我们使用 Lambda 函数作为触发 EventBridge 规则的目标。您还可以配置其他 Amazon 资源,作为触发 EventBridge 的目标。GuardDuty 和 EventBridge 还支持以下目标类型:Amazon EC2 实例、Amazon Kinesis 流、Amazon ECS 任务、Amazon Step Functions 状态机、run 命令和内置目标。有关更多信息,请参阅《Amazon EventBridge API Reference》中的 PutTargets。
创建规则和目标
-
要创建允许 EventBridge 发送 GuardDuty 生成的所有调查发现事件的规则,请运行以下 EventBridge CLI 命令。
aws events put-rule --name your-rule-name --event-pattern "{\"source\":[\"aws.guardduty\"]}"
您可以进一步自定义规则,使其指示 EventBridge 仅发送 GuardDuty 生成的调查发现子集的事件。该子集基于规则中指定的一个或多个调查发现属性。例如,使用以下 CLI 命令创建一条规则,使 EventBridge 仅发送严重性为 5 或 8 的 GuardDuty 调查发现的事件:
aws events put-rule --name your-rule-name --event-pattern "{\"source\":[\"aws.guardduty\"],\"detail-type\":[\"GuardDuty Finding\"],\"detail\":{\"severity\":[5,8]}}"
为此,您可以对 GuardDuty 调查发现使用 JSON 中可用的任何属性值。
-
要附加一个 Lambda 函数作为您在步骤 1 中创建的规则的目标,请运行以下 CloudWatch CLI 命令。
aws events put-targets --rule your-target-name --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:your_function
确保将上述命令中的 your-target-name 替换为 GuardDuty 事件的实际 Lambda 函数。
-
要添加调用目标所需的权限,请运行以下 Lambda CLI 命令。
aws lambda add-permission --function-name your-target-name --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com
确保将上述命令中的 your_function 替换为 GuardDuty 事件的实际 Lambda 函数。
适用于 GuardDuty 多账户环境的 EventBridge 规则
使用委派 GuardDuty 管理员账户时,您可以查看成员账户中生成的事件,并使用其他应用程序和服务采取行动。您账户中的 EventBridge 规则将根据成员账户中的适用调查发现触发。如果您在管理员账户中通过 EventBridge 设置了调查发现通知,您将收到来自身账户和成员账户的调查发现通知。例如,您可以使用 EventBridge 将特定类型的调查发现发送到 Lambda 函数,该函数会将这些数据发送到您的安全事件和事件管理(SIEM)系统。
您可以通过调查发现的 JSON 详细信息中的 accountId 字段来确定 GuardDuty 调查发现来自哪个成员账户。要为特定成员账户创建自定义事件规则,请创建新规则并在事件模式中使用以下模板。将 123456789012 替换为您要触发事件的成员账户的 accountId。
{
"source": [
"aws.guardduty"
],
"detail-type": [
"GuardDuty Finding"
],
"detail": {
"accountId": [
"123456789012"
]
}
}
此示例创建的规则与来自指定账户 ID 的所有调查发现相匹配。您可以包含多个账户,具体方法是按照 JSON 语法,使用逗号分隔多个账户 ID。