使用 Amazon CloudWatch Events 创建自定义响应 GuardDuty 调查结果 - Amazon GuardDuty
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Amazon CloudWatch Events 创建自定义响应 GuardDuty 调查结果

GuardDuty 创建一个事件Amazon CloudWatch Events当结果中发生任何变化时。查找将创建 CloudWatch 事件的更改,包括新生成的调查结果或新聚合的调查结果。尽最大努力发出事件。

向每个 GuardDuty 结果分配一个结果 ID。GuardDuty atch 为带唯一结果 ID 的每个结果创建 CloudWatch 事件。现有调查结果的所有后续实例都会聚合到原始调查结果中。

注意

如果您的帐户是 GuardDuty 委派管理员 CloudWatch 事件,除了它来自的成员帐户外,还会发布到您的帐户。

通过将 CloudWatch 事件与 GuardDuty 一起使用,您可以自动执行任务,帮助您对 GuardDuty 调查结果所揭露的安全问题作出响应。

要基于 CloudWatch 事件接收有关 GuardDuty 调查结果的通知,您必须创建 CloudWatch Events 的规则和目标。此规则允许 CloudWatch 将 GuardDuty 生成的调查结果的通知发送到在规则中指定的目标。有关更多信息,请参阅为 GuardDuty (CLI) 创建 CloudWatch 事件规则和目标

关于 GuardDuty 的 CloudWatch 事件通知频率

带唯一结果 ID 的新生成的结果的通知— GuardDuty atch 事件在结果的 5 分钟内基于其 CloudWatch 事件发送通知。此事件 (和此通知) 还包括在生成带唯一 ID 的此结果后前 5 分钟内发生的此结果的所有后续匹配项。

重要

您无法自定义发送有关新生成的查找结果的通知的默认频率(5 分钟)。

有关后续查找事件的通知-默认情况下,对于带唯一结果 ID 的每个结果,GuardDuty 会将在 6 小时时间间间隔内发生的某个特定结果的所有后续匹配项聚合到单个事件中。GuardDuty 然后,基于此事件发送有关这些后续匹配项的通知。换句话说,默认情况下,对于现有结果的后续匹配项,GuardDuty 将基于 CloudWatch 事件每 6 个小时发送通知。

重要

您可以自定义发送有关后续调查结果匹配项通知的默认频率。可能的值为 15 分钟、1 小时或 6 小时(默认值)。您可以使用 CreateDetectorUpdateDetector API 操作更新此值。您也可以通过 GuardDuty 控制台更新此值-选择设置然后在下CloudWatch Events中,从最新调查结果下拉菜单。

只有管理员账户中的用户才能自定义发送到 CloudWatch Events 的有关后续调查结果匹配项的通知的默认频率。成员帐户中的用户无法自定义此频率值。管理员账户在自己的账户中设置的频率值会施加到其所有成员账户中的 GuardDuty 功能上。换句话说,如果管理员账户中的用户将此频率值设置为 1 小时,则对于所有成员账户,发送到 CloudWatch Events 的有关后续调查结果匹配项的通知也将是 1 小时的频率。有关更多信息,请参阅在 Amazon GuardDuty 中管理多个账户 Amazon服务与 GuardDuty 的集成

使用 CloudWatch 事件监控存档的防护调查结果

对于手动存档的调查结果,初始调查结果和这些调查结果的所有后续匹配项(存档完成后生成)将根据之前介绍的频率发送到 CloudWatch Events。

对于自动存档的调查结果,初始调查结果和这些调查结果的所有后续匹配项(存档完成后生成)将是发送到 CloudWatch 事件。

用于 GuardDuty 的 CloudWatch 事件格式

CloudWatchevent具 GuardDuty 以下格式。

