面向JD学习AWS云安全5:仪表盘搭建

admin 2026-01-08 02:15:10 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文指导读者利用AWSCloudTrail、Athena和QuickSight构建云安全仪表盘,详细介绍了日志收集、SQL数据分析及可视化图表创建流程,旨在监控登录失败、Root账户活动和API调用。此外涵盖故障排除与成本优化建议,帮助初学者掌握云安全监控与取证技能,具备较高的实操价值。 综合评分: 85 文章分类: 云安全,安全建设,安全运营,实战经验


cover_image

面向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. 1. 打开 CloudTrail
  2. 2. 进入 跟踪 (Trails) → 创建跟踪 (Create Trail)
  3. 3. 选择:
  • • 管理事件 (Management events) = 读写 (Read/Write)
  • • 存储位置 (Storage location) = 新建 S3 存储桶
  1. 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. 1. 选择一个结果位置(S3 存储桶)
  2. 2. 创建一个新数据库:
CREATE DATABASE security_logs_db;

在左侧面板中选择这个数据库。

七、步骤 4:创建外部 CloudTrail 表

使用以下 DDL 语句(请调整存储桶路径/账户 ID):

CREATE EXTERNAL TABLE cloudtrail_logs(
  eventversion string,
&nbsp; useridentity struct<
&nbsp; &nbsp; &nbsp; type:string,
&nbsp; &nbsp; &nbsp; principalid:string,
&nbsp; &nbsp; &nbsp; arn:string,
&nbsp; &nbsp; &nbsp; accountid:string,
&nbsp; &nbsp; &nbsp; invokedby:string,
&nbsp; &nbsp; &nbsp; accesskeyid:string,
&nbsp; &nbsp; &nbsp; username:string,
&nbsp; &nbsp; &nbsp; sessioncontext:struct<
&nbsp; &nbsp; &nbsp; &nbsp; attributes:struct<mfaauthenticated:string,creationdate:string>,
&nbsp; &nbsp; &nbsp; &nbsp; sessionissuer:struct<
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type:string,principalid:string,arn:string,accountid:string,username:string
&nbsp; &nbsp; &nbsp; &nbsp; >
&nbsp; &nbsp; &nbsp; >
&nbsp; >,
&nbsp; eventtime string,
&nbsp; eventsource string,
&nbsp; eventname string,
&nbsp; awsregion string,
&nbsp; sourceipaddress string,
&nbsp; useragent string,
&nbsp; errorcode string,
&nbsp; errormessage string,
&nbsp; requestparameters string,
&nbsp; responseelements string,
&nbsp; additionaleventdata string,
&nbsp; requestid string,
&nbsp; eventid string,
&nbsp; resources&nbsp;array<struct<arn:string,accountid:string,type:string>>,
&nbsp; eventtype string,
&nbsp; apiversion string,
&nbsp; readonly string,
&nbsp; recipientaccountid string,
&nbsp; serviceeventdetails string,
&nbsp; sharedeventid string,
&nbsp; vpcendpointid string
)
PARTITIONED&nbsp;BY&nbsp;(region string,&nbsp;year&nbsp;string,&nbsp;month&nbsp;string,&nbsp;day&nbsp;string)
ROW&nbsp;FORMAT SERDE&nbsp;'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED&nbsp;AS&nbsp;INPUTFORMAT&nbsp;'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT&nbsp;'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION&nbsp;'s3://your-cloudtrail-bucket/AWSLogs/<ACCOUNT-ID>/CloudTrail/';

注意:你很可能需要创建一个视图 (view) 来汇总特定信息。

CREATE&nbsp;OR&nbsp;REPLACE&nbsp;VIEW&nbsp;cloudtrail_flattened&nbsp;AS
SELECT
&nbsp; -- 核心事件元数据
&nbsp; eventtime,
&nbsp; eventsource,
&nbsp; eventname,
&nbsp; awsregion,
&nbsp; sourceipaddress,
&nbsp; useragent,
&nbsp; errorcode,
&nbsp; errormessage,
&nbsp; responseelements,
&nbsp; eventid,

&nbsp; -- 扁平化的身份字段
&nbsp; useridentity.type&nbsp; &nbsp; &nbsp; &nbsp; AS&nbsp;useridentity_type,
&nbsp; useridentity.arn&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AS&nbsp;useridentity_arn,
&nbsp; useridentity.accountid&nbsp; &nbsp;AS&nbsp;useridentity_accountid,
&nbsp; useridentity.username&nbsp; &nbsp; AS&nbsp;useridentity_username,
&nbsp; useridentity.principalid&nbsp;AS&nbsp;useridentity_principalid,

