文章总结: 本文介绍基于AWSSecurityHub和Config搭建迷你CSPM实验室。通过模拟企业级管理账户与委托管理员架构,演示了开启安全标准、创建故意配置错误及导出检测结果的全流程。文章涵盖故障排查与资源清理,旨在通过实战项目帮助读者掌握云安全监控与IAM治理技能,提升实际操作能力。 综合评分: 89 文章分类: 云安全,安全建设,安全运营
面向JD学习AWS云安全2:迷你CSPM搭建
Dubito
云原生安全指北
2026年1月7日 08:36 江苏
注:本文翻译自 LaTerral Williams[1] 的文章《🛡️ Building a Mini Cloud Security Posture Management (CSPM) Lab Using AWS Security Hub + AWS Config》[2],可点击文末“阅读原文”按钮查看英文原文。
全文如下:
⭐ 我为什么构建这个项目
(项目 2/6:AWS Security Hub + Config 搭建迷你CSPM)
我不再孤立地学习云安全概念(仅限理论),而是将真实的职位描述作为路线图,并动手构建直接映射到雇主期望的实践项目。
这个包含6个部分的系列文章,重点关注云安全、云运维和安全工程师角色中频繁要求的技能,包括:
- • 身份加固与多因素认证 (MFA) 强制实施
- • IAM 治理与访问权限审查
- • 云资源的持续监控
- • 日志分析、审计就绪与证据收集
- • 使用 AWS 组织 + 服务控制策略 (SCP) 实现大规模防护栏
每个项目都旨在反映实际的工作职责,而不仅仅是理论知识。
📌 项目系列概览
注:其他项目见同期发布的其他文章
👉 项目 1 侧重于 AWS IAM 加固,收紧身份边界并提升认证机制的安全性。(见同期发布的其他文章)
👉 项目 2(即本项目)扩展到 Cloud Security Posture Management (CSPM,云安全态势管理),使用 AWS Security Hub + AWS Config 来检测错误配置、执行安全标准,并模拟企业多账户安全架构。
👉 项目 3: 使用 GuardDuty + CloudTrail 实现类似 CASB 的监控,专注于异常、委托管理员和安全威胁模拟
👉 项目 4: 使用 AWS Config 进行漂移检测,包括托管规则、EventBridge 路由、标签和可选的修复
👉 项目 5: 使用 Athena + QuickSight 进行日志分析与仪表板构建,将原始 CloudTrail 日志转化为可操作的安全洞察
👉 项目 6:Terraform 安全模块,使用基础设施即代码(Infrastructure as Code,IaC)构建安全的 AWS 基线
🔐 为何这种递进关系至关重要
现代云安全团队采用分层的方法来处理安全:
身份优先 → 其次为安全态势 → 再次为威胁检测。
一份实践性、对新手友好的指南,用于在 AWS 中设置 CSPM。本指南采用真实的企业部署模式,包含 AWS 组织 + 委托管理员、有意设置的错误配置、CLI 导出、故障排查以及最终的清理计划。
一、概述:我们将构建什么
在本实验中,你将使用以下服务构建一个迷你版 CSPM:
- • AWS Security Hub CSPM
- • AWS Config
- • 带有委托管理员的AWS 组织
你将完成以下步骤:
- • 搭建一个贴近真实的企业级架构(管理账户 + 安全账户)。
- • 创建有意为之的错误配置(例如一个公开的 S3 存储桶和一个开放的安全组)。
- • 让 Security Hub CSPM 检测到这些配置。
- • 使用 AWS CLI / CloudShell 导出检测结果。
- • 实践修复操作,然后清理所有资源以控制成本。
二、架构:CSPM 在真实世界如何运作
在生产环境中,CSPM 很少与承载工作负载的账户运行在同一个账户内。
通常你会看到如下架构:
-
• 管理账户
-
• 拥有 AWS 组织
-
• 在组织级别启用 Security Hub + Config 等服务
-
• 指派一个 委托管理员
-
• 委托管理员账户(安全/审计账户)
-
• 运行 Security Hub CSPM
-
• 聚合来自所有成员账户的检测结果
-
• 查看整体安全态势
-
• 推动整个组织内的修复工作
我们将要遵循的,正是这种模式。
三、前提条件
你需要准备:
-
• 一个已创建的 AWS 组织(或有权限创建一个)。
-
• 创建新的成员账户的权限。
-
• 对以下内容有基本了解:
-
• IAM 用户 / 角色
-
• S3 存储桶
-
• EC2 安全组
-
• 满足以下任一条件:
-
• 使用 AWS CloudShell(推荐),或
-
• 在本地机器上安装 AWS CLI。
本实验假设在个人/沙箱环境中进行,并非生产环境。
四、步骤一:准备 AWS 组织
- 1. 在管理账户中,打开 AWS 组织。
- 2. 如果 Organizations 尚未启用,请启用它。
- 3. (可选但建议)创建一个简单的组织结构:
Root
└── Security OU
└── cspm-admin-account
我们稍后会将委托管理员账户放入安全组织单元 (Security OU) 中。
五、步骤二:创建并访问委托管理员账户
5.1 创建一个新的成员账户
在管理账户中操作:
- 1. 进入 组织 → 账户 → 添加 AWS 账户 → 创建 AWS 账户。
- 2. 填写示例信息:
Account name: cspm-admin-account
Email: [email protected]
- 3. 如果你创建了安全组织单元 (Security OU),请将其放入其中。
这个新账户将成为 Security Hub 委托管理员(Security Hub delegated administrator)。
5.2 指定委托管理员
仍在管理账户中操作:
- 1. 打开 Security Hub。
- 2. 进入 账户→设置。
- 3. 选择 指定委托管理员。
- 4. 选择
cspm-admin-account。
现在,安全将把该账户视为整个组织的 CSPM 核心。
5.3 切换到委托管理员账户的角色
通常不会直接以 root 用户身份登录成员账户。
取而代之的是使用切换角色功能。
- 1. 使用一个 IAM 管理员用户(非 root 用户)登录管理账户。
- 2. 在右上角,选择你的用户名 → 切换角色。
- 3. 输入以下信息:
- • 账户 ID:
cspm-admin-account的账户 ID - • 角色:
OrganizationAccountAccessRole
- 4. (可选)为角色设置一个显示名称和颜色(例如,蓝色的
CSPM-Admin)。
现在,你已在委托管理员账户内部以完整的管理员权限进行操作。
六、步骤三:在整个组织中启用 AWS Config
AWS Config 记录配置历史并将数据提供给 Security Hub。
在管理账户中操作:
- 1. 进入 AWS Config → 设置 / 开始。
- 2. 资源配置记录:
- • 选择 Record all resources supported in this region(记录此区域支持的所有资源)。
- 3. 用于配置历史记录和快照的 S3 存储桶:
-
• 创建或选择一个存储桶(本实验使用默认设置即可):
-
• 禁用 ACL
-
• 关闭版本控制
-
• 开启 SSE-S3 加密
-
• 启用存储桶密钥
- 4. 跳过 SNS 通知,以避免项目产生不必要的告警噪音。
- 5. 保存设置,并确保记录功能已开启。
💡 在更大的环境中,你可能会出于成本考虑限定记录特定类型的资源,但对于迷你 CSPM 实验来说,记录所有资源能让你获得更真实的体验。
七、步骤四:启用 AWS Security Hub CSPM
仍在管理账户中操作:
- 1. 打开 安全中心(Security Hub)。
- 2. 选择 开始→配置安全中心 CSPM。
- 3. 系统会要求你提供:
- • 主区域(选择你将主要工作的区域)。
- • AWS 账户编号(输入管理账户的 12 位 ID)。
- 4. 接受提示以创建/更新委托策略。
启用后,Security Hub CSPM 将自动开启以下安全标准:
- • AWS 基础安全最佳实践 v1.0.0
- • CIS AWS 基础基线测试 v1.2.0
现在你拥有了一个组织级别的 CSPM 引擎,并以 cspm-admin-account 作为委托管理员。
八、步骤五:验证 CSPM 是否正常工作(委托管理员视图)
切换角色回到 cspm-admin-account(委托管理员)。
打开 安全中心(Security Hub) 并检查:
-
• 仪表盘(Dashboard) – 你应该看到:
-
• 控制项数量
-
• 随时间变化的检测结果
-
• 威胁/暴露/资源的细分统计
-
• 安全标准 – 确认:
-
•
AWS Foundational Security Best Practices(AWS 基础安全最佳实践) v1.0.0显示为已启用。 -
•
CIS AWS Foundations Benchmark(CIS AWS 基础基线测试) v1.2.0显示为已启用。 -
• 设置 → 账户 – 应显示:
-
• “This account is the delegated administrator for your organization.”(此账户是您组织的委托管理员。)
如果所有内容看起来都正常,那么 CSPM 就正式上线了。🎉
九、步骤六:创建有意的错误配置
现在开始有趣的部分:我们将在委托管理员账户中有意创建一些错误配置,以便 Security Hub 能够向我们发出告警。
⚠️ 请仅在沙箱环境中进行此操作。
切勿在生产环境中故意制造安全漏洞。
9.1 错误配置 #1 – 公开的 S3 存储桶
- 1. 在 S3 中,选择 创建存储桶。
- 2. 命名,例如:
cspm-test-bucket-001。 - 3. 区域:选择与 Security Hub 主区域相同的区域。
- 4. 在此存储桶的“阻止公共访问(Block Public Access)”设置中:
- • 取消勾选 阻止所有公共访问。
- • 确认弹出的风险警告。
- 5. (可选,但更明显)添加一个允许公开读取的存储桶策略。
Security Hub 最终应触发类似以下内容的检测结果:
“Amazon S3 Block Public Access was disabled for the S3 bucket cspm-test-bucket-001(S3 存储桶 cspm-test-bucket-001 的 Amazon S3 阻止公有访问功能已被禁用)”
你甚至可以在检测结果中添加一个注释,例如:
Will triage and disable public access.(将进行排查并禁用公有访问。)
9.2 错误配置 #2 – 开放的安全组
- 1. 进入 EC2 → 安全组 → 创建安全组。
- 2. 名称:
cspm-open-ssh-test。 - 3. 入站规则:
- • 类型:SSH
- • 端口:
22 - • 来源:
0.0.0.0/0(任何位置)
- 4. 保存。
Security Hub 将通过一个与 EC2 相关的控制项来标记此问题(例如,”Security groups should not allow unrestricted SSH access”(安全组不应允许不受限制的 SSH 访问))。
9.3 错误配置 #3 – Root 账户使用(可能已被标记)
如果你最近曾使用 Root 账户登录或执行操作,安全可能已经显示了类似以下的检测结果:
- •
"The API ConsoleLogin was invoked using root credentials."(ConsoleLogin API 使用了 Root 凭证调用。) - •
"The API DescribeRegions was invoked using root credentials."(DescribeRegions API 使用了 Root 凭证调用。)
这些都是很好的例子,展示了 CSPM 不仅监控网络或 S3 的错误配置,还会关注不良的身份安全实践。
十、步骤七:查看并导出检测结果
10.1 在控制台中查看检测结果
在委托管理员账户中操作:
- 1. Security Hub → 发现(Findings)
- 2. 使用过滤器,例如:
- • Product name(产品名称):
Security Hub - • Severity label(严重性标签):
LOW、MEDIUM或HIGH
- 3. 点击某个检测结果查看详情:
- • 标题与描述
- • 资源(例如,S3 存储桶 ARN)
- • 严重性
- • 修复建议(通常链接到 AWS 文档)
- • 备注/评论(你可以添加自己的注释)
仪表盘(Dashboard)也会清晰地展示:
- • 威胁
- • 暴露
- • 资源数量
- • 按区域划分的检测结果 及严重性细分
示例片段:
10.2 使用 AWS CLI(CloudShell)导出检测结果
在本项目中,我们将使用 AWS CloudShell,这样就不必在本地存储凭据。
- 1. 在仍处于委托管理员账户时,从控制台打开 CloudShell。
- 2. 验证你的身份:
aws sts get-caller-identity
- 3. 将检测结果导出到 JSON 文件:
aws securityhub get-findings --region us-east-1 --output json > securityhub-findings.json
- 4. 列出该文件:
ls -l securityhub-findings.json
10.3 简化 JSON 示例
以下是你会看到的类似安全、简化的代码片段:
{
"Findings": [
{
"Title": "Amazon S3 Block Public Access was disabled",
"Description": "Block Public Access settings were disabled for bucket cspm-test-bucket-001.",
"Severity": { "Label": "LOW" },
"Resources": [
{
"Id": "arn:aws:s3:::cspm-test-bucket-001",
"Type": "AwsS3Bucket"
}
]
}
]
}
在实际环境中,这个 JSON 数据可以输入到 SIEM 系统、仪表盘或自动化工作流中。
十一、故障排查(我遇到的实际错误及解决方法)
在构建此项目时,我遇到了几个非常实际的问题。
以下是这些错误的含义以及解决方法。
🔧 “The delegated administration for SecurityHub CSPM was not fully configured…”(SecurityHub CSPM 的委托管理未完全配置…)
遇到的其他类似错误包括:
- •
"...is already a member under another account for these regions..."(…在这些区域已是另一个账户下的成员…) - •
"You specified an account that doesn't exist..."(你指定的账户不存在…)
原因: 旧的 Security Hub 组织配置或先前项目遗留的委托管理员元数据。
解决方法: 在管理账户中操作:
- • 移除 Security Hub 现有的任何委托管理员。
- • 在 组织 → 服务 下,禁用 Security Hub 的信任访问。
- • 重新运行 CSPM 设置向导,并指定新的
cspm-admin-account作为委托管理员。
🔧 “You cannot register the management account as delegated administrator”(您不能将管理账户注册为委托管理员)
原因: 根据设计,管理账户不能同时作为 CSPM 的委托管理员。
解决方法:
- • 创建一个独立的成员账户(
cspm-admin-account)。 - • 使用该账户作为委托管理员。
经验教训:这个项目无意中促使我采用了正确的企业模式。😄
🔧 CLI 错误:服务控制策略 (SCP) 中的显式拒绝
示例:
AccessDeniedException: ... not authorized to perform: securityhub:GetFindings ...
with an explicit deny in a service control policy
原因: 附加在Root或组织单元OU级别的某个服务控制策略显式拒绝了 Security Hub 操作,即使我的 IAM 用户本身拥有权限。
解决方法: 在管理账户中操作:
-
• 审查附加到组织单元/账户的服务控制策略。
-
• 选择以下任一方案:
-
• 从委托管理员账户中移除限制性的服务控制策略,或
-
• 添加一个例外条件:
"Condition": {
"StringNotEquals": {
"aws:PrincipalAccount": "DELEGATED_ADMIN_ACCOUNT_ID"
}
}
经验教训:服务控制策略的优先级高于 IAM 策略。如果服务控制策略说“不行”,其他任何授权都无法说“可以”。
🔧 “切换角色” 选项缺失
原因: 我使用的是root 用户身份登录,而 root 用户没有”切换角色”的选项。
解决方法:
- • 在管理账户中创建一个 IAM 管理员用户。
- • 改为使用该 IAM 用户登录。
- • 右上角会出现切换角色菜单。
十二、生产环境中应避免的操作(但在本实验中可行)
为了使本实验简单明了,我有意违反了少数几项规则。
这些做法在此处是可行的,但你不应将它们复制到真实环境中。
❌ 为 CSPM 管理员用户使用长期有效的访问密钥
为了测试 CLI,我创建了一个 IAM 用户及其访问密钥。
在生产环境中,你应该:
- • 使用 AWS IAM Identity Center (SSO)
- • 或者使用 STS AssumeRole 获取短期凭证
- • 或者坚持使用 CloudShell,它会提供绑定到你控制台角色的临时凭证。
❌ 直接在安全账户中创建错误配置
在企业中,委托管理员账户通常是严格锁定的,并不承载工作负载。
为了学习方便,我在其中创建了测试用的 S3 存储桶和安全组。
在生产环境中,应在独立的测试账户中进行此类测试。
❌ 禁用 S3 阻止公有访问
我们为了生成检测结果而临时禁用了此功能。
在真实环境中,你通常需要:
- • 账户级别的阻止公有访问 开启
- • 存储桶级别的阻止公有访问 开启
- • 严格的存储桶策略和 IAM 最小权限原则
十三、清理步骤
为了避免意外账单并保持组织整洁,请在完成后执行以下步骤。
13.1 禁用 Security Hub CSPM(委托管理员账户)
- 1. 在
cspm-admin-account中,进入 Security Hub。 - 2. 在 Security standards 下,禁用所有已启用的安全标准(FSBP, CIS)。
- 3. 在 Settings 中,为该区域完全禁用 Security Hub。
13.2 禁用 Security Hub 组织集成(管理账户)
- 1. 在管理账户中,打开 AWS 组织 → 服务。
- 2. 选择 Security Hub。
- 3. 选择 Disable trusted access(禁用信任访问)。
你也可以选择性地移除 Security Hub 的 cspm-admin-account 委托管理员身份。
13.3 停止 AWS Config 记录
- 1. 在管理账户中,打开 AWS Config。
- 2. 进入 Settings。
- 3. 停止 configuration recorder(配置记录器)。
如果你为实验创建了额外的 Config 规则,也请一并删除。
13.4 清理 S3 存储桶
在 S3 中:
-
• 清空并删除:
-
• Config 日志存储桶(如果你创建了专用的)。
-
• 测试用的错误配置存储桶(例如
cspm-test-bucket-001等)。
13.5 删除测试安全组
在 EC2 中:
- • 删除
cspm-open-ssh-test以及任何其他仅为实验创建的安全组。
13.6 删除 IAM 测试用户和访问密钥
在委托管理员账户中:
- • 删除任何仅为实验创建的 IAM 用户(例如
cspm-cli-access)。 - • 删除所有相关的访问密钥。
这一点很重要,以防旧的凭据残留。
13.7 (可选)移除委托管理员指派
如果这纯粹是一次性实验:
- • 在管理账户中,打开 Security Hub → 设置 → 账户。
- • 移除
cspm-admin-account的委托管理员身份。
你可以保留该账户以备将来的安全实验,或者为了减少成本和冗余而关闭它。
十四、最终回顾
完成本实验后,你已经:
- • 使用 AWS 原生工具构建了一个迷你版 CSPM。
- • 遵循了包含管理账户和委托管理员的真实企业模式。
- • 在组织级别启用了 AWS Config 和 Security Hub CSPM。
- • 创建并修复了有意的错误配置。
- • 通过 AWS CLI / CloudShell 导出了检测结果。
- • 处理了 SCP、委托管理员错误和角色切换等问题。
- • 清理了资源以控制成本(并减少攻击面)。
在此基础上,接下来的进阶步骤可以包括:
- • 使用 Lambda 或 Systems Manager Automation(系统管理自动化)添加自动修复功能。
- • 将检测结果转发到 SIEM 或日志平台。
- • 将其与 GuardDuty、IAM Access Analyzer 和 Config Conformance Packs 结合使用。
引用链接
[1] LaTerral Williams: https://linkedin.com/in/ldwit
[2] 《🛡️ Building a Mini Cloud Security Posture Management (CSPM) Lab Using AWS Security Hub + AWS Config》: https://dev.to/ldwit/building-a-mini-cloud-security-posture-management-cspm-lab-using-aws-security-hub-aws-config-3c8o
交流群
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云原生安全指北 Dubito《面向JD学习AWS云安全2:迷你CSPM搭建》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








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