2017-02-10 48 views
0

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

"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 

但我得到的是:

部署模板验证失败: '在行'13'和列'27'处为模板参数'adminPassword'提供的值无效。'。

回答

1

目前,ARM模板参数关键库引用仅显示通过参数文件,而不是参数对象支持:See here for the issue that's been raised with Microsoft

虽然它不是使用-TemplateParameterObject,一个工作 - 友好你可以在不暴露你的Key Vault秘密的情况下编写脚本,而是通过PowerShell编程创建并填充你的JSON模板文件,然后将其传递到New-AzureRmResourceGroupDeployment。通过这样做,您可以间接引用密钥库密钥,而无需将其存储在本地或以任何方式将其公开为明文。

+0

其实,这是我最终做的。 –

+0

我现在给你提出要点,但是当你添加对它的支持时你必须回来并更新你的答案:) –

+0

哈哈 - 这是一笔交易;) – AndyHerb

0
$keyVaultData = Get-AzureKeyVaultSecret -VaultName vaultName -Name secretName 
$parameters = @{"param" = "data"; "secret" = $keyVaultData.SecretValue} 
New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` 
    -TemplateFile $TemplateFile @parameters 

或者是更好的选择 - 使用参数文件。

参考:https://blogs.technet.microsoft.com/paulomarques/2016/05/27/safeguarding-your-passwords-when-deploying-azure-virtual-machines-with-azure-powershell-module-and-arm-templates-by-using-azure-key-vault/

+0

因此,如果我错了,请纠正我的错误,但这需要部署ARM模板的人具有读取秘密的权限,而将其定义为对参数文件中的密钥保险库的引用不会? –

+0

我正在尝试使用'TemplateParameterObject',因为我们每次在板载客户时都会部署一组ARM模板;每个人都有一个相应的参数文件。但是文件之间有很多重叠的参数。我不希望手动更新所有这些参数文件并复制和粘贴值,而是希望从少量变量中动态生成参数,并通过'TemplateParameterObject'传递它们。 –

+0

我很确定你仍然需要这样做的权限,否则你将无法部署... – 4c74356b41