文章总结: 本文指导读者利用AWSCloudTrail、Athena和QuickSight构建云安全仪表盘,详细介绍了日志收集、SQL数据分析及可视化图表创建流程,旨在监控登录失败、Root账户活动和API调用。此外涵盖故障排除与成本优化建议,帮助初学者掌握云安全监控与取证技能,具备较高的实操价值。 综合评分: 85 文章分类: 云安全,安全建设,安全运营,实战经验
面向JD学习AWS云安全5:仪表盘搭建
Dubito
云原生安全指北
2026年1月7日 08:36 江苏
注:本文翻译自 LaTerral Williams[1] 的文章《🛡️ Building a Cloud Security Dashboard with AWS Athena + QuickSight (Beginner Friendly)》[2],可点击文末“阅读原文”按钮查看英文原文。
全文如下:
⭐ 我为什么构建这个项目
(项目 5/6:使用 Athena + QuickSight 进行日志分析与仪表板构建)
与其孤立地学习云安全概念,我选择将 真实的职位描述 作为路线图,并直接动手构建那些映射到云安全、云运维和安全工程岗位的实践项目。
这个包含 6 个部分的系列聚焦于实用的、可直接写入简历的云安全技能,包括:
- • 身份加固与多因素认证 (MFA) 强制实施
- • IAM 治理与访问权限审查 (access reviews)
- • 云资源的持续监控
- • 错误配置检测与漂移分析 (drift analysis)
- • 日志分析、审计就绪与证据收集
- • 使用 AWS Organizations + 服务控制策略 (SCPs) 实现规模化防护护栏
- • 威胁检测、异常监控与事件分类处置 (incident triage)
每个项目都旨在反映 真实世界的工作职责,而不仅仅是理论学习。
📌 项目系列概览
注:其他项目见同期发布的其他文章
👉 项目 1: AWS IAM 加固:强化身份边界并提升认证安全状况 (authentication hygiene)
👉 项目 2: 使用 Security Hub + AWS Config 实现云安全态势管理 (CSPM)
👉 项目 3: 使用 GuardDuty + CloudTrail 实现类似 CASB 的监控,聚焦异常、委托管理员和安全威胁模拟
👉 项目 4: 使用 AWS Config 进行漂移检测 (Drift Detection),涉及托管规则、EventBridge 路由、标签和可选修复
👉 **项目 5(本项目):使用 Athena + QuickSight 进行日志分析与仪表板构建
👉 项目 6: (本项目):Terraform 安全模块,使用基础设施即代码(Infrastructure as Code,IaC)构建安全的 AWS 基线
🔍 为什么这个项目很重要
现代云安全团队高度依赖 日志,它们是调查或审计期间唯一的真相来源。
但是,原始的 CloudTrail 日志数据量巨大、充满噪音,没有合适的工具则难以解读。
本项目将教你如何:
- • 将 CloudTrail 日志集中存储到 S3
- • 使用 Amazon Athena 高效查询这些日志
- • 使用 Amazon QuickSight 构建一个真正的安全仪表板
- • 可视化用户行为、异常和基于区域的活动
- • 识别失败的登录、root 用户使用和高风险的 API 调用
- • 了解安全分析师和云安全工程师如何进行取证和证据收集
你还将了解 CloudTrail 日志的实际局限性(如数据摄取延迟、字段缺失、错误代码不一致、时间戳解析问题),并学习如何设计即使底层日志不完美也能工作的可视化图表——这是一项真实的、实用的技能。
完成本项目后,你将拥有一个可用于作品集的 CloudTrail 安全仪表板,它能够展示真实的账户活动、提供安全洞察,并且直接契合云安全职位描述中列出的职责。
欢迎来到这个动手实践、对初学者友好的教程,我们将使用三项 AWS 服务构建一个云安全仪表板:
- • CloudTrail → 捕获账户活动
- • Athena → 使用 SQL 查询 CloudTrail 日志
- • QuickSight → 可视化安全事件
在整个过程中,我会分享真实的故障排除经历、给初学者的提示以及节约成本的建议,因为学习 AWS 应该既有趣也实惠。
一、简介
当你初涉云安全时,可能会感到不知所措。AWS 无处不在的日志、告警和工具。但一旦你学会如何连接几个核心服务,就能解锁强大的能力:
👉 你能够看见你的 AWS 账户内部正在发生什么。
在本项目中,你将把原始的 CloudTrail 日志变成一个可视化仪表板,展示:
- • 控制台登录失败尝试
- • root 账户活动
- • 按区域划分的 API 使用情况
- • 发起 API 调用的主要用户
而且你不需要昂贵的工具就能做到这一点。
二、你将构建什么
项目结束时,你将拥有:
- • 一个可运行的 CloudTrail → S3 → Athena → QuickSight 数据管道 (pipeline)
- • 一个包含四类可视化图表的安全仪表板
- • 一些保存好的查询语句,帮助你像云安全工程师一样思考
- • 一个可复现的工作流,可以在面试或作品集中展示
是的,整个项目都控制在 AWS 的免费或极低成本的用量范围内。
三、前提条件与成本注意事项
你需要准备:
- • 一个 AWS 账户
- • 使用 CloudTrail、S3、Athena 和 QuickSight 的 IAM 权限
- • 一个支持 QuickSight 的区域
成本说明(重要)
- • CloudTrail:记录管理事件的 1 条跟踪 (trail) 是免费的
- • S3 存储:日志存储只需几美分
- • Athena:约 5 美元/TB 扫描量(我们的数据集极小——成本近乎 0 美元)
- • QuickSight:SPICE 存储提供非常充裕的免费套餐
💡 专业建议: 完成后,请删除 Athena 查询结果并停用 CloudTrail(清理步骤中会说明)。
四、步骤 1:启用 CloudTrail 日志记录
如果你尚未启用:
- 1. 打开 CloudTrail
- 2. 进入 跟踪 (Trails) → 创建跟踪 (Create Trail)
- 3. 选择:
- • 管理事件 (Management events) = 读写 (Read/Write)
- • 存储位置 (Storage location) = 新建 S3 存储桶
- 4. 点击 创建 (Create)
CloudTrail 将在大约 5–10 分钟后开始向 S3 写入日志文件。
五、步骤 2:在 S3 中验证 CloudTrail 日志
导航到你创建的存储桶:
s3://your-cloudtrail-bucket/AWSLogs/ACCOUNT-ID/CloudTrail/
在桶内,你应该看到按区域和日期命名的文件夹,例如:
us-east-1/2025/12/11/
每个文件夹都包含 .json.gz 格式的 CloudTrail 日志。
如果看不到日志,请等待几分钟,或者在账户中触发一些活动(例如登录、创建 IAM 用户等)。
六、步骤 3:设置 Athena
注意:在 Athena 控制台中查询你的数据
进入 Athena → 查询编辑器 (Query Editor)
- 1. 选择一个结果位置(S3 存储桶)
- 2. 创建一个新数据库:
CREATE DATABASE security_logs_db;
在左侧面板中选择这个数据库。
七、步骤 4:创建外部 CloudTrail 表
使用以下 DDL 语句(请调整存储桶路径/账户 ID):
CREATE EXTERNAL TABLE cloudtrail_logs(
eventversion string,
useridentity struct<
type:string,
principalid:string,
arn:string,
accountid:string,
invokedby:string,
accesskeyid:string,
username:string,
sessioncontext:struct<
attributes:struct<mfaauthenticated:string,creationdate:string>,
sessionissuer:struct<
type:string,principalid:string,arn:string,accountid:string,username:string
>
>
>,
eventtime string,
eventsource string,
eventname string,
awsregion string,
sourceipaddress string,
useragent string,
errorcode string,
errormessage string,
requestparameters string,
responseelements string,
additionaleventdata string,
requestid string,
eventid string,
resources array<struct<arn:string,accountid:string,type:string>>,
eventtype string,
apiversion string,
readonly string,
recipientaccountid string,
serviceeventdetails string,
sharedeventid string,
vpcendpointid string
)
PARTITIONED BY (region string, year string, month string, day string)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://your-cloudtrail-bucket/AWSLogs/<ACCOUNT-ID>/CloudTrail/';
注意:你很可能需要创建一个视图 (view) 来汇总特定信息。
CREATE OR REPLACE VIEW cloudtrail_flattened AS
SELECT
-- 核心事件元数据
eventtime,
eventsource,
eventname,
awsregion,
sourceipaddress,
useragent,
errorcode,
errormessage,
responseelements,
eventid,
-- 扁平化的身份字段
useridentity.type AS useridentity_type,
useridentity.arn AS useridentity_arn,
useridentity.accountid AS useridentity_accountid,
useridentity.username AS useridentity_username,
useridentity.principalid AS useridentity_principalid,
-- 附加上下文(可选,但对调查很有用)
eventtype,
apiversion,
readonly,
recipientaccountid,
vpcendpointid
FROM cloudtrail_logs;
八、步骤 5:修复分区并验证数据
运行:
MSCK REPAIR TABLE cloudtrail_logs;
这会指示 Athena 扫描所有文件夹(区域/日期)并将其注册为分区。
接着,验证数据:
SELECT *
FROM cloudtrail_logs
ORDER BY eventtime DESC
LIMIT 20;
如果返回数据 → 成功!
如果没有,请检查:
- • S3 存储桶路径是否正确
- • CloudTrail 文件夹是否存在
- • Athena 的 IAM 权限是否正确
九、步骤 6:在 Athena 中运行安全相关的 SQL 查询
现在,我们来运行一些实用的安全查询。
9.1 检查事件类型
SELECT eventname, COUNT(*)
FROM cloudtrail_logs
GROUP BY eventname
ORDER BY COUNT(*) DESC;
这可以告诉你账户中发生了哪些类型的操作。
9.2 失败的控制台登录尝试
失败的登录通常伴随非空的 errorMessage 字段出现:
SELECT eventtime, sourceipaddress, errormessage
FROM cloudtrail_logs
WHERE eventname = 'ConsoleLogin'
AND errormessage IS NOT NULL
ORDER BY eventtime DESC;
9.3 Root 账户活动
SELECT eventtime, eventname, sourceipaddress
FROM cloudtrail_logs
WHERE useridentity.type = 'Root'
ORDER BY eventtime DESC;
任何root账户事件都值得关注。
9.4 按区域统计事件
SELECT awsregion, COUNT(*)
FROM cloudtrail_logs
GROUP BY awsregion
ORDER BY COUNT(*) DESC;
9.5 按活动统计的 Top IAM 用户
SELECT useridentity.username, COUNT(*) AS api_calls
FROM cloudtrail_logs
WHERE useridentity.username IS NOT NULL
GROUP BY useridentity.username
ORDER BY api_calls DESC
LIMIT 10;
至此,你已经具备了构建仪表板所需的一切。
十、步骤 7:构建 QuickSight 仪表板
打开 QuickSight → 数据集 (Datasets) → 新建数据集 (New Dataset)
选择 Athena → cloudtrail_logs → 以 SPICE 格式导入。
由于 CloudTrail 的时间戳作为字符串排序是正确的,你无需将其转换为日期类型。
10.1 仪表板可视化图表 1:失败的控制台登录
图表类型: 折线图
X 轴:eventtime
值:eventid (Count)
Filter:
- •
eventname = ConsoleLogin - •
errormessage is not null
10.2 仪表板可视化图表 2:root账户活动
图表类型: 柱状图
X 轴:eventtime
值:eventid (Count)
Filter:
- •
useridentity_type = Root
10.3 仪表板可视化图表 3:按 AWS 区域统计事件
图表类型: 水平柱状图
Y 轴:awsregion
值:eventid (Count)
10.4 仪表板可视化图表 4:按 API 调用统计的 Top 用户
图表类型: 垂直柱状图
X 轴:useridentity_username
值:eventid (Count)
Filter:
- • Top N = 10
你的仪表板现在完成了!
十一、步骤 8:发布仪表板
点击:
共享 (Share) → 发布仪表板 (Publish Dashboard) → 选择“所有工作表 (All Sheets)”
这能确保你的整个分析内容都被共享,而不仅仅是第一个工作表。
十二、步骤 9:清理与成本优化
为避免不必要的费用:
Athena
- • 从其 S3 存储桶中删除旧的查询结果
CloudTrail
- • 如果仅为学习目的,请禁用日志记录
- • 或者减少记录的事件类型以降低 S3 用量
QuickSight
- • 删除未使用的数据集以释放 SPICE 容量
S3
- • 如果不再需要,请移除旧的日志文件夹
十三、故障排除(适合初学者)
即使是像 CloudTrail → S3 → Athena → QuickSight 这样简单的架构,一些常见问题也可能导致数据缺失或可视化图表失效。在进行深度排查之前,你可以快速检查以下故障排除提示。
– CloudTrail 数据未在 Athena 中出现
原因: CloudTrail 日志尚未到达 S3,或者路径与表的 LOCATION 不匹配。
快速修复方法:
- • 启用 CloudTrail 后等待 5–10 分钟。
- • 在你的 AWS 账户中触发一些活动(例如登录、创建 IAM 用户等)。
- • 确认你的 S3 路径格式如下:
s3://your-bucket/AWSLogs/<ACCOUNT-ID>/CloudTrail/
- • 重新运行:
MSCK REPAIR TABLE cloudtrail_logs;
如果之后仍然没有数据行出现,则说明文件夹结构或存储桶路径不正确。
– MSCK REPAIR 成功但查询返回空结果
原因: Athena 表的 LOCATION 缺少末尾的斜杠或指向了错误的文件夹。
快速修复方法:
确保 LOCATION 以下述格式结尾:
.../CloudTrail/
然后运行:
MSCK REPAIR TABLE cloudtrail_logs;
Athena 需要精确的文件夹结构才能识别分区。
– QuickSight SPICE 数据集显示“无数据”
原因: SPICE 可能导入了数据集的空版本或过时版本。
快速修复方法:
- • 进入数据集 (Datasets) → 刷新 SPICE (Refresh SPICE)
- • 如果这没有解决问题,删除该数据集,然后从 Athena 重新创建。
- • 在构建可视化图表前,确认数据集预览确实显示数据行。
– 可视化图表仍显示“无数据”
最常见的原因:
- • Filter隐藏了所有数据
- • 图表仍在引用旧的字段
- • 字段类型被更改,QuickSight 无法正确映射
快速修复方法:
- 1. 移除所有Filter,然后只重新添加你需要的那些。
- 2. 将字段重新添加到图表中(重新拖拽它们)。
- 3. 保持
eventtime为字符串类型——它能正确排序并避免解析问题。
– 失败的控制台登录事件未显示
原因: CloudTrail 有时使用 errorMessage 而非 errorCode 来记录失败的登录。
修复方法:
使用以下筛选条件:
errormessage is not null
这能可靠地捕获失败事件。
– QuickSight 权限错误
如果你看到关于 S3 访问或 Athena 元数据的错误
快速修复方法:
确保 QuickSight 已启用以下权限:
- • 访问 Athena
- • 访问你的 CloudTrail S3 存储桶
你可以在以下位置配置:
QuickSight → 管理 QuickSight (Manage QuickSight) → 安全与权限 (Security & Permissions)
最终建议
如果某些内容显示为空白:
- • 移除 Filter
- • 刷新 SPICE
- • 重新添加字段
- • 运行一个简单的表格可视化图表来确认数据存在
Athena 与 QuickSight 中的大多数问题都归结于Filter、路径或SPICE 未刷新。
现在,你已经掌握了保持数据管道平稳运行所需的一切!
十四、总结
你刚刚构建了一个真实组织中使用的云安全监控工作流。
你学到了:
- • CloudTrail 日志如何工作
- • 如何使用 Athena 查询日志
- • 如何使用 SQL 分析活动
- • 如何在 QuickSight 中构建安全仪表板
- • 如何排查常见的 AWS 数据问题
- • 如何优化成本
最重要的是,你现在理解了如何观察 AWS 账户内部正在发生什么,这是一项核心的云安全技能。
引用链接
[1] LaTerral Williams: https://linkedin.com/in/ldwit
[2] 《🛡️ Building a Cloud Security Dashboard with AWS Athena + QuickSight (Beginner Friendly)》: https://dev.to/ldwit/building-a-cloud-security-dashboard-with-aws-athena-quicksight-beginner-friendly-3pld
交流群
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云原生安全指北 Dubito《面向JD学习AWS云安全5:仪表盘搭建》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。





![Libra[天秤座]|网站篡改、暗链、死链监测平台](/images/random/titlepic/13.jpg)


评论