同一订阅下两个Azure Key Vault共享同步密钥的非CI/CD方案咨询
问题
在数据管道开发过程中,团队为不同区域的Azure Databricks维护独立的Key Vault作为范围密钥保管库。目前需要在两个Key Vault中维护某一配置密钥并确保始终同步,现咨询:同一订阅下,除了通过同一仓库维护CI/CD外,是否有办法实现两个Azure Key Vault之间的密钥共享同步?
当前架构示例
- Key Vault
KV-EUS连接到Databricks实例DB-EUS,范围名称为Scope-X - Key Vault
KV-WUS连接到Databricks实例DB-WUS,范围名称为Scope-X
限制条件
无法更改Key Vault与Databricks的连接设计,原因是代码要求所有Databricks实例中的范围名称必须为Scope-X,这类更改虽可行但超出当前时间范围。
解决方案
除了CI/CD仓库同步之外,同一订阅下可以通过以下几种原生Azure服务或配置实现Key Vault间的密钥同步:
1. Azure Automation 脚本同步
- 实现逻辑:创建Azure Automation账户,编写PowerShell/Runbook脚本,定期从源Key Vault(如
KV-EUS)备份指定密钥,再将备份导入到目标Key Vault(KV-WUS)。 - 配置要点:
- 给Automation账户分配两个Key Vault的
Key Vault Contributor权限(或更精细的Backup/Restore权限)。 - 设置触发规则:可以按固定周期(如每小时)触发,或监听源Key Vault的
KeyCreated/KeyUpdated事件来触发同步。
- 给Automation账户分配两个Key Vault的
- 优势:无需额外第三方工具,完全基于Azure原生服务,配置灵活。
2. Event Grid 触发的Azure Function同步
- 实现逻辑:利用Azure Event Grid监听源Key Vault的密钥变更事件(创建/更新/删除),触发Azure Function执行密钥同步操作。
- 配置步骤:
- 给源Key Vault配置Event Grid订阅,将密钥相关事件发送到Azure Function的端点。
- 在Function中编写代码(Python/C#均支持),读取事件中的密钥信息,调用Azure Key Vault SDK将密钥复制到目标Vault。
- 给Function分配两个Key Vault的相应权限(
Get源Vault密钥,Set目标Vault密钥)。
- 优势:实时同步,事件驱动,延迟极低,适合对同步时效要求高的场景。
3. Azure Policy 强制密钥一致性
- 实现逻辑:自定义Azure Policy规则,检查两个Key Vault中指定密钥的名称、版本、值是否一致,若不一致则触发合规性警告或自动修正(配合修正任务)。
- 配置要点:
- 编写Policy规则,通过
Microsoft.KeyVault/vaults/keys资源类型筛选指定密钥。 - 开启Policy的自动修正功能,当检测到目标Vault缺失密钥或密钥值不一致时,自动从源Vault同步。
- 编写Policy规则,通过
- 优势:不仅能同步,还能持续管控密钥的一致性,防止手动修改导致的差异。
4. 异地备份配合自动化恢复
- 实现逻辑:开启源Key Vault的软删除和异地备份功能,结合前面的自动化工具,当源密钥变更时,从异地备份恢复密钥到目标Vault。
- 注意:异地备份仅在Azure官方配对区域生效,需确认两个Vault的区域是否在配对列表内。
内容的提问来源于stack exchange,提问作者Sushant Pachipulusu
相关产品推荐
相关产品推荐

