使用 Azure CLI 加密虛擬機器擴展集中的 OS 與連結的資料磁碟
Azure CLI 可用來從命令列或在指令碼中建立和管理 Azure 資源。 本快速入門示範如何使用 Azure CLI 建立和加密虛擬機器擴展集。 如需將 Azure 磁碟加密套用至虛擬機器擴展集的詳細資訊,請參閱適用於虛擬機器擴展集的 Azure 磁碟加密。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.0.31 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。
建立擴展集
請先使用 az group create 建立資源群組,才可以建立擴展集。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組:
az group create --name myResourceGroup --location eastus
現在使用 az vmss create 建立虛擬機器擴展集。 下列範例會建立名為 myScaleSet 的擴展集,其已設定為在套用變更時自動更新,並在 ~/.ssh/id_rsa 中沒有 SSH 金鑰時產生 SSH 金鑰。 系統會將 32 Gb 資料磁碟連結至每個 VM 執行個體,並使用 Azure 自訂指令碼延伸模組搭配 az vmss extension set 來準備資料磁碟:
重要
確保選取 ADE 支援的作業系統。 ADE 支援的 OS。
# Create a scale set with attached data disk
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--orchestration-mode Flexible \
--image <SKU Linux Image> \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 32
# Prepare the data disk for use with the Custom Script Extension
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/prepare_vm_disks.sh"],"commandToExecute":"./prepare_vm_disks.sh"}'
建立及設定所有擴展集資源和 VM 需要幾分鐘的時間。
建立針對磁碟加密啟用的 Azure 金鑰保存庫
Azure 金鑰保存庫儲存可讓您安全地在應用程式和服務中實作的金鑰和密碼 (Secret 或 Password)。 密碼編譯金鑰會使用軟體保護功能儲存在 Azure 金鑰保存庫中,或者您可以在經過 FIPS 140 驗證標準認證的硬體安全性模組 (HSM) 中匯入或產生金鑰。 這些密碼編譯金鑰用來加密及解密連接到 VM 的虛擬磁碟。 您可保留這些密碼編譯金鑰的控制權,並可稽核其使用情況。
定義您自己的唯一 keyvault_name。 接著,在與擴展集相同的訂用帳戶和區域中,使用 az keyvault create 建立 KeyVault,並設定 --enabled-for-disk-encryption 存取原則。
# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname
# Create Key Vault
az keyvault create --resource-group myResourceGroup --name $keyvault_name --enabled-for-disk-encryption
使用現有的 Key Vault
如果您有想要用於磁碟加密的現有 Key Vault,才需要這個步驟。 如果您已在上一節中建立 Key Vault,請略過此步驟。
定義您自己的唯一 keyvault_name。 接著,使用 az keyvault update 更新您的 KeyVault,並設定 --enabled-for-disk-encryption 存取原則。
# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname
# Create Key Vault
az keyvault update --name $keyvault_name --enabled-for-disk-encryption
啟用加密
注意
如果在彈性協調流程模式中使用虛擬機擴展集,則只會加密新的執行個體。 擴展集中的現有執行個體必須個別加密或移除並取代。
若要加密擴展集中的 VM 執行個體,請先使用 az keyvault show 取得 Key Vault 資源識別碼的部分資訊。 然後使用這些變數搭配 az vmss encryption enable 開始執行加密程序:
# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)
# Enable encryption of the data disks in a scale set
az vmss encryption enable \
--resource-group myResourceGroup \
--name myScaleSet \
--disk-encryption-keyvault $vaultResourceId \
--volume-type DATA
加密流程可能需要一兩分鐘的時間才能啟動。
由於擴展集是在先前步驟設定為「自動」時建立的擴展集上的升級原則,因此 VM 執行個體會自動開始執行加密程序。 在升級原則為手動的擴展集上,使用 az vmss update-instances 對 VM 執行個體啟動加密原則。
使用 KEK 包裝金鑰來啟用加密
加密虛擬機器擴展集時,您也可以使用金鑰加密金鑰來增加安全性。
# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)
# Enable encryption of the data disks in a scale set
az vmss encryption enable \
--resource-group myResourceGroup \
--name myScaleSet \
--disk-encryption-keyvault $vaultResourceId \
--key-encryption-key myKEK \
--key-encryption-keyvault $vaultResourceId \
--volume-type DATA
注意
disk-encryption-keyvault 的語法是完整的識別碼字串:
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]
key-encryption-key 參數值的語法,是 KEK 的完整 URI,如:
https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]
檢查加密程序
若要檢查磁碟加密的狀態,請使用 az vmss encryption show:
az vmss encryption show --resource-group myResourceGroup --name myScaleSet
當 VM 執行個體經過加密時,狀態碼會回報 EncryptionState/encrypted,如下列範例輸出所示:
[
{
"disks": [
{
"encryptionSettings": null,
"name": "myScaleSet_myScaleSet_0_disk2_3f39c2019b174218b98b3dfae3424e69",
"statuses": [
{
"additionalProperties": {},
"code": "EncryptionState/encrypted",
"displayStatus": "Encryption is enabled on disk",
"level": "Info",
"message": null,
"time": null
}
]
}
],
"id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualMachines/0",
"resourceGroup": "MYRESOURCEGROUP"
}
]
停用加密
如果您不想再使用加密的 VM 執行個體磁碟,則可以如下所示,使用 az vmss encryption disable 來停用加密:
az vmss encryption disable --resource-group myResourceGroup --name myScaleSet
下一步
- 在此發行項中,您使用 Azure CLI 加密虛擬機器擴展集。 您也可以使用 Azure PowerShell 或 Azure Resource Manager 範本。
- 如果您想要在佈建其他擴充功能之後套用 Azure 磁碟加密,則可以使用擴充功能排序。
- 您可以在這裡找到 Linux 擴展集資料磁碟加密的端對端批次檔案範例。 這個範例會建立資源群組和 Linux 擴展集、掛接 5 GB 資料磁碟,並加密虛擬機器擴展集。