面向JD学习AWS云安全2:迷你CSPM搭建

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

文章总结: 本文介绍基于AWSSecurityHub和Config搭建迷你CSPM实验室。通过模拟企业级管理账户与委托管理员架构,演示了开启安全标准、创建故意配置错误及导出检测结果的全流程。文章涵盖故障排查与资源清理,旨在通过实战项目帮助读者掌握云安全监控与IAM治理技能,提升实际操作能力。 综合评分: 89 文章分类: 云安全,安全建设,安全运营


cover_image

面向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. 1. 在管理账户中,打开 AWS 组织
  2. 2. 如果 Organizations 尚未启用,请启用它。
  3. 3. (可选但建议)创建一个简单的组织结构:
   Root
    └── Security OU
         └── cspm-admin-account

我们稍后会将委托管理员账户放入安全组织单元 (Security OU) 中。

五、步骤二:创建并访问委托管理员账户

5.1 创建一个新的成员账户

管理账户中操作:

  1. 1. 进入 组织 → 账户 → 添加 AWS 账户 → 创建 AWS 账户
  2. 2. 填写示例信息:
   Account name: cspm-admin-account
   Email: [email protected]
  1. 3. 如果你创建了安全组织单元 (Security OU),请将其放入其中。

这个新账户将成为 Security Hub 委托管理员(Security Hub delegated administrator)

5.2 指定委托管理员

仍在管理账户中操作:

  1. 1. 打开 Security Hub
  2. 2. 进入 账户→设置
  3. 3. 选择 指定委托管理员
  4. 4. 选择 cspm-admin-account

现在,安全将把该账户视为整个组织的 CSPM 核心

5.3 切换到委托管理员账户的角色

通常不会直接以 root 用户身份登录成员账户。

取而代之的是使用切换角色功能。

  1. 1. 使用一个 IAM 管理员用户(非 root 用户)登录管理账户。
  2. 2. 在右上角,选择你的用户名 → 切换角色
  3. 3. 输入以下信息:
  • • 账户 IDcspm-admin-account 的账户 ID
  • • 角色OrganizationAccountAccessRole
  1. 4. (可选)为角色设置一个显示名称和颜色(例如,蓝色的 CSPM-Admin)。

现在,你已在委托管理员账户内部以完整的管理员权限进行操作。

六、步骤三:在整个组织中启用 AWS Config

AWS Config 记录配置历史并将数据提供给 Security Hub。

管理账户中操作:

  1. 1. 进入 AWS Config → 设置 / 开始
  2. 2. 资源配置记录
  • • 选择 Record all resources supported in this region(记录此区域支持的所有资源)。
  1. 3. 用于配置历史记录和快照的 S3 存储桶
  • • 创建或选择一个存储桶(本实验使用默认设置即可):

  • • 禁用 ACL

  • • 关闭版本控制

  • • 开启 SSE-S3 加密

  • • 启用存储桶密钥

  1. 4. 跳过 SNS 通知,以避免项目产生不必要的告警噪音。
  2. 5. 保存设置,并确保记录功能已开启

💡 在更大的环境中,你可能会出于成本考虑限定记录特定类型的资源,但对于迷你 CSPM 实验来说,记录所有资源能让你获得更真实的体验。

七、步骤四:启用 AWS Security Hub CSPM

仍在管理账户中操作:

  1. 1. 打开 安全中心(Security Hub)
  2. 2. 选择 开始→配置安全中心 CSPM
  3. 3. 系统会要求你提供:
  • • 主区域(选择你将主要工作的区域)。
  • • AWS 账户编号(输入管理账户的 12 位 ID)。
  1. 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. 1. 在 S3 中,选择 创建存储桶
  2. 2. 命名,例如:cspm-test-bucket-001
  3. 3. 区域:选择与 Security Hub 主区域相同的区域。
  4. 4. 在此存储桶的“阻止公共访问(Block Public Access)”设置中:
  • • 取消勾选 阻止所有公共访问
  • • 确认弹出的风险警告。
  1. 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. 1. 进入 EC2 → 安全组 → 创建安全组
  2. 2. 名称:cspm-open-ssh-test
  3. 3. 入站规则:
  • • 类型:SSH
  • • 端口:22
  • • 来源:0.0.0.0/0(任何位置)
  1. 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. 1. Security Hub  → 发现(Findings)
  2. 2. 使用过滤器,例如:
  • • Product name(产品名称):Security Hub
  • • Severity label(严重性标签):LOWMEDIUM 或 HIGH
  1. 3. 点击某个检测结果查看详情:
  • • 标题与描述
  • • 资源(例如,S3 存储桶 ARN)
  • • 严重性
  • • 修复建议(通常链接到 AWS 文档)
  • • 备注/评论(你可以添加自己的注释)

仪表盘(Dashboard)也会清晰地展示:

  • • 威胁
  • • 暴露
  • • 资源数量
  • • 按区域划分的检测结果 及严重性细分

示例片段:

10.2 使用 AWS CLI(CloudShell)导出检测结果

在本项目中,我们将使用 AWS CloudShell,这样就不必在本地存储凭据。

  1. 1. 在仍处于委托管理员账户时,从控制台打开 CloudShell
  2. 2. 验证你的身份:
aws sts get-caller-identity
  1. 3. 将检测结果导出到 JSON 文件:
aws securityhub get-findings --region us-east-1 --output json > securityhub-findings.json
  1. 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. 1. 在 cspm-admin-account 中,进入 Security Hub
  2. 2. 在 Security standards 下,禁用所有已启用的安全标准(FSBP, CIS)。
  3. 3. 在 Settings 中,为该区域完全禁用 Security Hub。

13.2 禁用 Security Hub 组织集成(管理账户)

  1. 1. 在管理账户中,打开 AWS 组织 → 服务
  2. 2. 选择 Security Hub
  3. 3. 选择 Disable trusted access(禁用信任访问)。

你也可以选择性地移除 Security Hub 的 cspm-admin-account 委托管理员身份。

13.3 停止 AWS Config 记录

  1. 1. 在管理账户中,打开 AWS Config
  2. 2. 进入 Settings
  3. 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 或日志平台。
  • • 将其与 GuardDutyIAM 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搭建》

评论:0   参与:  0