如何通过Azure Blueprints为Azure Key Vault分配Access Policies
Azure Blueprint 配置Key Vault访问策略的最佳实践
方案1:使用ARM内置函数动态获取值,避免硬编码
不需要在模板中写死TenantId和ObjectId,可通过ARM自带的函数动态拉取当前环境的对应值:
- TenantId直接通过
tenant()函数获取,写法为"tenantId": "[tenant().tenantId]" - 如果要给Blueprint部署用的托管标识分配权限,可通过以下写法动态获取标识的ObjectId,无需手动传参:
[reference(resourceId('Microsoft.Blueprint/blueprintAssignments', parameters('blueprintAssignmentName')), '2018-11-01-preview').identity.principalId]
示例配置代码段如下:
"accessPolicies": [ { "tenantId": "[tenant().tenantId]", "objectId": "[reference(resourceId('Microsoft.Blueprint/blueprintAssignments', parameters('blueprintAssignmentName')), '2018-11-01-preview').identity.principalId]", "permissions": { "keys": [ "Get", "List", "Create", "Restore" ], "secrets": [ "Get", "List", "Set", "Restore" ], "certificates": [] } } ]
方案2:拆分访问策略为独立Blueprint工件
如果需要给多个不同标识分配权限,可将访问策略从Key Vault的基础模板中拆分出来,作为单独的ARM工件挂载到Blueprint下:
- Key Vault的基础模板中不定义
accessPolicies属性,或设置为空数组 - 单独创建类型为
Microsoft.KeyVault/vaults/accessPolicies的ARM模板,每条访问策略可单独作为一个工件,也可以合并为一个批量配置的工件 - 所有访问策略工件的部署模式设置为增量,Blueprint升级时只会追加配置,不会覆盖已有的访问策略
方案3:保留手动配置的访问策略
如果有必须手动配置的访问策略,需要做两个设置避免Blueprint升级时被清除:
- Key Vault对应的Blueprint工件部署模式设置为增量
- Key Vault的ARM模板中完全省略
accessPolicies字段,不要定义空数组也不要写任何策略配置,增量部署时ARM不会修改已有的访问策略内容
注意事项
- 建议将所有需要持久化的访问策略全部纳入Blueprint配置管理,避免出现配置漂移问题
- 若要给指定用户、用户组或固定服务主体分配权限,可将对应ObjectId设置为Blueprint的安全参数,分配Blueprint时统一填写,参数值会在后续Blueprint升级时自动继承,无需重复输入
内容的提问来源于stack exchange,提问作者Ing. Luca Stucchi
相关产品推荐
相关产品推荐

