Amazon SCS-C02: 治理、配置与自动化 — 学习指南

属于 AWS Security Specialty SCS-C02 — 学习指南. 使用经过验证的答案练习: Amazon 考试中心, 或参加限时模拟考试: ExamRoll.io.

服务控制策略与组织级护栏

服务控制策略(Service Control Policies)构成了 AWS Organization 中任何主体(principal)所能做的最外层边界。SCP 不是 IAM 策略——它不授予任何权限,只定义了 OU 下或整个组织内账户可用的最大权限。如果 SCP 拒绝了某个操作,那么 IAM 策略、资源策略或权限边界中的 Allow 将完全无效。正是这种不对称性,使得 SCP 成为实施组织级别护栏的正确工具,例如:区域限制、禁用服务、保护集中管理的 IAM 角色以及在资源创建时强制加密。

一个典型的、拒绝创建未加密 DynamoDB 表和 S3 存储桶的 SCP 如下所示:

Version: "2012-10-17"
Statement:
  - Sid: DenyUnencryptedS3
    Effect: Deny
    Action: s3:CreateBucket
    Resource: "*"
    Condition:
      StringNotEquals:
        s3:x-amz-server-side-encryption-aws-kms-key-id: !Ref CmkArn
  - Sid: DenyUnencryptedDdb
    Effect: Deny
    Action: dynamodb:CreateTable
    Resource: "*"
    Condition:
      "Null":
        dynamodb:SSESpecificationEnabled: "true"

一个常见的陷阱是试图通过附加在每个账户中的 IAM 策略来强制执行“组织内任何人都不能使用 us-east-2”或“任何人都不能禁用 CloudTrail”。即使有权限边界和身份策略的配合,本地管理员也可以为自己创建一个绕过方法。只有应用在根(root)或 OU 上的 SCP 才是可靠的,因为它甚至可以约束成员账户的根用户(除少数不可限制的操作外)。

SCP 也应该用于保护紧急访问(break-glass)和委托管理角色:对任何针对 OrganizationAccountAccessRoleSecurityAudit 等角色的操作添加明确的 Deny,除非调用者的 aws:PrincipalArn 匹配一个已批准的列表。

AWS Config、合规包与多账户强制执行

AWS Config 提供了持续评估层,它通过检测(观察和报告偏差)功能,与 SCP(预防)相辅相成。合规包(conformance pack)是一组 Config 规则的集合——包括像 s3-bucket-server-side-encryption-enabled 这样的托管规则,以及由 Lambda 或 Guard 支持的自定义规则——它被打包成一个单一的可部署 YAML 文件,并带有可选的修复操作。

要在整个组织范围内推广一个标准基线,需要结合使用两种机制:

委托管理员 + 聚合器模式非常重要:它让安全团队能在一个地方查看所有账户的合规性,同时仍然允许应用团队在本地添加自己的规则。直接从管理账户部署相同的规则虽然可行,但违反了最小权限原则,并会阻碍职责分离的审计。

CloudFormation Guard、StackSets 与 Service Catalog

预防应左移。CloudFormation Guard (cfn-guard) 是一个策略即代码(policy-as-code)引擎,它在部署前解析 CloudFormation 模板(或任何 JSON/YAML),并根据声明性规则对其进行评估。一条 Guard 规则如下所示:

rule s3_encrypted {
  Resources.*[ Type == "AWS::S3::Bucket" ] {
    Properties.BucketEncryption exists
    Properties.BucketEncryption.ServerSideEncryptionConfiguration[*] {
      ServerSideEncryptionByDefault.SSEAlgorithm == "aws:kms"
    }
  }
}

