AWS Control Tower Guardrail - 防止使用加密创建 S3 存储桶

AWS Control Tower Guardrail - Prevents S3 Bucket being created with encryption

我们已经应用了这篇文章中提到的护栏,AWS Preventive S3 Guardrails。 1. Unfortunately, we are not getting the anticipated outcome. We applied the Disallow Changes to Encryption Configuration for Amazon S3 Buckets 2.

SCP 对 s3:PutEncryptionConfiguration 有一个拒绝,条件是 arn:aws:iam::*:role/AWSControlTowerExecution 角色除外。

问题是任何人都可以创建 S3 存储桶,这是可以接受的。但是,当在控制台中或通过 CloudFormation 创建存储桶并尝试指定加密 SSE 或 KMS 时,会生成错误并且创建存储桶时未加密。

理想情况下,我们需要让任何人都能够创建 S3 存储桶并启用加密。我们希望这个 SCP 能做的是防止在应用到存储桶后删除加密。

我们预计文章中提到的其他护栏会出现类似问题:

禁止更改所有 Amazon S3 存储桶的加密配置[以前:为日志存档启用静态加密] 禁止更改所有 Amazon S3 存储桶的日志记录配置 [以前:为日志存档启用访问日志记录] 禁止更改所有 Amazon S3 存储桶的存储桶策略 [以前:禁止对日志存档进行策略更改] 禁止更改所有 Amazon S3 存储桶的生命周期配置[以前:为日志存档设置保留策略]

有人遇到过这个问题吗?允许使用所需的加密、日志记录、存储桶策略和生命周期创建存储桶并在创建存储桶后禁止删除或更改的最佳实现方式是什么?

恐怕 scp 不能提供您需要的灵活性,只是因为您需要的条件键不存在于 api 调用中。没有政策说“允许 createbucket,条件是它已启用加密”。

我曾在不同的平台团队为企业实施这些类型的控制,并多次遇到这些限制。基本上有三种策略:

  1. 侦探合规
  2. 纠正合规性
  3. 预防性合规

首先确保您了解内容的配置方式。您可以为此使用 aws config 规则。肯定有规则检查 s3 存储桶的加密设置。确保在您的安全帐户中使用 aws config 聚合器集中这些规则的结果。检测后,您可以手动跟进检测到的错误配置(或在 运行 大规模时自动执行此操作)。

如果您也想纠正错误,可以使用 aws config 自动修复操作。也有各种开源工具可以帮助您解决这个问题。一个经常使用的是带有 c7n-org 插件的 cloud custodian。也有许多商业产品存在,但非常昂贵。

使用 scp 或 iam 策略,您可以防止某人执行某些操作,这比在错误配置发生后进行更正风险要低一些。然而,它也非常不灵活,策略可能会很快变得复杂,而且它也不会告诉用户为什么他不能做某事。通常,scp 仅用于非常简单的任务(例如,可能不会创建任何 iam 用户)或阻止外部或某些区域的操作。

我会选择确保您首先正确检测到东西,然后看看您是否可以纠正或阻止它。

编辑: 如果您有只使用 ci/cd 和基础设施作为代码的成熟团队,您还可以确保在管道构建阶段使用 cfn-guard 等工具实施安全控制。如果他们的模板不符合标准,构建就会失败。

Edit2:回到您的问题:对于某些操作,如果有单独的 api 用于禁用诸如 'DisableEncryption' 操作之类的东西,则可以阻止使用 scp。然而,对于大多数操作来说,它是一个类似于 PutEncryptionSetting 的操作,您无法真正判断它是启用还是禁用。