2017-02-10 102 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