如何保障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的权限评估逻辑是:
- 优先检查是否存在显式拒绝(无论来自IAM策略还是资源策略),只要有一个就直接拒绝请求
- 若没有显式拒绝,再检查是否存在显式允许(IAM策略或资源策略任意一个包含允许规则即可)
你当前的情况是:KMS资源策略没有拒绝User B的访问,而User B的IAM策略里有显式允许访问该KMS密钥的规则,所以权限评估通过,User B能执行相关操作——这就是仅更新IAM策略就生效的原因。
内容的提问来源于stack exchange,提问作者rk92
相关产品推荐
相关产品推荐

