如何使用 AWS CloudTrail 跟踪对 Amazon EC2 实例的 API 调用?

2 分钟阅读
0

我想跟踪运行、停止、启动和终止我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 API 调用。如何使用 AWS CloudTrail 搜索对我的 Amazon EC2 实例的 API 调用?

简短描述

AWS CloudTrail 可让您识别和跟踪对 AWS 账户发出的四种类型 API 调用 (事件类型):

要在对您的账户进行这些类型的 API 调用后查看它们,您可以使用以下任一方法。

**注意:**您可以查看最近 90 天内账户的事件历史记录。

解决方法

使用 CloudTrail 事件历史记录跟踪 API 调用

1.    打开 CloudTrail 控制台

2.    选择事件历史记录

3.    对于筛选条件,从下拉列表中选择事件名称

4.    对于输入事件名称,输入要搜索的事件类型。然后,选择事件类型。

5.    对于时间范围,输入要跟踪事件类型的所需时间范围。

6.    选择应用

有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件查看 CloudTrail 控制台中的 CloudTrail 事件

使用 Amazon Athena 查询跟踪 API 调用

按照如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志?中的说明进行操作

以下是对 runInstances API 调用的示例查询。您可以对任何受支持的事件类型使用类似的查询。

**重要提示:**在运行以下任何查询示例之前,请使用 Athena 表名替换 cloudrail-log

用于返回 runInstances API 调用的所有可用事件信息的示例查询

SELECT *
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

用于返回 runInstances API 调用的筛选事件信息的示例查询

SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

用于返回从某个时间点到当前日期以字符串“Instances”结尾的 API 事件信息的示例查询

重要提示:将 '2021-07-01T 00:00:01 Z' 替换为您希望从中返回事件信息的时间点。

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_cloud rail_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 控制台现在显示与配置更改关联的 API 事件

AWS 官方
AWS 官方已更新 3 年前