我正在尝试在Azure Web应用的AppConfig部分中创建KeyVault参考。 KeyVault参考引用了KeyVault中存在的秘密,该KeyVault是其他资源组的一部分,因此模板中不存在。
根据reference()模板函数的documentation,只要您提供完整的resourceId和apiVersion,您就应该能够引用不属于模板的资源。
但是当我使用它来引用机密时,我不断收到验证错误,内容为:
错误:代码= InvalidTemplate; Message =部署模板验证 失败:“资源 'Microsoft.KeyVault / vaults // secrets /'不是 在模板中定义。
我关注了this guide。有关如何在ARM模板中使用KeyVault引用的信息。
下面的代码是无法解决问题的示例。
{
"type": "Microsoft.Web/sites",
"apiVersion": "2016-08-01",
"name": "[variables('webAppName')]",
"location": "[resourceGroup().location]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('serverFarmName'))]",
"siteConfig": {
"alwaysOn": true,
"appSettings": [
{
"name": "<secretName>",
"value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('secretResourceId')).secretUriWithVersion, ')')]"
},
]
}
},
"identity": {
"type": "SystemAssigned"
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('serverFarmName'))]"
]
}
变量的定义如下:
"variables": {
"secretResourceId": "[resourceId(subscription().subscriptionId, parameters('keyVaultResourceGroup'), 'Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), 'secretName')]"
},
这是对KeyVault机密的特定参考吗?
只要我尝试相同的操作,但模板中具有密钥库和秘密,它就可以很好地工作。
答案 0 :(得分:4)
reference
function的文档中提到,如果在同一模板中未配置引用资源,则必须使用函数的第二个参数apiVersion
。
所以,而不是
reference(variables('secretResourceId')).secretUriWithVersion
类似的东西应该起作用
reference(variables('secretResourceId'), '2018-02-14').secretUriWithVersion