首页 > 解决方案 > AWS S3 默认加密可以使用另一个账户拥有的 KMS 密钥吗?

问题描述

我想使用相对较新的 S3 默认加密属性来确保写入 S3 存储桶中特定前缀的所有对象都被加密。在这种情况下,我需要能够将不同 AWS 账户拥有的 KMS 密钥指定为默认密钥。这可能吗?如果是这样:

标签: amazon-s3aws-kms

解决方案


是的,这是可能的。对于以下步骤,我们假设 S3 存储桶位于账户 A 中,由您控制,KMS 密钥位于账户 B 中,由您的客户控制,并且将对象上传到 S3 的 API 调用由 IAM 调用者进行在帐户A中指定(这是我对您问题的理解,如果我错了,请纠正我)。脚步:

账户 B:

  • 您的客户将像往常一样创建 KMS 客户主密钥。唯一需要注意的是,在创建过程中(或创建密钥之后),Key Users需要包含外部 AWS 账户(账户 A)的权限。要在创建密钥后在控制台上执行此操作,只需选择密钥,转到Key Users,External accounts部分,单击Add external account,粘贴账户 A 中的 12 位 AWS 账户 ID 并保存即可。结果将类似于arn:aws:iam::ACCOUNT_ID:root. 这使账户 A 的管理员可以访问密钥,并且他们可以为账户 A 中定义的用户/角色授予权限。记下 KMS 密钥 ARN,下一步将需要它。

账户 A:

  • 您可以将默认 S3 存储桶加密定义为AWS-KMS,选择Custom KMS ARN,然后粘贴账户 B 中创建的 KMS 密钥中的 ARN。根据您所写的,这并不是您想要的,因此下一步是:
  • 您可以在上传操作期间为每个对象定义加密密钥。这对于控制台来说是微不足道的(与上述步骤相同);它也可以使用任何 API 或 SDK。有关更多详细信息,请参阅此链接,特别是“服务器端加密特定请求标头”。

最后一步:

  • 您想将密钥的使用锁定为仅 IAM 角色/用户进行上传,因此,请确保将 IAM 策略附加到该角色/用户授予访问权限。该资源将是 KMS 密钥的 ARN。

如果您的客户想要“锁定”数据的使用,他们需要做的就是暂时禁用密钥(使用 KMS API 或 AWS 控制台),和/或安排删除密钥(但这不可能被撤消)。


推荐阅读