代码之家  ›  专栏  ›  技术社区  ›  Mike Kantor

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

  •  3
  • Mike Kantor  · 技术社区  · 6 年前

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

    • 如何指定密钥(不过,我最初尝试的是控制台 地形是最终目标),以及

    • 给AWS S3足够吗 是否允许使用外资KMS密钥加密?还是 角色上载文件还需要权限?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Viccari    6 年前

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

    账户B:

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

    账户A:

    • 您可以将默认的S3 bucket加密定义为 AWS-KMS ,选择 Custom KMS ARN ,然后从在帐户B中创建的KMS密钥粘贴ARN。根据您所写的内容,这并不完全是您想要的,因此下一步是:
    • 您可以在上载操作期间为每个对象定义加密密钥。这在控制台上是微不足道的(与上面相同的步骤);使用任何API或SDK也是可行的。见 this link ,特别是“服务器端加密特定请求头”,了解更多详细信息。

    最后一步:

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

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