如何在ARM模板中动态创建Azure KeyVault引用?
我正在使用ARM模板参数文件中的以下代码从keyvault检索机密值:如何在ARM模板中动态创建Azure KeyVault引用?,azure,azure-resource-manager,azure-keyvault,arm-template,Azure,Azure Resource Manager,Azure Keyvault,Arm Template,我正在使用ARM模板参数文件中的以下代码从keyvault检索机密值: "parameters": { "mailAccount": { "reference": { "keyVault": { "id": "/subscriptions/GUID/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/KeyVault"
"parameters": {
"mailAccount": {
"reference": {
"keyVault": {
"id": "/subscriptions/GUID/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/KeyVault"
},
"secretName": "mailAccount"
}
},
在模板文件中:
"appSettings": [
{
"name": "mailAccount",
"value": "[parameters('mailAccount')]"
},
{
我想知道是否可以使用动态构造的对象(即不是/subscriptions/GUID/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/KeyVault
而是[resourceId(subscription().subscriptionId,resourcegroup().name,'Microsoft.KeyVault/vaults',参数('KeyVault名称'))]
)或[resourceId('Microsoft.KeyVault/Vault',parameters('KeyVault名称'))]
事实上,主要目标是在部署模板时能够传递不同的KeyVault名称,其中存储了相似的值。由于资源(和成本)的分离,需要几个密钥库是合理的 现在,我只看到验证错误,说明~
resourceId函数在引用参数时不能使用
我不能使用嵌套\链接的模板(和输出值)。为了避免resourceId函数的这种限制,我通常会使用参数值定义一个变量,然后在resourceId函数中使用该变量 例如:
"parameters": {
"KeyVaultName": {
"type": "string",
"metadata": {
"description": "Key Vault Name"
}
}
},
"variables": {
"KeyVaultName": "[parameters('KeyVaultName')]"
}
然后,当我引用KeyVault资源时,我使用如下变量引用它:
"[resourceId('Microsoft.KeyVault/vaults', variables('KeyVaultName')]"
嵌套/链接模板是此问题的唯一解决方案。您可以分享阻止您使用此解决方案的原因吗?您不需要使用输出,但需要使用嵌套模板(如Rich所述)。我在以编程方式在代码(.Net Core web app+Azure API调用)中创建资源时使用此模板。遗憾的是,在使用REST API部署时,我无法使用嵌套模板。