AWS S3默认加密可以使用其他帐户拥有的KMS密钥吗?

时间:2018-06-19 04:17:47

标签: amazon-s3 aws-kms

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

  • 如何指定密钥(我最初尝试使用控制台 Terraform是最终目标),

  • 提供AWS S3就足够了 是否允许使用外资KMS密钥进行加密?或者是 上传文件的角色还需要权限吗?

1 个答案:

答案 0 :(得分:3)

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

帐户B:

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

帐户A:

  • 您可以将默认的S3存储桶加密定义为AWS-KMS,选择Custom KMS ARN,然后从帐户B中创建的KMS密钥中粘贴ARN。根据您的编写,这与您所写的不完全相同。想要,所以下一步是:
  • 您可以在上传操作期间为每个对象定义加密密钥。从控制台来看这很简单(与上述步骤相同);也可以使用任何API或SDK进行操作。有关更多详细信息,请参见this link,特别是“特定于服务器端加密的请求标头”。

最后一步:

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

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