将其集成到 CI/CD 阶段——通常是作为一个运行 cfn-guard validate -r rules.guard -d template.yaml 的 Docker 容器步骤——可以在任何不合规资源被创建之前使流水线失败。一旦发生违规,流水线会发布到一个 SNS 主题,安全团队订阅该主题,从而在不成为手动审批瓶颈的情况下获得可见性。仅仅依靠 StackSets 或 CloudFormation 变更集审查来通知安全团队是一个陷阱:这两个服务都不会发出针对单个资源的合规性结果,而且当堆栈创建完成时,资源已经存在于账户中了。

Service Catalog 在“最后一公里”对 Guard 进行了补充。平台团队不让开发人员编写任意的 CloudFormation,而是将经过审查的产品(VPC 基线、RDS 模式、EKS 集群)作为 Service Catalog 产品组合发布,并通过 AWS RAM 在账户间共享。开发人员使用受限的参数来启动它们,并通过一个启动约束 IAM 角色来预置资源,该角色拥有开发人员个人所不具备的更高权限。这提供了一个可审计的、自助服务的部署模型,其底层模板已经通过了 Guard 的检查。

StackSets 本身需要正确的配置:从组织管理账户部署时,使用 SERVICE_MANAGED 权限模型;在 Organizations 中为 CloudFormation 启用信任访问;并仔细配置执行角色。AdministrationRoleARN/ExecutionRoleName 对(在自托管模式下)或服务相关角色(在服务管理模式下)必须允许将 iam:PassRole 权限授予实际创建资源的 CloudFormation 服务角色。如果忘记附加 CloudFormation 服务角色,而是依赖于部署用户的凭证,会导致间歇性的 iam:PassRole AccessDenied 错误——这是 StackSet 操作失败的一个常见原因。正确的模式是为每个堆栈配备一个专用的服务角色,该角色仅拥有创建已声明资源类型所需的权限。

自动化修复管道

当 Config 检测到不合规时,对于任何可以安全地自我修复的问题,都必须自动进行修复。事件流如下:

例如,如果 s3-bucket-public-read-prohibited 规则被触发,一个名为 AWS-DisableS3BucketPublicReadWrite 的 SSM Automation 运行手册会对其进行修复。对于更复杂的流程——比如,一个 KMS 密钥策略发生偏差,必须在通知所属团队的同时进行校准——Step Functions 会协调以下操作:读取当前策略,与黄金版本进行比较,调用 kms:PutKeyPolicy,然后发布到 SNS。将修复逻辑存储在 Step Functions 中而不是单个 Lambda 函数中,可以为每个步骤提供可观察性,并实现清晰的重试语义。

IAM Access Analyzer 与策略验证

IAM Access Analyzer 回答两个截然不同的问题。首先,外部访问分析器可以识别其策略向已定义信任区域(账户或组织)之外的委托人授予访问权限的资源(S3、KMS、IAM 角色、Lambda、SQS、Secrets Manager)。请从委托管理员账户在组织级别启用分析器,以便集中聚合检测结果。

其次,Access Analyzer 的策略验证策略生成功能在编写策略时运行。aws accessanalyzer validate-policy 会返回安全警告、错误和建议(例如,标记出过于宽泛的 Resource: "*" 与敏感操作的组合)。应将其集成到与 cfn-guard 相同的 CI/CD 阶段,以便在部署前检查嵌入在 CloudFormation 中的 IAM 策略。Access Analyzer 还可以根据 CloudTrail 历史记录生成最小权限策略,用角色实际使用过的确切操作替换通配符策略——这是对“强制实施数据访问的最小权限”这一要求的机械化解答,同时配合使用范围受限的 KMS 密钥策略,该策略通过 kms:ViaService 条件,仅在调用服务是 S3、DynamoDB、Lambda 或 EKS 时才允许 kms:Decrypt 操作。

实践问题:用例场景

场景: Meridian Financial 运行一个多账户的 AWS Organization,其中包括生产、预发布、沙箱和一个集中式安全账户。他们在沙箱中使用 CloudFormation 模板和开发者驱动的模板混合部署工作负载;所有权在团队间是联合的,并且他们必须满足数据加密和最小权限访问的内部治理要求。

