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

CloudTrail 日志查询示例

以下示例显示从在 CloudTrail 事件日志创建的表,返回所有匿名(未签名)请求的查询部分。此查询选择 useridentity.accountid 匿名并且 useridentity.arn 未指定的那些请求:

SELECT * FROM cloudtrail_logs WHERE eventsource = 's3.amazonaws.com' AND eventname in ('GetObject') AND useridentity.accountid = 'anonymous' AND useridentity.arn IS NULL AND requestparameters LIKE '%[your bucket name ]%';

有关更多信息,请参阅 Amazon 大数据博客文章:使用 Amazon CloudTrail 和 Amazon Athena 分析安全性、合规性和运营活动

查询 CloudTrail 日志中的嵌套字段

由于 userIdentityresources 字段是嵌套的数据类型,查询这些内容需要特殊处理。

userIdentity 对象由嵌套 STRUCT 类型组成。可以使用点分隔字段以分隔待查询的字段,如下例所示:

SELECT eventsource, eventname, useridentity.sessioncontext.attributes.creationdate, useridentity.sessioncontext.sessionissuer.arn FROM cloudtrail_logs WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL ORDER BY eventsource, eventname LIMIT 10

resources 字段是一个 STRUCT 对象数组。对于这些数组,请使用 CROSS JOIN UNNEST 来取消嵌套数组,以便您可以查询其对象。

下面的示例将返回资源 ARN 以 example/datafile.txt 结尾的所有行。为了便于读取,replace 函数将从 ARN 中删除初始 arn:aws:s3::: 子字符串。

SELECT awsregion, replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource, eventname, eventtime, useragent FROM cloudtrail_logs t CROSS JOIN UNNEST(t.resources) unnested (resources_entry) WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt' ORDER BY eventtime

以下是 DeleteBucket 事件的示例查询。查询将从 resources 对象中提取存储桶的名称以及存储桶所属的账户 ID。

SELECT awsregion, replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket, eventtime AS time_deleted, useridentity.username, unnested.resources_entry.accountid as bucket_acct_id FROM cloudtrail_logs t CROSS JOIN UNNEST(t.resources) unnested (resources_entry) WHERE eventname = 'DeleteBucket' ORDER BY eventtime

有关取消嵌套的更多信息,请参阅 筛选数组

有关查询 CloudTrail 日志的提示

在探索 CloudTrail 日志数据时考虑以下各项:

  • 在查询日志之前,请验证您的日志表是否看似与使用手动分区在 Athena 中为 CloudTrail 日志创建表中的表一样。如果不是第一个表,请使用以下命令删除现有表:DROP TABLE cloudtrail_logs

  • 删除现有表后,重新创建它。有关更多信息,请参阅 使用手动分区在 Athena 中为 CloudTrail 日志创建表

    确认正确列出了 Athena 查询中的字段。有关 CloudTrail 记录中的完整字段列表的信息,请参阅 CloudTrail 记录内容

    如果您的查询包含 JSON 格式的字段,例如 STRUCT,请从 JSON 中提取数据。有关更多信息,请参阅 从字符串中提取 JSON 数据

    关于针对 CloudTrail 表发布查询的一些建议如下:

  • 首先查看哪些用户调用了哪些 API 操作以及来自哪些源 IP 地址。

  • 将以下基本 SQL 查询用作您的模板。将查询粘贴到 Athena 控制台并运行它。

    SELECT useridentity.arn, eventname, sourceipaddress, eventtime FROM cloudtrail_logs LIMIT 100;
  • 修改查询以进一步探索您的数据。

  • 为了提高性能,请包含 LIMIT 子句以返回指定的行子集。