{ "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} }
注意

详细信息值返回作为对象的单个查找结果的 JSON 详细信息,而不是返回可支持数组中多个查找结果的 “查找结果” 值。

有关 GUARDDUTY_FINDING_JSON_OBJECT 中包括的所有参数的完整列表,请参阅 GetFindings。在 GUARDDUTY_FINDING_JSON_OBJECT 中显示的 id 参数是之前介绍的调查结果 ID。

创建一个 CloudWatch 事件规则,通知您有关 GuardDuty 查结果(控制台)

您可以将 CloudWatch 事件与 GuardDuty 结合使用,通过将 GuardDuty 查找事件发送到邮件中心来设置自动查找警报,以帮助提高 GuardDuty 调查结果的可见性。本主题介绍如何通过设置 SNS 主题,然后将该主题连接到 CloudWatch 事件事件规则,将发现警报发送到电子邮件、Slack 或 Amazon Chime。

设置 Amazon SNS 主题和终端节点

首先,您必须在 Amazon 简单通知服务中设置主题,然后添加终端节点。有关的更多信息,请参阅SNS 指南

此过程将确定要发送 GuardDuty 结果数据的位置。在创建事件规则期间或之后,可以将 SNS 主题添加到 CloudWatch 事件事件规则中。

Email setup

创建 SNS 主题

  1. 登录 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 从导航窗格中选择 Topics (主题),然后选择 Create Topic (创建主题)

  3. 在 “创建主题” 部分中,选择标准。接下来,输入主题名称,例如GuardDuty_to_Email。其他详细信息是可选的。

  4. 选择 Create Topic。此时系统会打开新主题的主题详细信息。

  5. 在“Subscriptions (订阅)”部分中,选择 Create Subscription (创建订阅)

    1. Protocol (协议) 菜单中,选择 Email (电子邮件)

    2. Endpoint (终端节点) 字段中,添加您想要用于接收通知的电子邮件地址。

      注意

      创建后,您需要通过电子邮件客户端确认订阅。

    3. 选择创建订阅

  6. 在收件箱中查收订阅消息,然后选择 Confirm Subscription (确认订阅)

Slack setup

创建 SNS 主题

  1. 登录 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 从导航窗格中选择 Topics (主题),然后选择 Create Topic (创建主题)

  3. 在 “创建主题” 部分中,选择标准。接下来,输入主题名称,例如GuardDuty_to_Slack。其他详细信息是可选的。选择创建主题以最后确定。

配置Amazon Chatbotclient

  1. 导航到Amazon Chatbot控制台

  2. 配置客户端面板中,选择配置新的客户端

  3. 选择 “松弛” 并使用 “配置” 进行确认。

    注意

    当选择 Slack 时,您必须确认Amazon Chatbot通过选择 “允许” 访问您的频道。

  4. Select配置新通道以打开配置详细信息窗格。

    1. 输入通道的名称。

    2. 对于 Slack 通道,选择要使用的通道。若要使用私有松弛频道Amazon Chatbot下,选择 “私有通道”。

    3. 在 Slack 中,右键单击频道名称并选择复制链接,复制专用频道的频道 ID。

    4. 在存储库的Amazon管理控制台的Amazon Chatbot窗口中,将从松弛复制的 ID 粘贴到专用频道 ID 字段中。

    5. InPermissions (权限),选择使用模板创建 IAM 角色(如果您还没有角色)。

    6. 适用于策略模板中,选择 “通知权限”。这是Amazon Chatbot。它为 CloudWatch 警报、事件和日志以及 Amazon SNS 主题提供必要的读取和列出权限。

    7. 选择您之前在其中创建 SNS 主题的区域,然后选择您创建的 Amazon SNS 主题,以便向 Slack 频道发送通知。

  5. 选择 Configure (配置)

Chime setup

创建 SNS 主题

  1. 登录 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 从导航窗格中选择 Topics (主题),然后选择 Create Topic (创建主题)

  3. 在 “创建主题” 部分中,选择标准。接下来,输入主题名称,例如GuardDuty_to_Chime。其他详细信息是可选的。选择创建主题以最后确定。

配置Amazon Chatbotclient

  1. 导航到Amazon Chatbot控制台

  2. 配置客户端面板中,选择配置新的客户端

  3. 选择 “钟声” 并使用 “配置” 进行确认。

  4. 配置详细信息窗格中,输入通道的名称。

  5. 在编钟打开所需的聊天室

    1. 选择右上角的齿轮图标,然后选择 Manage webhooks and bots (管理 Webhook 和自动程序)

    2. Select复制 URL将 Webhook URL 复制到剪贴板。

  6. 在存储库的Amazon管理控制台的Amazon Chatbot窗口中,将复制的 URL 粘贴到Webhook URL字段。

  7. InPermissions (权限),选择使用模板创建 IAM 角色(如果您还没有角色)。

  8. 适用于策略模板中,选择 “通知权限”。这是Amazon Chatbot。它为 CloudWatch 警报、事件和日志以及 Amazon SNS 主题提供必要的读取和列出权限。

  9. 选择您之前在其中创建 SNS 主题的区域,然后选择您创建的 Amazon SNS 主题,以便向 Chime 工作室发送通知。

  10. 选择 Configure (配置)

为 GuardDuty 调查结果设置 CloudWatch 事件

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 从导航窗格中选择 Rules (规则),然后选择 Create Rule (创建规则)

  3. Service Name (服务名称) 菜单中,选择 GuardDuty

  4. Event Type (事件类型) 菜单中,选择 GuardDuty Finding (GuardDuty 查找)

  5. Event Pattern Preview (事件模式预览) 中,选择 Edit (编辑)

  6. 将下面的 JSON 代码粘贴到 Event Pattern Preview (事件模式预览) 中,然后选择 Save (保存)

    { "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 ] } }
    注意

    上面的代码将对任何中到高严重性调查结果发出提醒。

  7. Targets (目标) 部分,单击 Add Target (添加目标)

  8. Select Targets (选择目标) 菜单中,选择 SNS Topic (SNS 主题)

  9. 对于 Select Topic (选择主题),请选择您在步骤 1 中创建的 SNS 主题的名称。

  10. 配置事件的输入。

    • 如果要为 “钟声” 或 “Slack” 设置通知跳至 “步骤 11”,则输入类型默认为匹配的事件

    • 如果要通过 SNS 设置电子邮件通知,请按照以下步骤自定义发送到收件箱的邮件:

    1. 展开 Configure input (配置输入),然后选择 Input Transformer (输入转换器)

    2. 复制以下代码并将其粘贴到 Input Path (输入路径) 字段中。

      { "severity": "$.detail.severity", "Account_ID": "$.detail.accountId", "Finding_ID": "$.detail.id", "Finding_Type": "$.detail.type", "region": "$.region", "Finding_description": "$.detail.description" }
    3. 复制以下代码并将其粘贴到 Input Template (输入模板) 字段中,以便格式化电子邮件。

      "Amazon <Account_ID> has 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=<Finding_ID>"
  11. 单击 Configure Details (配置详细信息)

  12. Configure rule details (配置规则详细信息) 页面中,输入规则的 Name (名称)Description (描述),然后选择 Create Rule (创建规则)

为 GuardDuty (CLI) 创建 CloudWatch 事件规则和目标

以下过程演示如何使用Amazon CLI命令创建 CloudWatch 事件规则和目标。具体而言,该过程向您演示如何创建规则,该规则允许 CloudWatch 为 GuardDuty 生成的所有结果发送事件,并将Amazon Lambda函数作为规则的目标。

注意

除了 Lambda 功能外,GuardDuty 和 CloudWatch 还支持以下目标类型:Amazon EC2 实例、Amazon Kinesis 流、亚马逊云服务器任务、Amazon Step Functions状态机,run命令和内置目标。

您还可以通过 CloudWatch 事件控制台为守卫创建 CloudWatch Events 规则和目标。有关更多信息和详细步骤,请参阅创建对事件触发的 CloudWatch 事件规则。在事件源部分中,选择GuardDuty对于 来说为Service name (服务名称)GuardDuty Finding对于 来说为事件类型

创建规则和目标

  1. 要创建允许 CloudWatch 为 GuardDuty 生成的所有结果发送事件的规则,请运行以下 CloudWatch CLI 命令。

    Amazon events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"]}"

    重要

    您可以进一步自定义您的规则,以便它指示 CloudWatch 仅针对 GuardDuty 生成的一部分结果发送事件。此子集基于规则中指定的结果属性。例如,使用以下 CLI 命令创建一个规则,该规则使 CloudWatch 能够仅针对严重性为 5 或 8 的 GuardDuty 调查结果发送事件:

    Amazon events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"],\"detail-type\":[\"GuardDuty Finding\"],\"detail\":{\"severity\":[5,8]}}"

    为此,您可以对 GuardDuty 调查结果使用 JSON 中可用的任何属性值。

  2. 要将 Lambda 函数作为在步骤 1 中创建的规则的目标,请运行以下 CloudWatch CLI 命令。

    Amazon events put-targets --rule Test --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:<your_function>

    注意

    确保将 <your_function> 上述命令中的替换为 GuardDuty 事件的实际 Lambda 函数。

  3. 要添加调用目标所需的权限,请运行以下 Lambda CLI 命令。

    Amazon lambda add-permission --function-name <your_function> --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com

    注意

    确保将 <your_function> 上述命令中的替换为 GuardDuty 事件的实际 Lambda 函数。

    注意

    在上述过程中,我们使用 Lambda 函数作为触发 CloudWatch Events 的规则的目标。您也可以配置其他Amazon资源作为目标来触发 CloudWatch 事件。有关更多信息,请参阅 PutTargets

适用于保安多帐户环境的 CloudWatch 活动

作为 GuardDuty 管理员,您账户中的 CloudWatch 事件规则将根据您的成员帐户中的适用调查结果触发。这意味着,如果您在管理员帐户中通过 CloudWatch 事件设置查找通知(如上一节所述),则除了您自己的成员帐户外,还会收到由您的成员帐户生成的高严重性和中等严重性发现的通知。

您可以通过accountId字段中查找结果的 JSON 详细信息。

要在控制台中开始为环境中的特定成员帐户编写自定义事件规则,请创建新规则并将以下模板粘贴到事件模式预览中,并添加要触发事件的成员帐户的帐户 ID。

{ "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ], "detail": { "accountId": [ "123456789012" ] } }
注意

此示例将在列出的账户 ID 的任何查找结果中触发。可以添加多个 ID,并用 JSON 语法后面的逗号分隔。