与另一个账户共享 AWS 管理的 KMS 密钥
Sharing an AWS managed KMS key with another account
我有一个 s3 文件夹,里面有加密的对象。它使用 AWS KMS 托管密钥而非自定义密钥进行加密。我需要另一个 AWS 账户才能从此存储桶复制文件。据我所知,我无法跨帐户共享此 KMS 密钥。我也无法轻易更改此存储桶以使用自定义密钥,因为这对客户有影响。这里有什么好的解决方案吗?
我在我的两个帐户上做了一些实验。
我发现通过使用 存储桶策略 ,您只能为以下用户启用对其他帐户的访问权限:
- bucket/object 未加密
- 由 AWS 拥有的密钥管理的 AES256 加密。
但是,如果您使用 AWS 托管 CMK,则存储桶策略不适合。
相反,您可以使用 cross-account roles启用对您的存储桶和对象的访问。我验证它有效。
账户 A
在 Acc A 中(一个带有 AWS-KMS
加密的存储桶,我 创建了一个名为 kmss3bucket
:
的角色
- 信任策略 - Acc B(它将承担角色并访问对象)
- AmazonS3ReadOnlyAccess 托管策略
- AWS/S3 KMS 密钥的内联策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:us-east-1:xxxxxx:key/b811de9a-150a-4d89-8a9a-03e1b878737d"
}
]
}
帐号 B
Acc B 中的用户使用 STS 承担该角色:
aws sts assume-role --role-arn arn:aws:iam::xxxxx:role/kmss3bucket --role-session-name cross-account-s3
这将生成新的临时 aws 凭据。使用凭据,Acc B 将能够从使用 AWS-KMS.
加密的 Acc A 复制对象
我有一个 s3 文件夹,里面有加密的对象。它使用 AWS KMS 托管密钥而非自定义密钥进行加密。我需要另一个 AWS 账户才能从此存储桶复制文件。据我所知,我无法跨帐户共享此 KMS 密钥。我也无法轻易更改此存储桶以使用自定义密钥,因为这对客户有影响。这里有什么好的解决方案吗?
我在我的两个帐户上做了一些实验。
我发现通过使用 存储桶策略 ,您只能为以下用户启用对其他帐户的访问权限:
- bucket/object 未加密
- 由 AWS 拥有的密钥管理的 AES256 加密。
但是,如果您使用 AWS 托管 CMK,则存储桶策略不适合。
相反,您可以使用 cross-account roles启用对您的存储桶和对象的访问。我验证它有效。
账户 A
在 Acc A 中(一个带有 AWS-KMS
加密的存储桶,我 创建了一个名为 kmss3bucket
:
- 信任策略 - Acc B(它将承担角色并访问对象)
- AmazonS3ReadOnlyAccess 托管策略
- AWS/S3 KMS 密钥的内联策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:us-east-1:xxxxxx:key/b811de9a-150a-4d89-8a9a-03e1b878737d"
}
]
}
帐号 B
Acc B 中的用户使用 STS 承担该角色:
aws sts assume-role --role-arn arn:aws:iam::xxxxx:role/kmss3bucket --role-session-name cross-account-s3
这将生成新的临时 aws 凭据。使用凭据,Acc B 将能够从使用 AWS-KMS.
加密的 Acc A 复制对象