如何在Azure ARM模板中从Key Vault安装多个版本的证书
解决方案
ARM模板本身不支持直接调用Key Vault的动态接口拉取证书全部版本,你遇到的传入版本号报错问题,是因为构造secret资源ID的方式有误,按以下方式调整即可正常引用指定历史版本:
- 调整
certificatesToInstall变量结构,将需要部署的证书名称、对应版本号提前录入,示例如下:
"variables": { "certificateStore": "My", "certificatesToInstall": [ // 当前版本 { "certName": "your-cert-name", "certVersion": "当前版本哈希值" }, // 上一可用版本 { "certName": "your-cert-name", "certVersion": "历史版本哈希值" } ] }
- 修改
secrets配置段中certificateUrl的构造逻辑,将证书名和版本号用/拼接后作为完整的secret资源名传入resourceId函数:
"secrets": [ { "sourceVault": { "id": "[parameters('sourceVault')]" }, "copy": [ { "name": "vaultCertificates", "count": "[length(variables('certificatesToInstall'))]", "input": { "certificateStore": "[variables('certificateStore')]", "certificateUrl": "[reference(resourceId(parameters('subscriptionId'), parameters('resourceGroupName'), 'Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), concat(variables('certificatesToInstall')[copyIndex('vaultCertificates')].certName, '/', variables('certificatesToInstall')[copyIndex('vaultCertificates')].certVersion)), '2016-10-01').secretUriWithVersion]" } } ] } ]
如果不想硬编码版本号,可在部署前通过Azure CLI/PowerShell拉取指定证书的所有可用版本,筛选出需要的版本号作为参数传入ARM模板即可。
部署前需确保执行部署操作的身份对应Key Vault的访问策略中,已开启获取证书、获取机密权限,否则会拉取失败。
内容的提问来源于stack exchange,提问作者abigicic
相关产品推荐
相关产品推荐

