共用方式為


使用 Azure CLI 加密虛擬機器規模集合中的 OS 和附加的資料磁碟

這很重要

Azure 磁碟加密預定於 2028 年 9 月 15 日退休。 在此之前,您可以繼續使用 Azure 磁碟加密,不會中斷。 2028 年 9 月 15 日,啟用 ADE 的工作負載仍可繼續運行,但加密磁碟在虛擬機重啟後將無法解鎖,導致服務中斷。

為新的虛擬機器使用主機端加密。 所有啟用 ADE 的虛擬機(包括備份)必須在退休日前遷移至主機加密,以避免服務中斷。 詳情請參見「 從 Azure 磁碟加密遷移到主機加密 」。

Azure CLI 可用來從命令列或在指令碼中建立和管理 Azure 資源。 本快速入門說明如何使用 Azure CLI 來建立和加密虛擬機器擴展集。 如需將 Azure 磁碟加密套用至虛擬機器擴展集的詳細資訊,請參閱虛擬 機器擴展集的 Azure 磁碟加密

先決條件

  • 本文需要 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 支援的作業系統

# 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 金鑰保存庫可以儲存金鑰、秘密或密碼,讓您在應用程式和服務中安全地實作它們。 密碼編譯金鑰會使用軟體保護儲存在 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

使用現有的金鑰保存庫

只有在您有想要搭配磁碟加密使用的現有金鑰保存庫時,才需要此步驟。 如果您在上一節中建立金鑰保存庫,請略過此步驟。

定義您自己獨特的 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 取得金鑰保存庫資源 ID 的資訊。 然後,這些變數可用來啟動具有 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 PowerShellAzure Resource Manager 範本
  • 如果您想要在佈建另一個延伸模組之後套用 Azure 磁碟加密,您可以使用 延伸模組排序
  • 您可以在這裡找到 Linux 擴展集資料磁碟加密的端對端批次檔案範例。 此範例會建立資源群組 Linux 擴展集、掛接 5 GB 資料磁碟,並加密虛擬機器擴展集。