重要事項
Azure 磁碟加密預定於 2028 年 9 月 15 日退休。 在此之前,您可以繼續使用 Azure 磁碟加密,不會中斷。 2028 年 9 月 15 日,啟用 ADE 的工作負載仍可繼續運行,但加密磁碟在虛擬機重啟後將無法解鎖,導致服務中斷。
為新的虛擬機器使用主機端加密。 所有啟用 ADE 的虛擬機(包括備份)必須在退休日前遷移至主機加密,以避免服務中斷。 詳情請參見「 從 Azure 磁碟加密遷移到主機加密 」。
適用於:✔️ Linux VM ✔️ 彈性規模集
本文的範圍是使用不同方法驗證虛擬機器的加密狀態:Azure 入口網站、PowerShell、Azure CLI 或虛擬機器 (VM) 的作業系統。
您可以在加密期間或加密後驗證加密狀態,方法包括:
- 檢查附加到特定 VM 的磁碟。
- 查詢每個磁碟的加密設定,無論磁碟是否已附加。
此情境適用於 Azure 磁碟加密的雙階段和單階段擴充功能。 Linux 發行版是此情境中唯一的環境。
附註
本文中將使用變數。 請相應地替換數值。
Portal
在 Azure 入口網站中,進入擴充功能區段,並在清單中選取 Azure 磁碟加密擴充功能。 狀態訊息的資訊顯示目前的加密狀態:
在擴充功能清單中,您會看到對應的 Azure 磁碟加密 擴充功能版本。 版本 0.x 對應 Azure 磁碟加密 雙階段,而版本 1.x 對應 Azure 磁碟加密 單階段。
您可以透過選取該擴充功能,然後選擇檢視詳細狀態取得更多詳細資訊。 加密程序的詳細狀態會以 JSON 格式顯示。
另一種驗證加密狀態的方法是查看磁碟設定區段。
附註
此狀態表示磁碟已被蓋章加密設定,但不代表它們在作業系統層級已實際加密。
依設計,磁碟先被蓋章,之後再進行加密。 如果加密程序失敗,磁碟可能最終僅被蓋章而未加密。
要確認磁碟是否真正加密,您可以在作業系統層級對每個磁碟的加密狀態進行二次檢查。
PowerShell
您可以使用以下 PowerShell 命令驗證加密 VM 的一般加密狀態:
$VMNAME="VMNAME"
$RGNAME="RGNAME"
Get-AzVmDiskEncryptionStatus -ResourceGroupName ${RGNAME} -VMName ${VMNAME}
您可以使用以下 PowerShell 命令擷取每個磁碟的加密設定。
單階段
在單階段中,OS 磁碟與資料磁碟的加密設定會被蓋章。 您可以透過以下方式擷取單階段 OS 磁碟的加密設定:
$RGNAME = "RGNAME"
$VMNAME = "VMNAME"
$VM = Get-AzVM -Name ${VMNAME} -ResourceGroupName ${RGNAME}
$Sourcedisk = Get-AzDisk -ResourceGroupName ${RGNAME} -DiskName $VM.StorageProfile.OsDisk.Name
Write-Host "============================================================================================================================================================="
Write-Host "Encryption Settings:"
Write-Host "============================================================================================================================================================="
Write-Host "Enabled:" $Sourcedisk.EncryptionSettingsCollection.Enabled
Write-Host "Version:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettingsVersion
Write-Host "Source Vault:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SourceVault.Id
Write-Host "Secret URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SecretUrl
Write-Host "Key URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.KeyEncryptionKey.KeyUrl
Write-Host "============================================================================================================================================================="
如果磁碟尚未蓋章加密設定,輸出將為空:
使用以下命令擷取資料磁碟的加密設定:
$RGNAME = "RGNAME"
$VMNAME = "VMNAME"
$VM = Get-AzVM -Name ${VMNAME} -ResourceGroupName ${RGNAME}
clear
foreach ($i in $VM.StorageProfile.DataDisks|ForEach-Object{$_.Name})
{
Write-Host "============================================================================================================================================================="
Write-Host "Encryption Settings:"
Write-Host "============================================================================================================================================================="
Write-Host "Checking Disk:" $i
$Disk=(Get-AzDisk -ResourceGroupName ${RGNAME} -DiskName $i)
Write-Host "Encryption Enable: " $Sourcedisk.EncryptionSettingsCollection.Enabled
Write-Host "Encryption KeyEncryptionKey: " $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.KeyEncryptionKey.KeyUrl;
Write-Host "Encryption DiskEncryptionKey: " $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SecretUrl;
Write-Host "============================================================================================================================================================="
}
雙階段
在雙階段中,加密設定會被蓋章在 VM 模型中,而不是每個單獨的磁碟上。
要驗證雙階段中加密設定是否已被蓋章,請使用以下命令:
$RGNAME = "RGNAME"
$VMNAME = "VMNAME"
$vm = Get-AzVm -ResourceGroupName ${RGNAME} -Name ${VMNAME};
$Sourcedisk = Get-AzDisk -ResourceGroupName ${RGNAME} -DiskName $VM.StorageProfile.OsDisk.Name
clear
Write-Host "============================================================================================================================================================="
Write-Host "Encryption Settings:"
Write-Host "============================================================================================================================================================="
Write-Host "Enabled:" $Sourcedisk.EncryptionSettingsCollection.Enabled
Write-Host "Version:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettingsVersion
Write-Host "Source Vault:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SourceVault.Id
Write-Host "Secret URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SecretUrl
Write-Host "Key URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.KeyEncryptionKey.KeyUrl
Write-Host "============================================================================================================================================================="
未附加磁碟
檢查未附加到 VM 的磁碟加密設定。
受控磁碟
$Sourcedisk = Get-AzDisk -ResourceGroupName ${RGNAME} -DiskName ${TARGETDISKNAME}
Write-Host "============================================================================================================================================================="
Write-Host "Encryption Settings:"
Write-Host "============================================================================================================================================================="
Write-Host "Enabled:" $Sourcedisk.EncryptionSettingsCollection.Enabled
Write-Host "Version:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettingsVersion
Write-Host "Source Vault:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SourceVault.Id
Write-Host "Secret URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.DiskEncryptionKey.SecretUrl
Write-Host "Key URL:" $Sourcedisk.EncryptionSettingsCollection.EncryptionSettings.KeyEncryptionKey.KeyUrl
Write-Host "============================================================================================================================================================="
Azure CLI
您可以使用以下 Azure CLI 命令驗證加密 VM 的一般加密狀態:
VMNAME="VMNAME"
RGNAME="RGNAME"
az vm encryption show --name ${VMNAME} --resource-group ${RGNAME} --query "substatus"
單階段
您可以使用以下 Azure CLI 命令驗證每個磁碟的加密設定:
az vm encryption show -g ${RGNAME} -n ${VMNAME} --query "disks[*].[name, statuses[*].displayStatus]" -o table
重要事項
如果磁碟尚未蓋章加密設定,您將看到文字磁碟未加密。
使用以下命令取得詳細狀態和加密設定。
OS 磁碟:
RGNAME="RGNAME"
VMNAME="VNAME"
disk=`az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.osDisk.name -o tsv`
for disk in $disk; do \
echo "============================================================================================================================================================="
echo -ne "Disk Name: "; az disk show -g ${RGNAME} -n ${disk} --query name -o tsv; \
echo -ne "Encryption Enabled: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.enabled -o tsv; \
echo -ne "Version: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettingsVersion -o tsv; \
echo -ne "Disk Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].diskEncryptionKey.secretUrl -o tsv; \
echo -ne "key Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].keyEncryptionKey.keyUrl -o tsv; \
echo "============================================================================================================================================================="
done
資料磁碟:
RGNAME="RGNAME"
VMNAME="VMNAME"
az vm encryption show --name ${VMNAME} --resource-group ${RGNAME} --query "substatus"
for disk in `az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.dataDisks[].name -o tsv`; do \
echo "============================================================================================================================================================="; \
echo -ne "Disk Name: "; az disk show -g ${RGNAME} -n ${disk} --query name -o tsv; \
echo -ne "Encryption Enabled: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.enabled -o tsv; \
echo -ne "Version: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettingsVersion -o tsv; \
echo -ne "Disk Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].diskEncryptionKey.secretUrl -o tsv; \
echo -ne "key Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].keyEncryptionKey.keyUrl -o tsv; \
echo "============================================================================================================================================================="
done
雙階段
az vm encryption show --name ${VMNAME} --resource-group ${RGNAME} -o table
您也可以檢查 OS 磁碟在 VM 模型儲存設定檔中的加密設定:
disk=`az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.osDisk.name -o tsv`
for disk in $disk; do \
echo "============================================================================================================================================================="; \
echo -ne "Disk Name: "; az disk show -g ${RGNAME} -n ${disk} --query name -o tsv; \
echo -ne "Encryption Enabled: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.enabled -o tsv; \
echo -ne "Version: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettingsVersion -o tsv; \
echo -ne "Disk Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].diskEncryptionKey.secretUrl -o tsv; \
echo -ne "key Encryption Key: "; az disk show -g ${RGNAME} -n ${disk} --query encryptionSettingsCollection.encryptionSettings[].keyEncryptionKey.keyUrl -o tsv; \
echo "============================================================================================================================================================="
done
未附加磁碟
檢查未附加到 VM 的磁碟加密設定。
受控磁碟
RGNAME="RGNAME"
TARGETDISKNAME="DISKNAME"
echo "============================================================================================================================================================="
echo -ne "Disk Name: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query name -o tsv; \
echo -ne "Encryption Enabled: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.enabled -o tsv; \
echo -ne "Version: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettingsVersion -o tsv; \
echo -ne "Disk Encryption Key: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettings[].diskEncryptionKey.secretUrl -o tsv; \
echo -ne "key Encryption Key: "; az disk show -g ${RGNAME} -n ${TARGETDISKNAME} --query encryptionSettingsCollection.encryptionSettings[].keyEncryptionKey.keyUrl -o tsv; \
echo "============================================================================================================================================================="
非受控磁碟
非受控磁碟是 VHD 檔案,會以分頁 Blob 的形式儲存在 Azure 儲存體帳戶中。
要取得特定磁碟的詳細資訊,您需要提供:
- 包含該磁碟的儲存體帳戶 ID
- 該儲存體帳戶的連線字串
- 儲存該磁碟的容器名稱
- 磁碟名稱
此命令列出所有儲存體帳戶的 ID:
az storage account list --query [].[id] -o tsv
儲存體帳戶 ID 以以下格式列出:
/subscriptions/<訂閱 ID>/resourceGroups/<資源群組名稱>/providers/Microsoft.Storage/storageAccounts/<儲存體帳戶名稱>
選取適當的 ID 並存到變數中:
id="/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name>"
此命令取得特定儲存體帳戶的連線字串並存到變數中:
ConnectionString=$(az storage account show-connection-string --ids $id --query connectionString -o tsv)
以下命令列出儲存體帳戶下的所有容器:
az storage container list --connection-string $ConnectionString --query [].[name] -o tsv
用於磁碟的容器通常命名為 vhds
將容器名稱存到變數中:
ContainerName="name of the container"
使用此命令列出特定容器中的所有 Blob:
az storage blob list -c ${ContainerName} --connection-string $ConnectionString --query [].[name] -o tsv
選擇您想要查詢的磁碟並將其名稱存到變數中:
DiskName="diskname.vhd"
查詢磁碟加密設定:
az storage blob show -c ${ContainerName} --connection-string ${ConnectionString} -n ${DiskName} --query metadata.DiskEncryptionSettings
作業系統
驗證資料磁碟分割區是否已加密 (OS 磁碟未加密)。
當分割區或磁碟已加密時,會顯示為 crypt 類型。 當未加密時,會顯示為 part/disk 類型。
sudo lsblk
您可以使用以下 lsblk 變體取得更多詳細資訊。
您將看到由擴充功能掛載的 crypt 類型層。 以下範例顯示邏輯磁碟和一般磁碟具有 crypto_LUKS FSTYPE。
sudo lsblk -o NAME,TYPE,FSTYPE,LABEL,SIZE,RO,MOUNTPOINT
作為額外步驟,您可以驗證資料磁碟是否載入了任何金鑰:
sudo cryptsetup luksDump /dev/VGNAME/LVNAME
sudo cryptsetup luksDump /dev/sdd1
並且您可以檢查哪些 dm 裝置被列為 crypt:
sudo dmsetup ls --target crypt