挑战: 沙箱中的开发人员意外创建了公共 S3 存储桶和权限过大的 IAM 策略,这些问题传播到了其他账户,并且安全团队在整个 Organization 中缺乏一致的、自动化的强制执行和模板验证机制。

推荐方法:

  1. 创建组织级别的服务控制策略 (SCP),在 Organization 根级别拒绝 S3 公共访问、强制实施存储桶加密并限制特权 IAM 操作,以提供预防性护栏。
  2. 从集中式安全账户出发,使用 CloudFormation StackSets 将 AWS Config 聚合器和合规包部署到每个账户和区域,以持续评估 S3 公共访问、IAM 策略附加模式和加密合规性。
  3. 将 CloudFormation Guard (cfn-guard) 规则集成到 CI/CD 管道(CodePipeline/CodeBuild)中,并要求对已批准的基础设施使用 Service Catalog 产品,从而确保模板得到验证,只有合规的堆栈才能被预置。
  4. 对高优先级检测结果(自动阻止 S3 公共访问、修复过于宽泛的 IAM 策略)启用 AWS Config 自动化修复,使用 SSM Automation 文档或 Lambda 运行手册,并通过 EventBridge 触发额外的工作流。
  5. 集中运行 IAM Access Analyzer 和策略验证,将检测结果摄取到 Security Hub,并针对发现的跨账户或权限过大的策略,自动化创建工单或执行修复手册。

基本原理: 该方法结合了预防性的组织范围护栏 (SCP)、持续检测 (Config/合规包)、模板验证左移 (cfn-guard/Service Catalog) 以及利用 IAM Access Analyzer 进行自动化修复,从而强制实施最小权限,并遵循 AWS 最佳实践实现一致的多账户治理。

AWS Config:组织规则、聚合器和委托管理

AWS Config 是 AWS 上检测性合规的基础。它持续记录资源配置,并根据规则对其进行评估——这些规则可以是 AWS 托管的(例如 restricted-sshvpc-flow-logs-enabledencrypted-volumes),也可以是自定义的(由 Lambda 或 Guard 提供支持)。在企业规模下,有三个架构决策比规则本身更重要:规则如何部署、结果如何聚合以及由谁负责工具。

对于 AWS Organizations 下的多账户、多区域部署,正确的模式是通过 aws organizations register-delegated-administrator --service-principal=config-multiaccountsetup.amazonaws.com 指定一个委托管理员账户(通常是安全或审计账户,而不是管理账户)。然后从该账户使用 PutOrganizationConfigRulePutOrganizationConformancePack 将规则分发到每个成员账户和区域。如果不使用委托管理,就必须在每个账户中手动启用 Config,或者从管理账户运行所有操作——后者违反了职责分离原则,而前者在账户数量超过少数几个后就无法扩展。

组织规则推送单个规则定义;聚合器则收集由此产生的评估结果。在委托管理员账户中创建一个聚合器,其 OrganizationAggregationSource 覆盖所有账户和区域。聚合器控制面板随后可以回答诸如“200 个账户中有哪些 VPC 缺少 Flow Logs?”之类的问题,而无需进行繁琐的跨账户角色切换。请注意,聚合器是只读的:它们只呈现合规状态,本身不执行修复操作。

使用合规包实施基线

合规包将 Config 规则及其修复操作捆绑到一个 YAML 模板中。AWS 提供了映射到 PCI DSS、HIPAA、NIST 800-53 和 CIS 等框架的合规包。从委托管理员账户部署组织合规包可以针对特定的 OU——例如,对 Prod OU 应用比 Sandbox 更严格的合规包。这是在数百个账户中强制执行一致基线的最有效方法,因为只需一个 API 调用即可将规则集及其修复配置一次性传播到所有地方。

