作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/241018091258/
相关话题:https://www.cnsre.cn/tags/aws/
在现代企业的云环境中,了解哪些用户对哪些资源进行了创建和修改操作,并统计这些操作的频率,至关重要。这不仅有助于监控资源管理,还能提升安全性和操作效率。本文将通过一个实际案例,演示如何使用 AWS Athena 查询 CloudTrail 日志,提取用户对资源的创建和修改操作,并进行详细统计分析。
实验背景与需求
在本实验中,我们的目标是从 CloudTrail 日志中提取所有用户对资源的创建和修改操作,并对这些操作进行统计分析。具体而言,我们希望能够回答以下问题:
- 哪些用户创建了哪些资源?
- 哪些用户修改了哪些资源?
- 每种操作的频率是多少?
实验准备工作
1. 创建和配置 CloudTrail
首先,确保你的 AWS 账户中已配置 CloudTrail,并将日志存储在 S3 存储桶中。如果尚未设置,请参考 AWS CloudTrail 配置指南 进行配置。
2. 设置 Athena
接下来,我们需要在 AWS Athena 中设置环境,以便查询存储在 S3 中的 CloudTrail 日志。
创建 CloudTrail 表
在 Athena 中创建一个数据库和表,用于存储 CloudTrail 日志数据。假设日志存储在 s3://your-bucket/cloudtrail/ 路径下,可以使用以下 SQL 语句创建表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
CREATE DATABASE IF NOT EXISTS cloudtrail_logs;
USE cloudtrail_logs;
CREATE EXTERNAL TABLE IF NOT EXISTS cloudtrail_logs (
eventVersion STRING,
userIdentity STRUCT<
type:STRING,
principalId:STRING,
arn:STRING,
accountId:STRING,
accessKeyId:STRING,
userName:STRING
>,
eventTime STRING,
eventSource STRING,
eventName STRING,
awsRegion STRING,
sourceIPAddress STRING,
userAgent STRING,
requestParameters STRING,
responseElements STRING,
requestID STRING,
eventID STRING,
eventType STRING,
apiVersion STRING,
readOnly BOOLEAN,
resources ARRAY<STRUCT<ARN:STRING, accountId:STRING, type:STRING>>,
eventCategory STRING,
sessionCredential STRING
)
PARTITIONED BY (dt STRING)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://your-bucket/cloudtrail/';
|
上述 SQL 语句定义了 CloudTrail 日志的结构,并指定了 S3 存储桶的位置作为数据源。
添加分区
为了提高查询效率,Athena 需要识别日志文件的分区信息。执行以下命令以修复表的分区:
1
|
MSCK REPAIR TABLE cloudtrail_logs;
|
查询用户操作
现在,我们可以编写 SQL 查询,从 CloudTrail 日志中提取用户对资源的创建和修改操作,并进行统计分析。
1. 查询用户创建资源的操作
以下查询将返回特定日期内每个用户的资源创建操作及其数量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECT
userIdentity.userName AS user_name,
eventName AS action,
COUNT(*) AS count
FROM
cloudtrail_logs
WHERE
eventName IN ('CreateBucket', 'RunInstances', 'CreateVolume', 'CreateDBInstance') -- 关注的创建操作
AND dt = '2024-08-09' -- 替换为目标日期
GROUP BY
userIdentity.userName,
eventName
ORDER BY
user_name,
count DESC;
|
说明:
eventName 列表中包含了常见的资源创建操作。根据实际需求,可以添加或移除操作类型。
dt 字段用于按日期分区过滤,确保查询效率。
2. 查询用户修改资源的操作
以下查询将返回特定日期内每个用户的资源修改操作及其数量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECT
userIdentity.userName AS user_name,
eventName AS action,
COUNT(*) AS count
FROM
cloudtrail_logs
WHERE
eventName IN ('ModifyInstanceAttribute', 'UpdateVolume', 'ModifyDBInstance') -- 关注的修改操作
AND dt = '2024-08-09' -- 替换为目标日期
GROUP BY
userIdentity.userName,
eventName
ORDER BY
user_name,
count DESC;
|
说明:
eventName 列表中包含了常见的资源修改操作。根据实际需求,可以调整操作类型。
- 同样使用
dt 字段进行分区过滤。
3. 统计所有操作的频率
以下查询将返回所有用户的所有操作的统计数据,按操作名称进行分组和排序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SELECT
userIdentity.userName AS user_name,
eventName AS action,
COUNT(*) AS count
FROM
cloudtrail_logs
WHERE
dt = '2024-08-09' -- 替换为目标日期
GROUP BY
userIdentity.userName,
eventName
ORDER BY
user_name,
count DESC;
|
说明:
- 此查询涵盖了所有操作类型,适用于全面了解用户操作行为。
解决常见问题
在实际操作中,可能会遇到以下问题及解决方案:
1. 数据不完整
问题:查询结果不完整,缺少部分日志数据。
解决方案:
- 检查 Athena 表的结构是否与 CloudTrail 日志格式匹配。
- 确认分区是否正确添加。可以重新运行
MSCK REPAIR TABLE cloudtrail_logs; 命令。
- 确保 S3 存储桶中的日志文件完整且未损坏。
2. 查询效率低
问题:查询速度较慢,耗时较长。
解决方案:
- 使用分区字段(如日期)进行过滤,减少扫描的数据量。
- 仅选择必要的列,避免
SELECT *。
- 优化 SQL 查询,避免不必要的复杂操作。
总结
通过本文的指导,我们展示了如何使用 AWS Athena 从 CloudTrail 日志中提取用户对资源的创建和修改操作,并进行统计分析。这些步骤和技巧不仅帮助你高效地管理和分析 AWS 资源操作数据,还能提升整体的安全性和运营效率。
如果在实施过程中遇到任何问题,欢迎在评论区留言。感谢你的阅读,祝你在 AWS 数据分析的旅程中一切顺利!
作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/241018091258/
相关话题:https://www.cnsre.cn/tags/aws/