授权模型对比:Azure RBAC vs 访问策略
在Key Vault这里,你可能会遇到一个挺有意思的问题:为什么有两套权限模型?嗯,这确实是Azure里为数不多的“双体系”设计之一。我个人刚接触时也纳闷,后来踩了几个坑才搞清楚里面的门道。
为什么会有两套授权模型?
说白了,是历史演进的产物。
- 访问策略:Key Vault刚上线时就有的原生模型,专用于控制数据平面的操作。比如,谁可以读取机密、谁可以创建密钥。
- Azure RBAC:后来Azure统一了资源管理的权限体系,RBAC覆盖了所有Azure资源。Key Vault在2019年才加入了RBAC支持,用于管理平面权限,再到2020年扩展到了数据平面。
我记得在2018年做第一个Key Vault项目时,只有访问策略可用。那时候要给应用分配权限,必须在Key Vault的刀片里一个一个添加服务主体,操作起来很繁琐。现在好了,RBAC让你可以用管理组、订阅或资源组级别统一授权。
管理平面 vs 数据平面
要理解这两套模型,首先得搞明白Key Vault的两个操作平面。
| 操作平面 | 作用范围 | 支持的授权模型 |
|---|---|---|
| 管理平面 | 控制Key Vault本身的配置,如创建/删除Vault、设置诊断日志、配置网络ACL | 仅Azure RBAC |
| 数据平面 | 操作Vault内部存储的机密、密钥、证书,如获取机密、签名、加密、导入证书 | 访问策略 + Azure RBAC(二选一或共存) |
你想想看,管理平面平时谁会碰?大多是运维或安全团队。数据平面呢?应用、开发者、CI/CD系统天天在用。这两个平面的粉丝群体完全不同,所以权限模型的设计思路也不同。
两种模型的核心差异
我从四个维度来对比,你在实际选型时可以对着这个表格考虑。
| 对比维度 | Azure RBAC | 访问策略 |
|---|---|---|
| 授权粒度 | 角色级别(Key Vault Contributor、Key Vault Secrets User等) | 操作级别(Get Secret、List Keys、Encrypt等,可单独勾选) |
| 管理方式 | 通过Azure门户的“访问控制(IAM)”或Azure CLI/ARM模板管理 | 在Key Vault刀片的“访问策略”中管理 |
| 作用范围 | 可分配到管理组、订阅、资源组、Key Vault实例 | 仅可分配到单个Key Vault实例 |
| 继承性 | 支持从上级作用域继承(比如给整个订阅分配Secrets User角色) | 不支持继承,每个Vault必须单独配置 |
我记得有一次,客户有200多个Key Vault,每个Vault都要给同一个服务主体分配Get Secret权限。用访问策略的话,你得手动点200次,或者写脚本批量操作。用RBAC就简单了:把服务主体加到订阅级别的Key Vault Secrets User角色,所有Vault一把搞定。这个对比很直观吧?
性能与规模差异
这也是一个容易被忽略的点。我曾经遇到一个问题:一个应用上线后,每次访问Key Vault都慢了几十毫秒。查了半天,发现罪魁祸首是访问策略配置过多。
- 访问策略:Key Vault内部会缓存策略表,如果策略条目数量超过1000条,缓存的更新和查询都会变慢,间接影响API响应时间。
- RBAC:权限判断由Azure的统一RBAC服务处理,不直接消耗Key Vault实例的资源。所以从性能角度看,RBAC对大规模场景更友好。
当然,对大多数中小规模项目来说,这个差别几乎感觉不到。只有当你一个Vault里塞了上百个服务主体时,才会遇到这种尴尬情况。
混合使用场景
你可能会问:能不能两套模型同时用?答案是可以,但有规则。
# 启用RBAC授权后,访问策略会被忽略
az keyvault update --name MyVault --enable-rbac-authorization true
# 关闭RBAC授权后,访问策略重新生效
az keyvault update --name MyVault --enable-rbac-authorization false
- 如果开启RBAC授权(
--enable-rbac-authorization true),访问策略配置将被忽略。此时只有RBAC分配的权限生效。 - 如果关闭RBAC授权(默认),只有访问策略生效。RBAC在这一层不会影响数据平面操作(但控制平面仍受RBAC控制)。
- 注意:打开或关闭RBAC授权是Key Vault级别的开关,不能做到部分用户用RBAC、部分用户用访问策略。
如何选择?
这个没有银弹。我给你画个决策参考图,你可以对着看看自己属于哪一类。
我个人的经验是:新项目直接上RBAC。原因很简单——以后所有Azure资源的授权模型都向RBAC收敛,Key Vault不会例外。访问策略属于历史包袱,未来可能会被逐步淘汰。但如果你已经在用访问策略,且系统稳定,没必要立即迁移。毕竟,“能跑就别动”在生产环境里是一条金科玉律。