如何在 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" )'

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?