跳至内容

如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志?

2 分钟阅读
0

我想搜索大量 AWS CloudTrail 日志。为了避免错误,我不想手动创建 Amazon Athena 表。

解决方法

使用 CloudTrail 控制台自动创建 Athena 表。有关详细信息,请参阅使用 Amazon Athena 搜索 AWS CloudTrail 日志

从 CloudTrail 日志创建 Athena 表

完成以下步骤:

  1. 打开 CloudTrail 控制台
  2. 在导航窗格中,选择 Trails(跟踪),然后记下包含 CloudTrail 日志的 Amazon Simple Storage Service (Amazon S3) 存储桶的名称。
  3. 在导航窗格中,选择 Event history(事件历史记录),然后选择 Create Athena table(创建 Athena 表)。
  4. Create a table in Amazon Athena(在 Amazon Athena 中创建表)窗口中,从 Storage location(存储位置)菜单中选择 S3 存储桶。
    **注意:**为了在特定时间范围内优化搜索效果,您可以在 Athena 中为 CloudTrail 日志使用分区投影
  5. 选择 Create table(创建表)。
  6. 选择 Go to Athena(转到 Athena)。

**注意:**您可能会收到“Your account does not have sufficient permissions to create tables in Amazon Athena”(您的账户没有足够的权限在 Amazon Athena 中创建表)错误。如果您收到此错误,请将 AmazonAthenaFullAccess 托管策略附加到您的 AWS Identity and Access Management (IAM) 角色。

在 CloudTrail 日志表上运行 Athena 查询

完成以下步骤:

  1. 打开 Athena 控制台
  2. 选择 New query(新建查询),然后清除示例查询。
  3. 输入您的查询,然后选择 Run query(运行查询)。

使用示例查询

以下是您可以运行的查询示例。

**注意:**在以下查询中,请将 your_athena_tablename 替换为您的 Athena 表的名称,将 access_key_id 替换为您的 20 个字符的访问密钥。您的访问密钥通常以字符 AKIAASIA 开头。

要显示特定访问密钥的所有记录的 AWS API 活动,请运行以下查询:

SELECT eventTime, eventName, userIdentity.principalId  
  FROM your_athena_tablename   
 WHERE userIdentity.accessKeyId like 'access_key_id'

要确定对您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的安全组所做的更改,请运行以下查询:

SELECT eventname, useridentity.username, sourceIPAddress, eventtime, requestparameters  
  FROM your_athena_tablename  
 WHERE (requestparameters LIKE '%sg-5887f224%' OR requestparameters LIKE '%sg-e214609e%' OR requestparameters LIKE '%eni-6c5ca5a8%')  
       AND eventtime > '2017-02-15T00:00:00Z'  
 ORDER BY eventtime ASC;

要显示过去 24 小时内的所有控制台登录,请运行以下查询:

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata  
  FROM your_athena_tablename   
 WHERE eventname = 'ConsoleLogin'  
       AND eventtime >= '2017-02-17T00:00:00Z'  
       AND eventtime < '2017-02-18T00:00:00Z';

要显示过去 24 小时内所有失败的控制台登录尝试,请运行以下查询:

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata  
  FROM your_athena_tablename  
 WHERE eventname = 'ConsoleLogin'  
       AND useridentity.username = 'HIDDEN_DUE_TO_SECURITY_REASONS'  
       AND eventtime >= '2017-02-17T00:00:00Z'  
       AND eventtime < '2017-02-18T00:00:00Z';

要确定 CloudTrail 每月成本增长情况,请运行以下查询:

SELECT eventName,count(eventName) AS NumberOfChanges,eventSource  
  FROM your_athena_tablename   
 WHERE eventtime >= '2019-01-01T00:00:00Z' AND eventtime < '2019-01-31T00:00:00Z'  
 GROUP BY eventName, eventSource  
 ORDER BY NumberOfChanges DESC

**注意:**定义的 eventtime 值是针对单个月份的。要获取多个月份的结果,请运行其他查询。

要确定缺少的 IAM 权限,请运行以下查询:

SELECT COUNT(*) AS TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage  
  FROM your_athena_tablename  
 WHERE (errorcode LIKE '%Denied%' OR errorcode LIKE '%Unauthorized%')  
   AND eventtime >= '2019-10-28T00:00:00Z'  
   AND eventtime < '2019-10-29T00:00:00Z'  
 GROUP BY eventsource, eventname, errorCode, errorMessage, useridentity.arn  
 ORDER BY eventsource, eventname

如果结果未显示失败的 API 调用,请扩大查询范围:

SELECT COUNT(*) as TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage  
  FROM your_athena_tablename  
 WHERE errorcode <> ''  
       AND eventtime >= '2019-10-28T00:00:00Z'  
       AND eventtime < '2019-10-29T00:00:00Z'  
 GROUP BY eventsource, eventname, errorCode, errorMessage, useridentity.arn  
 ORDER BY eventsource, eventname

相关信息

查询 AWS CloudTrail 日志

添加和删除 IAM 身份权限

如何获取数据以帮助解决 IAM 权限的“访问被拒绝”或“未授权”错误?

AWS 官方已更新 10 个月前