我想跟踪运行、停止、启动和终止我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 API 调用。如何使用 AWS CloudTrail 搜索对我的 Amazon EC2 实例的 API 调用?
简短描述
AWS CloudTrail 允许您识别和跟踪向您的 AWS 账户发出的四种类型的 API 调用(事件类型):
要在这些类型的 API 调用发送到您的账户后对其进行查看,您可以使用以下任何一种方法。
**注意:**您最多可查看过去 90 天内您账户的事件历史记录。
解决方法
使用 CloudTrail 事件历史记录跟踪 API 调用
1. 打开 CloudTrail 控制台。
- 选择事件历史记录。
3.对于 Filter(筛选器),从下拉列表中选择 Event name(事件名称)。
4.对于 Enter event name(输入事件名称),输入要搜索的事件类型。然后,选择事件类型。
5.对于 Time range(时间范围),输入要跟踪事件类型的所需时间范围。
6.选择 Apply(应用)。
有关详细信息,请参阅使用 CloudTrail 事件历史记录查看事件和在 CloudTrail 控制台中查看 CloudTrail 事件。
使用 Amazon Athena 查询跟踪 API 调用
按照如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志?中的说明执行操作
以下是 RunInstances API 调用的查询示例。您可以对任何支持的事件类型使用类似的查询。
**重要事项:**在运行以下任何查询示例之前,将 cloudtrail-logs 替换为您的 Athena 表名。
返回 RunInstances API 调用的所有可用事件信息的查询示例
SELECT *
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'
返回 RunInstances API 调用的筛选事件信息的查询示例
SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'
返回以字符串“实例”结尾的 API 从某个时间点到当前日期的事件信息的查询示例
**重要事项:**将 '2021-07-01T00:00:01Z' 替换为您想要返回事件信息的时间点。
SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE (eventName LIKE '%Instances') AND eventTime > '2021-07-01T00:00:01Z'
使用 Amazon Simple Storage Service (Amazon S3) 中的存档 Amazon CloudWatch Logs 跟踪 API 调用
**重要事项:**要将事件记录到 Amazon S3 存储桶,必须先创建 CloudWatch 跟踪记录。
1.按照查找您的 CloudTrail 日志文件中的说明访问您的 CloudTrail 日志文件。
2.按照下载 CloudTrail 日志文件中的说明下载日志文件。
3.使用 jq 或其他 JSON 命令行处理器在日志中搜索要跟踪的事件类型。
在从 Amazon S3 下载的 CloudWatch 日志中搜索特定事件类型的 jq 过程示例
1.打开 Bash 终端。然后,创建以下目录来存储日志文件:
$ mkdir cloudtrail-logs
4.导航到新目录。然后,通过运行以下命令下载 CloudTrail 日志:
**重要事项:**将 my_cloudtrail_bucket 示例替换为您的 Amazon S3 存储桶。
$ cd cloudtrail-logs
$ aws s3 cp s3://my_cloudtrail_bucket/AWSLogs/012345678901/CloudTrail/eu-west-1/2019/08/07 ./ --recursive
5.通过运行以下 gzip 命令解压缩日志文件:
**重要事项:**将 * 替换为要解压缩的文件名。
$ gzip -d *
6.对要搜索的事件类型运行 jq 查询。
返回 RunInstances API 调用的所有可用事件信息的 jq 查询示例
cat * | jq '.Records[] | select(.eventName=="RunInstances")'
返回 StopInstances 和 TerminateInstances API 调用的所有可用事件信息的 jq 查询示例
cat * | jq '.Records[] | select(.eventName=="StopInstances" or .eventName=="TerminateInstances" )'
相关信息
我如何使用 CloudTrail 查看在我的 AWS 账户中发生了哪些 API 调用和操作?
使用筛选器从日志事件创建指标
AWS Config console now displays API events associated with configuration changes