amazon-s3 - AWS S3 默认加密可以使用另一个账户拥有的 KMS 密钥吗?
问题描述
我想使用相对较新的 S3 默认加密属性来确保写入 S3 存储桶中特定前缀的所有对象都被加密。在这种情况下,我需要能够将不同 AWS 账户拥有的 KMS 密钥指定为默认密钥。这可能吗?如果是这样:
如何指定密钥(我最初尝试使用控制台,尽管 Terraform 是最终目标),以及
授予 AWS S3 使用外国拥有的 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 控制台),和/或安排删除密钥(但这不可能被撤消)。
推荐阅读
- tensorflow - 如何使用 bazel 构建 tensorflow 作为外部依赖项来支持 gpu 推理?
- javascript - 如果数据包含特定的文本,则隐藏元素?
- c++ - 在 Docker 中连接到 C++ websocketpp 服务器
- php - 如何使用laravel中的碳在给定日期从现在开始获取最新日期
- c# - Entity Framework Core - 带有反射的通用 Set 方法
- go - 是否有在环 Z/nZ 中查找 int 的乘法逆的函数?
- ag-grid - Ag-grid 抛出错误:this.gridOptionsWrapper.getNodeChildDetailsFunc 不是函数
- c# - 如何在一个视图中使用两个 IEnumerable 模型?
- deep-learning - PyTotch CIFAR-10 vs Kaggle CIFAR-10:CIFAR-10 上完全相同架构的完全不同的结果
- javascript - 时间戳转换为日期格式给我错误的日期在 JavaScript