使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问

Posted

技术标签:

【中文标题】使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问【英文标题】:cross account access for decrypt object with default aws/S3 KMS key 【发布时间】:2021-11-29 21:54:09 【问题描述】:

在我的账户 A 中,我有 S3 存储桶,其中对象被加密默认 AWS 托管密钥 aws/s3。

我想从帐户 B lambda 中读取这些对象。但在账户 A 中,对象使用 AWS 托管密钥 aws/s3 加密,我无法在此处修改 KMS 密钥策略。

我尝试在帐户 A 中创建一个角色,该角色具有所有 KMS 和 S3 权限,并信任帐户 B 中的角色。然后我从帐户 B 担任 A 中的这个角色。但仍然得到

Access denied error in GetObject

我可以在这里做什么来从帐户 A 中读取对象。请指导。

帐户 A 中的角色

statement

   Action: kms:*
   Resource : "*"
   Effect: allow


  Action: S3:*
   Resource : 
      arn:aws:s3:::my-s3
      arn:aws:s3:::my-s3/*
   Effect: allow

【问题讨论】:

你能展示一下这个角色吗? @Marcin 添加了角色。请忽略语法错误 密钥策略是否允许该新角色? 【参考方案1】:

aws/s3 是一个AWS managed key。正如docs 解释的那样,您不能将它们用于跨帐户访问。

由于无法更新 AWS 托管的 KMS 密钥策略,因此也无法为这些密钥策略授予跨账户权限。此外,使用 AWS 托管 KMS 密钥加密的对象其他 AWS 账户无法访问

您必须使用customer managed keys (CMK) 进行跨帐户访问。

【讨论】:

以上是关于使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3:是 SSE-S3 信封加密吗?

KMS 加密 - 本地开发

配置用于复制加密对象的源 KMS 密钥

Cloud Function 使用 KMS 密钥解密的权限被拒绝

获取解密密文时使用的 Google KMS 密钥的版本

使用 GCP_KMS 和 BYOK 解决方案管理密钥轮换