我正在尝试在Azure Web应用程序的AppConfig部分中创建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机密的引用所特有的吗?
我尝试同样的方法,但是在模板中具有密钥库和秘密,就可以很好地工作。
reference
function的文档中提到,当未在同一模板中提供引用资源时,该函数的第二个参数reference
是必需的。
因此,而不是
apiVersion
类似的东西应该起作用
reference(variables('secretResourceId')).secretUriWithVersion