管理员无法在 AWS KMS 中加密/解密
Posted
技术标签:
【中文标题】管理员无法在 AWS KMS 中加密/解密【英文标题】:Administrator cannot encrypt/decrypt in AWS KMS 【发布时间】:2020-03-04 15:22:47 【问题描述】:我在 AWS 中使用密钥管理服务 (KMS),目前正在设置 key policies。
我创建了两个角色 KmsUser 和 KmsAdmin,并将以下密钥策略附加到我的 CMK:
"Version": "2012-10-17",
"Statement": [
"Sid": "KMS KeyAdmin access",
"Effect": "Allow",
"Principal": "AWS": [
"arn:aws:iam::1234567890:role/KmsAdmin",
"arn:aws:iam::1234567890:user/myadmin"
],
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
,
"Sid": "KMS KeyUser access",
"Effect": "Allow",
"Principal": "AWS": [
"arn:aws:iam::1234567890:role/KmsUser"
],
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
]
问题是,现在如果我尝试将我的密钥用作 myadmin 用户(附加了 AdministratorAccess 策略),我会在 CLI 中收到错误:
$ aws kms encrypt --key-id "alias/test-key" --plaintext fileb:///tmp/plaintext.dat
An error occurred (AccessDeniedException) when calling the Encrypt operation: User: arn:aws:iam::1234567890:user/myadmin is not authorized to perform: kms:Encrypt on resource: arn:aws:kms:eu-north-1:1234567890:key/99999999-9999-9999-9999-99999999999
特别奇怪的是,IAM policy simulator 告诉我一切都应该按预期工作:
如果我手动将 myadmin 用户添加为 Key User 策略的主体,则一切正常。
【问题讨论】:
其实以上政策是针对职责分离的。密钥管理员不应该能够使用密钥加密或解密数据。所以管理员可以管理密钥,但不能访问数据。密钥用户可以加密或解密数据,但不能管理密钥。所以正确的答案是使用 KmsUser 角色来解密/加密。 【参考方案1】:您需要在您的密钥策略中添加这样的声明:
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::1234567890:root"
,
"Action": "kms:*",
"Resource": "*"
这允许帐户访问密钥,这是启用 IAM 访问密钥所必需的。
【讨论】:
成功了,谢谢。与其他 AWS 服务相比,您知道为什么 KMS 需要明确的管理员权限吗? 那么这是策略模拟器中的错误吗?还是我错过了什么? 这不是bug,模拟器只是在看你给它的数据。它不知道关键政策是什么。它甚至不知道/关心资源是否真实。 Using key policies in KMS 很好地概括了关键政策的运作方式。【参考方案2】:如果您使用AWS CDK
创建KMS 构造,请确保将trustAccountIdentities
设置为true
。 TypeScript 中的示例
const passwordEncryptionKey = new kms.Key(this, 'MyKey',
enabled: true,
trustAccountIdentities: true,
);
文档是here
【讨论】:
以上是关于管理员无法在 AWS KMS 中加密/解密的主要内容,如果未能解决你的问题,请参考以下文章