如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志记录?
上次更新日期:2021 年 7 月 1 日
我想在大量 AWS CloudTrail 日志中进行搜索。为避免出现错误,我不想手动创建 Amazon Athena 表。
解决方法
使用 CloudTrail 控制台自动创建 Athena 表。有关更多信息,请参阅使用 Amazon Athena 搜索 AWS CloudTrail 日志。
创建 Athena 表
1. 打开 CloudTrail 控制台,然后从导航窗格中选择 Trails(跟踪)。记下 S3 存储桶名称。
2. 在导航窗格中,选择 Event history(事件历史记录),然后选择 Create Athena table(创建 Athena 表)。
3. 在 Create a table in Amazon Athena(在 Amazon Athena 中创建表)窗口中,打开 Storage location(存储位置)菜单,然后选择带有 CloudTrail 日志文件的 Amazon Simple Storage Service (Amazon S3) 存储桶。
注意:您可以使用 Athena 对 CloudTrail 日志的分区投影来提高单个 AWS 区域中特定时间范围的搜索性能。
4. 选择 Create table(创建表)。
5. 选择 Go to Athena(转至 Athena)。
注意:您可能会收到一条错误消息“Your account does not have sufficient permissions to create tables in Amazon Athena。” 如果您确已收到,请按照添加 AWS Identity and Access Management (IAM) 策略(控制台)中的说明附加 AmazonAthenaFullAccess 托管策略。
您可以针对您的日志使用以下一项或多项示例查询。使用您的 Athena 表名替换 your_athena_tablename,并使用您的 20 个字符的访问密钥替换 access_key_id。您的访问密钥通常以 AKIA 或 ASIA 字符开头。
运行 Athena 查询
显示指定访问密钥的所有记录的 AWS API 活动
SELECT eventTime, eventName, userIdentity.principalId
FROM your_athena_tablename
WHERE userIdentity.accessKeyId like 'access_key_id'
识别 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