Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志?
我想搜索大量 AWS CloudTrail 日志。为了避免错误,我不想手动创建 Amazon Athena 表。
解决方法
使用 CloudTrail 控制台自动创建 Athena 表。有关详细信息,请参阅使用 Amazon Athena 搜索 AWS CloudTrail 日志。
从 CloudTrail 日志创建 Athena 表
完成以下步骤:
- 打开 CloudTrail 控制台。
- 在导航窗格中,选择 Trails(跟踪),然后记下包含 CloudTrail 日志的 Amazon Simple Storage Service (Amazon S3) 存储桶的名称。
- 在导航窗格中,选择 Event history(事件历史记录),然后选择 Create Athena table(创建 Athena 表)。
- 在 Create a table in Amazon Athena(在 Amazon Athena 中创建表)窗口中,从 Storage location(存储位置)菜单中选择 S3 存储桶。
**注意:**为了在特定时间范围内优化搜索效果,您可以在 Athena 中为 CloudTrail 日志使用分区投影。 - 选择 Create table(创建表)。
- 选择 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 查询
完成以下步骤:
- 打开 Athena 控制台。
- 选择 New query(新建查询),然后清除示例查询。
- 输入您的查询,然后选择 Run query(运行查询)。
使用示例查询
以下是您可以运行的查询示例。
**注意:**在以下查询中,请将 your_athena_tablename 替换为您的 Athena 表的名称,将 access_key_id 替换为您的 20 个字符的访问密钥。您的访问密钥通常以字符 AKIA 或 ASIA 开头。
要显示特定访问密钥的所有记录的 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

