部署 ARM 模板时如何在 TemplateParameterObject 参数中传递引用

How can I pass a reference in the TemplateParameterObject parameter when deploying an ARMtemplate

执行New-AzureRmResourceGroupDeployment命令时可以通过TemplateParameterObject参数传递模板参数。这对于简单的属性和数组非常有用,但我似乎无法让它用于引用。所以在 ARM 模板参数文件中看起来像这样:

"adminPassword": {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/365d8c14-efa0-437e-a2c8-c3ffc8f6287a/resourceGroups/musw1-prf-jboyd-kv-rg/providers/Microsoft.KeyVault/vaults/musw1-prf-jboyd-kv"
    },
    "secretName": "adminPassword"
  }
}

我试过这个:

$parameters = @{
    adminPassword = @{
        reference = @{
            keyVault = @{
                id = $KeyVaultId
            }
            secretName = 'adminPassword'
        }
    }
}

New-AzureRmResourceGroupDeployment `
    -ResourceGroupName $ResourceGroupName `
    -TemplateFile $TemplateFile `
    -TemplateParameterObject $parameters

但我得到的只是:

Deployment template validation failed: 'The provided value for the template parameter 'adminPassword' at line '13' and column '27' is not valid.'.

目前,ARM 模板参数中的 Key Vault 引用似乎仅通过参数文件支持,而不通过参数对象支持:See here for the issue that's been raised with Microsoft

虽然它不像使用 -TemplateParameterObject 那样友好,但一种变通方法可以让您在不暴露您的 Key Vault 机密的情况下编写脚本,以编程方式创建和填充您的 JSON 模板文件,方法是通过PowerShell,然后将其传递给 New-AzureRmResourceGroupDeployment。通过这样做,您可以继续间接引用 Key Vault 机密,而无需将其存储在本地或以任何方式将其公开为明文。

在 PowerShell 中不使用 TemplateParameterObject 参数的另一种解决方法是添加嵌套模板并传入包含 reference to the dynamically generated Azure Key Vault resource ID.

的参数