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

Tje*_*erd 5 azure azure-resource-manager azure-keyvault azure-web-app-service azure-rm-template

我正在尝试在 Azure Web 应用程序的 AppConfig 部分中创建 KeyVault 引用。KeyVault 引用引用存在于 KeyVault 中的机密,该机密属于不同资源组的一部分,因此不存在于模板中。

根据文件的引用()模板函数,你应该能够引用的资源是不是模板的一部分,只要你提供完整的RESOURCEID和apiVersion。

但是当我用它来引用秘密时,我不断收到一个验证错误,它说:

错误:代码=无效模板;Message=部署模板验证失败:“模板中未定义资源“Microsoft.KeyVault/vaults//secrets/”。

我遵循了本指南。了解如何在 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'))]"
  ]
}
Run Code Online (Sandbox Code Playgroud)

变量定义如下:

"variables": {
  "secretResourceId": "[resourceId(subscription().subscriptionId, parameters('keyVaultResourceGroup'), 'Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), 'secretName')]"
},
Run Code Online (Sandbox Code Playgroud)

这是特定于对 KeyVault 机密的引用吗?

一旦我尝试相同但在模板中使用密钥库和秘密,它就可以正常工作。

Pra*_*SFT 6

reference函数的文档提到,apiVersion当引用资源未在同一模板中提供时,该函数的第二个参数是必需的。

所以,而不是

reference(variables('secretResourceId')).secretUriWithVersion
Run Code Online (Sandbox Code Playgroud)

这样的事情应该工作

reference(variables('secretResourceId'), '2018-02-14').secretUriWithVersion
Run Code Online (Sandbox Code Playgroud)