企业在维护安全和治理姿态方面的重要性日益增强。作为安全管理员,您可以利用 Amazon Web ServicesAWS 来强制实施资源配置,以确保环境的安全性与可扩展性,并专注于特性访问控制。 在这里,特性限制 指的是新的 AWS 功能和配置在未经过您的明确批准时无法使用。通过特性限制,您能够在新服务和能力引入时保持对 AWS 环境的控制。 这篇博文展示了一种独特的方法,旨在为用户如 DevOps 团队提供安全边界内的灵活性,允许只有经过批准的配置才能进行资源配置。如图 1 所示,支持未来版本的配置将在明确批准之前保持受限。 如图 2 所示,资源配置强制实施解决方案RCFGE利用了 AWS CloudFormation Hooks。通过使用 Hooks,您可以在资源配置过程中运行自定义逻辑。这些是主动控制,因为您在资源创建、更新或删除之前就检查并强制实施资源配置。 只有当 CloudFormation 支持您使用的 AWS 资源,并且您实施了 服务控制策略SCP,才能确保用户无法在 CloudFormation 之外配置资源。 图 2 中的工作流程包含以下五个步骤: 为了实现可扩展的操作,您应该实现一个可重用的通用 Hook,针对所有支持的 CloudFormation 资源类型。这个 Hook 通过从外部对象存储如 Amazon Simple Storage Service (Amazon S3) 桶加载资源规范文件来强制资源配置。 这些规范文件以声明性语言定义验证规则。通过这种方式,您可以通过编辑这些声明性文件来添加和删除资源配置验证规则。当您将自定义逻辑外部化为独立的验证规则时,DevSecOps 人员可以在不影响基础设施的情况下规模管理这些规则。 如图 3 所示,解决方案经过修订以支持此方法。步骤 13 与图 2 中的流程相同: 您需要配置 Hook 架构 和 Hook 配置架构,以在更改配置之前评估您 AWS 账户中所有受支持资源的配置。此设置应涵盖创建、更新和删除操作,以帮助 Hook 防止跨堆栈不被批准的配置。 借助于 AWS CloudFormation Guard,您可以将验证规则从 Hook 外部化,如在 使用 AWS CloudFormation Guard 扩展预提交 Hooks 中所述。Guard 是一个开放源代码、通用的政策即代码PaC评估工具,用于根据自定义规则验证 CloudFormation 模板,以帮助您与组织政策保持一致。例如, CTS3PR1 规则规范 展示了一个 Guard 规则,要求 S3 桶配置其设置以阻止公共访问。这些验证规则适用于当前支持的 AWS 资源配置和功能,但它们并不限制潜在的未来属性。 您的风险模型可能促使您寻找进一步限制 AWS 资源配置的机制。正如您所见,建议的解决方案限制授权用户,使他们只能在您启用后使用新配置。建议的方法使用特性限制,因为它继续强制实施您的配置,即使 AWS 为您的资源添加了新的选项。 Guard 旨在验证所需的约束;但是为了满足特性限制的目标,您应实现验证规则,以检查资源配置是否满足由受限版本的 CloudFormation 资源架构描述的结构性约束。这些架构有助于您约束可以在环境中配置的可能资源配置,无论 AWS 引入了什么新的配置选项。 图 4 展示了使用限制资源架构模板实施验证规则的流程更新,这些模板存储在 S3 桶中。步骤 14 与图 3 中的流程相同: 限制资源架构模板是其对应原始 CloudFormation 资源架构的子集。它包含额外的约束,限制某些属性为特定值和模式,或完全排除某些属性。此外,这些模板包含占位符,您可以用运行时值填充,例如账户 ID,这些值由 Hook 在 Hook 上下文 中提供。 如图 5 所示,RCFGE CloudFormation Hook 内的流程涉及以下步骤: 如果在 S3 桶中未找到对应 CloudFormation 资源类型的限制资源架构模板,架构验证步骤将默认失败。 以下是一个 S3 桶限制架构模板的片段。在运行时,您的 Hook 会处理该模板,将占位符替换为 Hook 上下文中的相关值。在此示例中,Hook 将主题的 pattern 中的 ltaccountIDgt 占位符替换为实际账户 ID。生成的 JSON 架构不允许具体模式之外的额外属性,并限制可用于事件通知的 Amazon Simple Notification Service (Amazon SNS) 主题。 注意:在以下代码示例中,为了简洁,我们省略了一些代码,表明这些省略以三个点 表示。 json{ type object required [] additionalProperties false properties { NotificationConfiguration { ref #/definitions/NotificationConfiguration } } definitions { NotificationConfiguration { type object additionalProperties false properties { TopicConfigurations { type array uniqueItems true items { ref #/definitions/TopicConfiguration } } } } TopicConfiguration { type object additionalProperties false properties { Topic { type string pattern arnawssnsltaccountIDgt } } } }} 假设您的账户 ID 是 111122223333。账户 ID 在 Hook 上下文中被传播。 以下是一个符合前述受限架构的 S3 桶 CloudFormation 模板片段。因此,您的 Hook 允许相应的 CloudFormation 堆栈继续。 json{ AWSTemplateFormatVersion 20100909 Resources { S3Bucket { Type AWSS3Bucket Properties { BucketName validbucketsnsnotificationconfigurationtemplate NotificationConfiguration { TopicConfigurations [ { Topic arnawssnseuwest1111122223333thisismytopicandItrustit Event s3ObjectCreated } ] } } } }} 以下是一个不符合前述受限架构的 S3 桶 CloudFormation 模板片段,因为它试图为通知配置而配置另一个账户的 Amazon SNS 主题。因此,您的 Hook 导致相应的 CloudFormation 堆栈失败。 json{ AWSTemplateFormatVersion 20100909 Resources { S3Bucket { Type AWSS3Bucket Properties { BucketName invalidbucketsnsnotificationconfigurationtemplate NotificationConfiguration { TopicConfigurations [ { Topic arnawssnseuwest1444455556666thisisnotmytopic Event s3ObjectCreated } ] } } } }} 以下是一个不符合前述受限架构的 S3 桶 CloudFormation 模板片段。这一次,它通过尝试使用未被您受限架构批准的 S3 桶的新特性,违反了您的特性限制目标。因此,您的 Hook 导致相应的 CloudFormation 堆栈失败。 json{ AWSTemplateFormatVersion 20100909 Resources { S3Bucket { Type AWSS3Bucket Properties { BucketName validbucketsnsnotificationconfigurationtemplate NewFeature { property1 true property2 public } NotificationConfiguration { TopicConfigurations [ { Topic arnawssnseuwest1111122223333thisismytopicandItrustit Event s3ObjectCreated } ] } } } }} 如果安全控制本身没有得到足够的保护,它将成为安全链中的薄弱环节。例如,一台没有固定牢靠的监控摄像头物理安全控制可以被移除,从而使其失效。这一原则同样适用于您的 RCFGE 解决方案。 接下来,我们将展示如何将管理活动隔离到专用账户,并使用 SCP 作为预防控制。 通过使用多个账户组织 AWS 环境是一种最佳实践,因为这可以增强安全性、简化管理,并允许更好的资源隔离和成本跟踪。将 RCFGE 解决方案的操作和管理隔离到一个专用账户对于保障该解决方案的资源至关重要。 通过 AWS CloudFormation StackSets,您可以从单个中央管理员账户部署和管理 RCFGE 堆栈,跨多个账户和 AWS 区域。这样可以提供一致且可扩展的基础设施,同时保持集中治理。借助此功能,您可以将 RCFGE 资源部署到现有账户,并在将新账户添加到组织时自动包括它们,简化 RCFGE 管理并在环境中提供一致性。有关更多信息,请参见 使用服务管理的 StackSets 在组织中部署 CloudFormation Hooks。 图 6 展示了如何扩展这个想法,以便您在保持隔离和职责分离的同时大规模运行 RCFGE 解决方案。该解决方案涉及三个关键账户类型: 让我们逐步探讨 RCFGE 解决方案体系结构如何强制实施资源配置,如图 7 所示。 