Resources:
  EncryptedVolumesRule:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName: encrypted-volumes
      Source:
        Owner: AWS
        SourceIdentifier: ENCRYPTED_VOLUMES
  EncryptedVolumesRemediation:
    Type: AWS::Config::RemediationConfiguration
    Properties:
      ConfigRuleName: encrypted-volumes
      TargetType: SSM_DOCUMENT
      TargetId: AWSConfigRemediation-EncryptS3BucketVolume
      Automatic: true
      MaximumAutomaticAttempts: 3
      RetryAttemptSeconds: 60

自动修复模式

有两种典型的修复路径,选择哪一种取决于对延迟和复杂性的要求。

Config 原生修复路径使用 AWS::Config::RemediationConfiguration,在规则报告 NON_COMPLIANT 时调用一个 SSM Automation 运行手册。AWS 提供了预构建的运行手册,例如 AWS-EnableVPCFlowLogsAWSConfigRemediation-RemoveUnrestrictedSourceIngressRulesAWSConfigRemediation-EncryptSNSTopic。这种路径是声明式的,能与合规包干净地集成,并且在可以接受几分钟延迟的情况下是理想选择。

当延迟至关重要或需要自定义编排时,则需要采用EventBridge 驱动的路径。Config 在每次状态转换时都会发出一个 Config Rules Compliance Change 事件。一条 EventBridge 规则根据 detail.newEvaluationResult.complianceType = NON_COMPLIANT 进行筛选,并以 Lambda 函数(或 Step Function,或直接以 SSM 运行手册)为目标。由于 EventBridge 在评估后几秒钟内就会触发,因此亚分钟级的修复窗口成为可能。

{
  "source": ["aws.config"],
  "detail-type": ["Config Rules Compliance Change"],
  "detail": {
    "configRuleName": ["restricted-ssh"],
    "newEvaluationResult": { "complianceType": ["NON_COMPLIANT"] }
  }
}

然后,Lambda 处理程序对违规的安全组调用 RevokeSecurityGroupIngress。无论选择哪种路径,自动化操作都必须代入一个拥有修改目标资源所需最低权限的 IAM 角色。一个常见的失败模式是,Config 规则的合规状态在 NON_COMPLIANTCOMPLIANT 之间无限翻转,因为修复运行手册因 AccessDenied 错误而失败——Config 会记录调用,但会静默地继续执行。务必检查 SSM Automation 的执行历史,并授予运行手册角色所需的特定修改权限(例如,ec2:CreateFlowLogs、用于流日志交付角色的 iam:PassRole 以及 logs:CreateLogGroup)。

Systems Manager Automation 和 Patch Manager

SSM Automation 运行手册是执行命令式修复的主力工具。它们是版本化的 YAML/JSON 文档,描述了由您指定的 IAM 角色执行的步骤——API 调用、审批、分支等。除了由 Config 触发的修复外,它们还可以运行定期的清理任务:例如轮换访问密钥、为未附加的 EBS 卷添加标签,或终止已停止超过 30 天的实例。

Patch Manager 是 SSM 的一个子系统,它使操作系统与补丁基线(一组已批准的补丁、分类和严重性筛选器)保持合规。实例通过 Patch Group 标签被分组到补丁组中;一个维护时段会针对这些实例调度 AWS-RunPatchBaseline 文档的运行。合规状态会回传到 Config 和 Security Hub,从而形成从操作系统级状态到组织级报告的闭环。

Service Catalog、CloudFormation StackSets 和预防性护栏

检测和修复是被动反应。要防止不合规,应使用预防性控制

灾难恢复:备份、模板和源代码控制

要满足 RPO/RTO 目标,需要确保数据和基础设施定义都是可恢复的。AWS Backup 集中管理跨 EBS、RDS、DynamoDB、EFS 和 FSx 的备份策略;组织备份策略在成员账户中强制执行计划,而跨区域、跨账户的副本可以防范区域丢失和账户泄露。RPO 由备份频率设定;RTO 取决于恢复机制(DynamoDB PITR 恢复只需几分钟;跨区域的 RDS 快照恢复可能需要一个小时)。