&nbsp; -- 附加上下文(可选,但对调查很有用)
&nbsp; eventtype,
&nbsp; apiversion,
&nbsp; readonly,
&nbsp; recipientaccountid,
&nbsp; vpcendpointid

FROM&nbsp;cloudtrail_logs;

八、步骤 5:修复分区并验证数据

运行:

MSCK REPAIR&nbsp;TABLE&nbsp;cloudtrail_logs;

这会指示 Athena 扫描所有文件夹(区域/日期)并将其注册为分区。

接着,验证数据:

SELECT&nbsp;*
FROM&nbsp;cloudtrail_logs
ORDER&nbsp;BY&nbsp;eventtime&nbsp;DESC
LIMIT&nbsp;20;

如果返回数据 → 成功!

如果没有,请检查:

  • • S3 存储桶路径是否正确
  • • CloudTrail 文件夹是否存在
  • • Athena 的 IAM 权限是否正确

九、步骤 6:在 Athena 中运行安全相关的 SQL 查询

现在,我们来运行一些实用的安全查询。

9.1 检查事件类型

SELECT&nbsp;eventname,&nbsp;COUNT(*)
FROM&nbsp;cloudtrail_logs
GROUP&nbsp;BY&nbsp;eventname
ORDER&nbsp;BY&nbsp;COUNT(*)&nbsp;DESC;

这可以告诉你账户中发生了哪些类型的操作。

9.2 失败的控制台登录尝试

失败的登录通常伴随非空的 errorMessage 字段出现:

SELECT&nbsp;eventtime, sourceipaddress, errormessage
FROM&nbsp;cloudtrail_logs
WHERE&nbsp;eventname&nbsp;=&nbsp;'ConsoleLogin'
&nbsp; AND&nbsp;errormessage&nbsp;IS&nbsp;NOT NULL
ORDER&nbsp;BY&nbsp;eventtime&nbsp;DESC;

9.3 Root 账户活动

SELECT&nbsp;eventtime, eventname, sourceipaddress
FROM&nbsp;cloudtrail_logs
WHERE&nbsp;useridentity.type&nbsp;=&nbsp;'Root'
ORDER&nbsp;BY&nbsp;eventtime&nbsp;DESC;

任何root账户事件都值得关注。

9.4 按区域统计事件

SELECT&nbsp;awsregion,&nbsp;COUNT(*)
FROM&nbsp;cloudtrail_logs
GROUP&nbsp;BY&nbsp;awsregion
ORDER&nbsp;BY&nbsp;COUNT(*)&nbsp;DESC;

9.5 按活动统计的 Top IAM 用户

SELECT&nbsp;useridentity.username,&nbsp;COUNT(*)&nbsp;AS&nbsp;api_calls
FROM&nbsp;cloudtrail_logs
WHERE&nbsp;useridentity.username&nbsp;IS&nbsp;NOT NULL
GROUP&nbsp;BY&nbsp;useridentity.username
ORDER&nbsp;BY&nbsp;api_calls&nbsp;DESC
LIMIT&nbsp;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&nbsp;TABLE&nbsp;cloudtrail_logs;

如果之后仍然没有数据行出现,则说明文件夹结构或存储桶路径不正确。

– MSCK REPAIR 成功但查询返回空结果

原因: Athena 表的 LOCATION 缺少末尾的斜杠或指向了错误的文件夹。

快速修复方法:

确保 LOCATION 以下述格式结尾:

.../CloudTrail/

然后运行:

MSCK REPAIR&nbsp;TABLE&nbsp;cloudtrail_logs;

Athena 需要精确的文件夹结构才能识别分区。

– QuickSight SPICE 数据集显示“无数据”

原因: SPICE 可能导入了数据集的空版本或过时版本。

快速修复方法:

  • • 进入数据集 (Datasets) → 刷新 SPICE (Refresh SPICE)
  • • 如果这没有解决问题,删除该数据集,然后从 Athena 重新创建。
  • • 在构建可视化图表前,确认数据集预览确实显示数据行。

– 可视化图表仍显示“无数据”

最常见的原因:

  • • Filter隐藏了所有数据
  • • 图表仍在引用旧的字段
  • • 字段类型被更改,QuickSight 无法正确映射

快速修复方法:

  1. 1. 移除所有Filter,然后只重新添加你需要的那些。
  2. 2. 将字段重新添加到图表中(重新拖拽它们)。
  3. 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:仪表盘搭建》

认人 网络安全文章

认人

文章总结: 该文档仅包含图片占位符及标题认人,作者署名为Khan安全团队,发布时间为2026年1月7日,地点在海南。文档缺失正文内容,无任何技术细节、安全观点或
评论:0   参与:  0