在ARM模板中引用KeyVault机密失败,并显示“模板中未定义资源”

时间:2020-01-23 09:32:32

标签: azure azure-web-app-service azure-resource-manager azure-keyvault arm-template

我正在尝试在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机密的特定参考吗?

只要我尝试相同的操作,但模板中具有密钥库和秘密,它就可以很好地工作。

1 个答案:

答案 0 :(得分:4)

reference function的文档中提到,如果在同一模板中未配置引用资源,则必须使用函数的第二个参数apiVersion

所以,而不是

reference(variables('secretResourceId')).secretUriWithVersion

类似的东西应该起作用

reference(variables('secretResourceId'), '2018-02-14').secretUriWithVersion
相关问题