基础设施恢复依赖于存储在 CodeCommit(或其他 Git 提供商)中作为单一事实来源的 CloudFormation 模板。从版本控制的模板中重新部署 StackSet,可以在几分钟内在恢复区域重建 VPC、IAM 和应用程序堆栈。如果模板只保存在控制台中——没有代码仓库——会使 RTO 变得不可预测,因为没有可复现的工件。

陷阱分析

三个常见的误解总是导致选错答案。第一,将 Config 视为一种预防性控制:它是在 CloudTrail 记录变更之后才进行评估的,因此真正的禁令需要 SCPs。第二,在没有配置足够权限范围的 IAM 角色的情况下设置修复措施——SSM 文档存在,Config 规则也触发了,但运行手册因权限错误而静默失败。第三,从管理账户运行组织范围的服务,而不是注册一个委托管理员,这迫使每个账户都需手动启用,并阻碍了组织范围的聚合器正常工作。

实践问题:用例场景

场景: Meridian Financial 在 AWS Organizations 下运行一个多账户的 AWS 环境,拥有独立的生产、开发和安全账户。安全团队必须向内部控制部门和监管机构证明其持续符合合规要求,同时管理跨多个区域的数百个 EC2 实例、S3 存储桶和 Lambda 函数。

挑战: 最近的一次审计发现存在未打补丁的 EC2 实例、公共的 S3 存储桶,以及跨账户基线执行不一致的问题;修复过程手动且缓慢,预防性控制也未能统一应用。

推荐方法:

  1. 将安全账户指定为 AWS Config 委托管理员,并通过 CloudFormation StackSets 部署一个 AWS Config 聚合器,以收集来自所有账户和区域的配置与合规数据。
  2. 从安全账户(使用 StackSets)部署组织级别的 AWS Config 合规包,以将基线控制(S3 公共访问、加密、标签)代码化,从而确保相同的规则得到一致应用。
  3. 将 AWS Config 自动修复操作附加到高风险规则上,这些规则会调用已注册为修复运行手册的 AWS Systems Manager Automation 文档,这样违规行为就会自动触发 SSM Automation 或 Run Command 进行修复。
  4. 使用 AWS Systems Manager Patch Manager 及其 SSM 补丁基线和 State Manager 来定义补丁组并自动化跨账户的操作系统补丁工作;将补丁合规性结果反馈给 Config 聚合器。
  5. 将批准的 CloudFormation 模板发布到 AWS Service Catalog,并使用 CloudFormation StackSets 部署或更新合规的堆栈;通过 AWS Organizations Service Control Policies 强制执行预防性护栏,以阻止不允许的资源创建(例如,禁用公共 S3 存储桶的创建)。
  6. 配置 Amazon EventBridge (CloudWatch Events) 和 SNS,以便在出现不合规情况时通知安全团队,并为复杂事件触发额外的 SSM Automation 工作流。

理由: 通过 Config 聚合器和合规包集中进行检测,通过 SSM 自动化修复,并通过 Service Catalog/StackSets 和 SCPs 强制执行预防性护栏,这种方法提供了与 AWS 安全、合规和最小权限最佳实践相符的一致、可审计的控制和快速修复能力。


边缘与应用安全 · 所有领域 · 漏洞、补丁与主机安全

练习这些题目 → · 在 ExamRoll.io 上限时练习 →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

通过考试 →

浏览 Amazon →

Related guides

一体化访问

一次订阅。所有考试。

所有计划均可无限制搜索答案、进行模拟测试、获取AI解释以及访问完整的资源库 — 支持20多种语言。

每月
24.87
Just €0.83/day
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

最具价值
12个月
179.87
Just €0.49/daySave 40%
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

✓ 包含免费计划 · ✓ 随时取消 · ✓ 所有计划均解锁完整产品