如何在 CloudTrail 日志中搜索运行、停止、启动和终止 EC2 实例的 API 调用?
上次更新时间:2019 年 9 月 3 日
我想跟踪运行、停止、启动和终止我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 API 调用。
简要描述
AWS CloudTrail 支持您查看和跟踪针对您的账户进行的 API 调用。您可以跟踪以下 API 调用,以确保安全性与合规性:
解决方案
使用 CloudTrail 事件历史记录、Amazon Athena 查询或从 Amazon Simple Storage Service S3 存储桶下载 CloudTrail 日志。
CloudTrail 事件历史记录
1. 打开 CloudTrail 控制台,然后选择事件历史记录。
2. 在筛选条件部分,选择下拉菜单,然后选择事件名称。
3. 在输入事件名称文本框中,输入要搜索的事件名称(RunInstances、StopInstances、StartInstances 或 TerminateInstances),然后选择事件名称。
4. 在时间范围字段中,输入所需的时间范围,然后选择应用。
注意:您可以查看最近 90 天的事件历史记录。
有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件。
Athena 查询
1. 按照查询 AWS CloudTrail 日志中的说明操作。
2. 打开 Athena 控制台,然后选择查询编辑器。
3. 输入以下示例查询以返回 RunInstances API 调用的所有事件信息,然后选择运行查询。
注意:请将“cloudtrail-logs”替换为您在步骤 1 中创建的 Athena 表的名称。
SELECT *
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'
4. 输入以下示例查询以返回筛选后的 RunInstances API 调用事件信息,然后选择运行查询。
SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'
5. 输入以下示例查询,以返回从 2019 年 4 月 1 日至今以字符串“Instances”结尾的 API 的事件信息,然后选择运行查询。
SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE (eventName LIKE '%Instances') AND eventTime > '2019-04-01T00:00:01Z'
从 Amazon S3 下载 CloudTrail 日志
使用 jq 或您最喜欢的 JSON 命令行处理器来解析日志。
注意:您必须启用跟踪才能将日志记录到 S3 存储桶中。
1. 按照查找您的 CloudTrail 日志文件中的说明操作。
2. 按照下载您的 CloudTrail 日志文件中的说明操作。
3. 打开一个 Bash 终端,然后创建以下目录来存储日志文件:
$ mkdir cloudtrail-logs
4. 转到新的目录,然后下载 CloudTrail 日志:
$ cd cloudtrail-logs
$ aws s3 cp s3://my_cloudtrail_bucket/AWSLogs/012345678901/CloudTrail/eu-west-1/2019/08/07 ./ --recursive
5. 解压缩日志文件:
$ gzip -d *
以下示例查询会返回 API RunInstances 的所有事件:
cat * | jq '.Records[] | select(.eventName=="RunInstances")'
以下示例查询会返回 API StopInstances 和 TerminateInstances 的所有事件:
cat * | jq '.Records[] | select(.eventName=="StopInstances" or .eventName=="TerminateInstances" )'