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

如何保障KMS密钥访问安全并以资源策略为权限判定依据?

关于AWS KMS权限策略的两个问题解答

1. 如何让KMS密钥资源策略成为权限访问的唯一判定依据?

要实现这一点,你需要在KMS密钥的资源策略中添加默认显式拒绝规则,仅对指定允许的用户/角色放行。具体操作方式如下:

  • 在资源策略中使用NotPrincipal元素,指向所有不在允许列表中的主体
  • 为这个NotPrincipal设置Effect: Deny,并覆盖所有KMS操作
  • 保留原有对根账户、Role A的允许规则

示例策略片段如下:

{
  "Version": "2012-10-17",
  "Statement": [
    // 允许根账户和Role A访问
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:root",
          "arn:aws:iam::123456789012:role/RoleA"
        ]
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    // 默认拒绝所有其他主体的访问
    {
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": [
          "arn:aws:iam::123456789012:root",
          "arn:aws:iam::123456789012:role/RoleA"
        ]
      },
      "Action": "kms:*",
      "Resource": "*"
    }
  ]
}

配置完成后,即使IAM用户/角色有允许策略,只要不在资源策略的允许列表里,都会被资源策略的显式拒绝拦截,此时资源策略就成了唯一的权限判定依据。

2. 当前现象是否符合KMS策略与IAM策略的预期行为?

完全符合预期。AWS的权限评估逻辑是:

  1. 优先检查是否存在显式拒绝(无论来自IAM策略还是资源策略),只要有一个就直接拒绝请求
  2. 若没有显式拒绝,再检查是否存在显式允许(IAM策略或资源策略任意一个包含允许规则即可)

你当前的情况是:KMS资源策略没有拒绝User B的访问,而User B的IAM策略里有显式允许访问该KMS密钥的规则,所以权限评估通过,User B能执行相关操作——这就是仅更新IAM策略就生效的原因。

内容的提问来源于stack exchange,提问作者rk92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:45:34