練習 - 管理 ARM 範本中的祕密
在上一個練習中,您已執行基本的 Azure Resource Manager (ARM) 範本來佈建 Linux 虛擬機器。 在此單元中,您將遵循類似程序。
這次,不將密碼當作參數來傳遞,而是將密碼儲存於 Azure Key Vault 中。 為了啟用 ARM 範本來存取密碼,您可以建立參數檔案來參考您訂用帳戶中的金鑰保存庫祕密。
部署 Azure Key Vault
注意
由於沙箱的限制,在這裡,您會從 Azure 入口網站在 Azure Key Vault 中建立金鑰保存庫。 一般來說,您會使用 New-AzKeyVault
Cmdlet 從 Azure PowerShell 建立金鑰保存庫。
建立金鑰保存庫並允許部署期間存取。 若要這麼做︰
建立 PowerShell 變數來保存金鑰保存庫名稱:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
執行
$KVNAME
以列印其值:$KVNAME
您的輸出與下列內容類似 (您看到的數字將有所不同):
tailwind-secrets5978564
將值複製到方便進行下一個步驟的位置。
使用啟用沙箱時所用的相同帳戶來登入 Azure 入口網站。
從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]。
在 [搜尋] 方塊中輸入 Key Vault。
從清單選取 [Key Vault],然後選取 [建立] 以開始設定金鑰保存庫。
在建立窗格中,指定下列值:
- 資源群組:
資源群組名稱 。 - 金鑰保存庫名稱: 您
$KVNAME
的值,例如 tailwind-secrets5978564。
- 資源群組:
選取 [檢閱 + 建立]。
選取 建立。 這應該需要一分鐘左右的時間。 建立資源之後,選取 [前往資源]。
選取 [設定] 底下的 [存取設定]。 啟用 [用於範本部署的 Azure Resource Manager] 選項,然後選取 [套用]。
從您的 PowerShell 工作階段執行
ConvertTo-SecureString
Cmdlet,並將結果指派給secretSecureString
變數:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
執行下列
Set-AzKeyVaultSecret
命令以在金鑰保存庫中建立祕密。 祕密的名稱為vmPassword
,值為insecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
建立參數檔案
在這裡,您會建立參數檔案,其中包含 VM 的名稱、管理員使用者名稱,以及對金鑰保存庫中 VM 密碼的參考。
您可以從命令列將參數傳遞給範本。 回想一下,參數檔案是在部署期間,將參數傳遞給 ARM 範本的替代方式。 參數檔案可讓您從範本中存取金鑰保存庫祕密。
執行下列
Get-AzKeyVault
命令,以列印您的金鑰保存庫識別碼:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
輸出看起來會像這樣:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
請注意下一個步驟的輸出。
在 Visual Studio Code 中,於包含 azuredeploy.json 的相同目錄中,建立名為 azuredeploy.parameters.json 的檔案。
將這些內容新增到 azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
以您在上一個步驟中複製的值取代
id
的值 (空字串)。 然後儲存檔案。
部署 Linux VM
在這裡,您會部署您在上一個練習中部署的相同 ARM 範本。 這次,您提供參數檔案來參考金鑰保存庫中的 VM 密碼。
執行下列
New-AzResourceGroupDeployment
命令:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
在上一個練習中,您已直接從命令列提供每個機碼/值組。 在這裡,您指定
"./azuredeploy.parameters.json"
來提供參數檔案。dnsLabelPrefix
會設定為vm2-
,後面接一個隨機數字。 為了確保 DNS 名稱與您在上一個練習中所使用的 DNS 名稱不同,這是必要的。
驗證部署
驗證 VM 已佈建且可透過 SSH 連線。 若要這麼做︰
執行
Invoke-Expression
命令以透過 SSH 連線到 VM:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
出現提示時,輸入
yes
以繼續連線。 然後輸入系統管理員密碼,insecurepassword123!
。重要
實際上,請妥善保管密碼。 您也可以使用公開金鑰驗證,這通常比使用密碼更安全。
從您與 VM 的 SSH 連線,執行
hostname
以列印 VM 的主機名稱:hostname
您會看到 VM 的內部主機名稱,
vm1
:vm2
執行
exit
以離開您的 SSH 工作階段。exit
做得好! 您已擴充部署,以包含可從 Key Vault 讀取祕密資訊的參數檔案。
部署 Azure Key Vault
在 Azure Key Vault 中,建立金鑰保存庫並新增 VM 密碼作為安全的祕密。 若要這麼做︰
建立 Bash 變數來保存金鑰保存庫名稱。
KVNAME=tailwind-secrets$RANDOM
金鑰保存庫名稱必須是唯一的。
$RANDOM
組件可確保金鑰保存庫名稱會以隨機的數字序列結束。執行下列
az keyvault create
命令以建立金鑰保存庫:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
--enabled-for-template-deployment
引數可允許 Azure Resource Manager (ARM) 範本從金鑰保存庫擷取祕密。執行下列
az keyvault secret set
命令以在金鑰保存庫中建立祕密。 祕密的名稱為vmPassword
,值為insecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
建立參數檔案
在這裡,您會建立參數檔案,其中包含 VM 的名稱、管理員使用者名稱,以及對金鑰保存庫中 VM 密碼的參考。
您可以從命令列將參數傳遞給範本。 回想一下,參數檔案是在部署期間,將參數傳遞給 ARM 範本的替代方式。 參數檔案可讓您從範本中存取金鑰保存庫祕密。
執行下列
az keyvault show
命令,以列印您的金鑰保存庫識別碼:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
輸出看起來會像這樣:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
請注意下一個步驟的輸出。
在 Visual Studio Code 中,於包含 azuredeploy.json 的相同目錄中,建立名為 azuredeploy.parameters.json 的檔案。
將這些內容新增到 azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
以您在上一個步驟中複製的值取代
id
的值 (空字串)。 然後儲存檔案。
部署 Linux VM
在這裡,您會部署您在上一個練習中部署的相同 ARM 範本。 這次,您提供參數檔案來參考金鑰保存庫中的 VM 密碼。
執行下列 az deployment group create
命令以部署範本:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
在上一個練習中,您已在 --parameters
引數中提供每個機碼/值組。 在這裡,您指定 @azuredeploy.parameters.json
來提供參數檔案。
dnsLabelPrefix
會設定為 vm2-
,後面接一個隨機數字。 為了確保 DNS 名稱與您在上一個練習中所使用的 DNS 名稱不同,這是必要的。
檢查部署
如同您在上一個練習中所做的,驗證 VM 已佈建且可透過 SSH 連線。 為求簡潔,這次您將略過某些中繼步驟。
執行下列程式碼,以透過 SSH 連線到您的 VM:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
出現提示時,輸入
yes
以繼續連線。 然後輸入系統管理員密碼,insecurepassword123!
。從您與 VM 的 SSH 連線,執行
hostname
以列印 VM 的主機名稱:hostname
您會看到 VM 的內部主機名稱,
vm2
:vm2
執行
exit
以離開您的 SSH 工作階段。exit
做得好! 您已擴充部署,以包含可從 Key Vault 讀取祕密資訊的參數檔案。