跨区域共享KMS密钥遇权限错误:密钥策略是否存在问题?
问题
我已按如下方式更新KMS密钥策略:
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACC_1:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Give access permission to ACC_2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACC_2:root" }, "Action": "kms:*", "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "ACC_2" }, "ArnEquals": { "kms:EncryptionContext:aws:SourceArn": "arn:aws:kms:us-east-2:ACC_2:key/*" } } } ] }
尝试访问该密钥时,出现错误提示:
Specified KMS key [arn:aws:kms:us-east-2:ACC_2:key/mrk-KEY_ID] does not exist, is not enabled or you do not have permissions to access it.
注:该密钥从us-east-1区域共享至us-east-2区域,我希望使用此共享密钥复制另一共享数据库。请问我的密钥策略是否有误?我遗漏了什么配置?
分析与解决方案
你的密钥策略存在关键问题,同时有几处配置遗漏,具体如下:
1. 加密上下文条件完全错误
当前策略中kms:EncryptionContext:aws:SourceArn的条件值设为ACC_2区域的KMS密钥ARN,但你要执行的是共享数据库复制,触发KMS调用的源资源是数据库实例,而非KMS密钥。这个条件会导致只有当加密上下文包含ACC_2的KMS密钥ARN时才允许访问,完全不符合你的场景,必须删除该条件;如果要做权限收紧,可以替换为目标数据库的ARN(例如RDS实例ARN格式:arn:aws:rds:us-east-2:ACC_2:db:*)。
2. 多区域密钥(MRK)的权限适配注意事项
错误提示中的密钥ARN是多区域密钥(MRK)的副本ARN,跨区域使用MRK需要注意:
- 虽然你当前策略的
Resource设为*,已覆盖源密钥和副本密钥,但要确保调用时使用的是正确的MRK副本ARN - 仅靠KMS密钥策略不够,ACC_2中执行数据库复制的IAM实体(用户/角色)必须同时具备访问该MRK副本的IAM权限
3. 遗漏的配置检查点
- 确认MRK副本状态:登录ACC_2的us-east-2区域,检查该MRK副本是否已启用,状态是否正常
- 补充IAM权限:给ACC_2中执行复制操作的IAM实体添加所需KMS权限(如
kms:Encrypt、kms:Decrypt、kms:GenerateDataKey、kms:DescribeKey),IAM权限与KMS密钥策略需匹配才能生效 - 验证跨区域共享设置:确认us-east-1区域的源KMS密钥已正确共享给ACC_2账户,且ACC_2在us-east-2区域能正常查看该MRK副本
修正后的密钥策略示例
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACC_1:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Give access permission to ACC_2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACC_2:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "ACC_2" } } } ] }
(注:建议仅授予实际需要的KMS操作权限,而非kms:*,提升权限安全性)
内容的提问来源于stack exchange,提问作者Suresh Hemal
相关产品推荐
相关产品推荐

