Azure Key Vault:核心概念与架构
Azure Key Vault 是我在云上管理敏感信息时最常用的服务之一。说白了,它就是一个专门存密码、密钥、证书的保险柜。但我发现很多团队只把它当成一个“高级密码本”,其实它的能力远不止于此。
我们先从几个核心概念入手,把骨架搭清楚。
什么是 Key Vault?
Key Vault 是微软提供的托管密钥管理服务。它可以安全存储三类东西:
- 密钥(Key)—— 对称/非对称加密密钥,用于加解密、签名验签
- 机密(Secret)—— 几乎任何字符串:数据库密码、API 、证书私钥
- 证书(Certificate)—— X.509 证书及其私钥,支持自动续期
我个人习惯把 Key Vault 看作一个“统一凭据接入点”。应用不要自己记密码,运行时去 Key Vault 里取就对了。
架构层次
理解 Key Vault 的架构,记住两条线:资源组织和访问控制。
资源组织
一个 Azure 订阅下可以有多个 Key Vault 实例(Vault)。每个 Vault 属于一个资源组,部署在特定区域。Vault 内部不设二级目录,所有 Secret、Key、Certificate 都平铺在同一个命名空间下。
嗯,这里有个常见坑:
prod-xxx-vault。
我把架构逻辑画成了一张图,方便理解:
访问控制模型
Key Vault 提供了两套权限体系:访问策略(经典)和 RBAC(Azure 基于角色的访问控制)。
| 维度 | 访问策略 | RBAC |
|---|---|---|
| 粒度 | Vault 级别,可单独对 Secret/Key/Cert 授权 | 细粒度到单个密钥/机密,可继承 |
| 管理入口 | Key Vault 的“访问策略”边栏 | IAM(访问控制) |
| 适用范围 | 仅对 Key Vault 有效 | Azure 所有资源统一管理 |
| 推荐场景 | 传统应用,小团队 | 企业级,多团队,策略复用 |
我自己在实践中更倾向 RBAC。为什么?因为可以用同一个 Azure AD 角色定义来管理多个 K8s 集群的密钥访问,省得在几十个 Vault 里点点点。但要注意:两种模式互斥——你启用了 RBAC,访问策略边栏就失效了。
azurerm_key_vault 资源里设置 enable_rbac_authorization = true。我曾经因为忘记设置,结果上线后运维非要手动配访问策略,搞得手忙脚乱。
软删除与清除保护
这两个特性是我觉得 Key Vault 最“人性化”的设计。软删除默认开启:你删掉一个 Secret 后,它不会被立即销毁,而是进入“已删除”状态,保留 90 天。期间可以恢复。
清除保护则是给删除行为加一把锁:即使你手动执行了清除操作,Vault 也会拒绝,除非你联系 Azure 支持。这在生产环境非常有必要。
az keyvault secret recover 命令,30 秒内恢复。要是没有它,那天就得加班回滚部署了。
托管标识 —— 免密访问的最佳实践
托管标识(Managed Identity)是 Key Vault 与 Azure 资源之间的“握手”方式。说白了,就是 Azure 帮你生成一个服务主体,自动轮换凭证。你只需要在应用(比如 VM、Functions、AKS)上开启托管标识,然后给这个标识分配 Key Vault 的权限。
举个例子:
# 为 VM 启用系统托管标识
az vm identity assign -g myResourceGroup -n myVM
# 给该标识分配读取 Secret 的权限
az keyvault set-policy --name myVault \
--object-id <principal-id-from-above> \
--secret-permissions get list
这样应用代码里只需要用到 DefaultAzureCredential,不需要硬编码任何连接字符串。我个人强烈建议团队把所有云原生应用都迁移到这种模式。
备份与恢复
Key Vault 自身有高可用(同区域多副本),但跨区域容灾需要你主动备份。注意:只能备份单个 Secret/Key/Cert,不能备份整个 Vault。
- 备份命令:
az keyvault secret backup/az keyvault key backup - 备份内容:当前版本的所有元数据和加密材料(以 .keyvault 文件保存)
- 恢复限制:只能恢复到相同区域(同城灾备)或相同地理位置的另一个 Vault
总结这张图
回到我画的那张架构图:订阅→资源组→Vault→三个核心组件(机密、策略、标识)。连接线是它们的交互关系。其实你把这几个点搞懂了,Key Vault 80% 的场景都能覆盖。
还有一个小细节:Key Vault 的网络隔离可以通过防火墙和 VNet 服务端点来控制。如果你有加密合规要求,记得开启“仅允许受信任的 Microsoft 服务访问”。
好了,这一节的内容就到这里。记住核心原则:不要把密码写在代码里,交给 Key Vault 打理。