查询 Amazon GuardDuty 调查结果 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

查询 Amazon GuardDuty 调查结果

Amazon GuardDuty 是一项安全监控服务,用于帮助识别您 Amazon 环境中的意外活动和潜在的未经授权或恶意活动。当检测到意外和潜在恶意活动时,GuardDuty 会生成安全调查结果,您可以将其导出到 Amazon S3 进行存储和分析。将调查结果导出到 Amazon S3 后,您可以使用 Athena 进行查询。本文介绍如何在 Athena 中为 GuardDuty 调查结果创建表并查询它们。

有关 Amazon GuardDuty 更多信息,请参阅《Amazon GuardDuty 用户指南》。

先决条件

  • 启用 GuardDuty 功能以将调查结果导出到 Amazon S3。有关步骤,请参阅《Amazon GuardDuty 用户指南》中导出调查结果

在 Athena 中为 GuardDuty 调查结果创建表

要从 Athena 查询您的 GuardDuty 调查结果,您必须为它们创建一个表。

要在 Athena 中为 GuardDuty 调查结果创建表
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 将以下 DDL 语句粘贴到 Athena 控制台中。修改 LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/account-id/GuardDuty/' 中的值以指向您在 Amazon S3 中的 GuardDuty 调查结果。

    CREATE EXTERNAL TABLE `gd_logs` ( `schemaversion` string, `accountid` string, `region` string, `partition` string, `id` string, `arn` string, `type` string, `resource` string, `service` string, `severity` string, `createdat` string, `updatedat` string, `title` string, `description` string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/account-id/GuardDuty/' TBLPROPERTIES ('has_encrypted_data'='true')
    注意

    SerDe 期望每个 JSON 文档都位于单行文本中,并且不使用行终止字符分隔记录中的字段。如果 JSON 文本采用美观的打印格式,当您在创建表后尝试对其进行查询时,可能会收到类似以下内容的错误消息:HIVE_CURSOR_ERROR: Row is not a valid JSON Object(HIVE_CURSOR_ERROR:行不是有效的 JSON 对象)或 HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT(HIVE_CURSOR_ERROR:JsonParseException:意外的输入结束:对象的预期关闭标记)。有关更多信息,请参阅 GitHub 上 OpenX SerDe 文档中的 JSON 数据文件

  3. 在 Athena 控制台中运行查询以注册 gd_logs 表。查询完成后,调查结果准备就绪,可供您从 Athena 查询。

示例查询

以下示例演示了如何从 Athena 查询 GuardDuty 调查结果。

例 – DNS 数据泄露

以下查询返回可能会通过 DNS 查询泄露数据的 Amazon EC2 实例的相关信息。

SELECT title, severity, type, id AS FindingID, accountid, region, createdat, updatedat, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID, json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType, json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName, json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol, json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blocked FROM gd_logs WHERE type = 'Trojan:EC2/DNSDataExfiltration' ORDER BY severity DESC
例 – 未授权的 IAM 用户访问

以下查询返回所有区域中 IAM 委托人的所有 UnauthorizedAccess:IAMUser 调查结果类型。

SELECT title, severity, type, id, accountid, region, createdat, updatedat, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalled FROM gd_logs WHERE type LIKE '%UnauthorizedAccess:IAMUser%' ORDER BY severity desc;

有关查询 GuardDuty 调查结果的提示

创建查询时,请记住以下几点。