You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨区域共享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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:38