使用 Azure CLI 啟用伺服器端加密,並使用客戶管理的金鑰來管理受管理的磁碟

適用於: ✔️ Linux 虛擬機 ✔️ Windows 虛擬機 ✔️ 彈性擴展集 ✔️ 統一擴展集

如果你願意,Azure 磁碟儲存體 允許你在使用伺服器端加密(SSE)管理管理磁碟時,自行管理金鑰。 如需 SSE 與客戶自控金鑰及其他受控磁碟加密類型的概念資訊,請參閱磁碟加密文章的客戶自控金鑰一節。

限制

目前,客戶管理的金鑰具有下列限制:

  • 如果已對具有增量快照集的磁碟啟用此功能,就無法在該磁碟或其快照集上停用此功能。 若要解決此問題,請將所有資料複製到未使用客戶自控金鑰的另一個完全不同受控磁碟。 你可以用 Azure CLI 或 Azure PowerShell 模組來達成。
  • 磁碟及其所有相關聯的增量快照必須具有相同的磁碟加密設定。
  • 僅支援大小為 2048 位元、3072 位元和 4096 位元的軟體和 HSM RSA 金鑰,不支援其他金鑰或大小。
    • HSM 金鑰需要高級 Azure 金鑰庫。
  • 僅適用於 Ultra 磁碟和進階 SSD v2 磁碟:
    • (預覽)使用者指派的受控識別適用於使用客戶自控密鑰加密的 Ultra 磁碟和進階 SSD v2 磁碟。
  • 幾乎所有與客戶管理金鑰相關的資源 (磁碟加密集、VM、磁碟和快照集) 必須位於相同的訂閱和區域中。
  • 使用客戶自控密鑰加密的磁碟,只有在連結至的 VM 已解除分配時,才能移至另一個資源群組。
  • 使用客戶自控金鑰加密的磁碟、快照集和映像,無法在訂用帳戶之間移動。
  • 目前或過去使用 Azure 磁碟加密 加密的受管理磁碟,無法使用客戶管理的金鑰加密。
  • 每筆訂閱只能在每個區域最多建立 5000 個磁碟加密集。
  • 如需將客戶自控金鑰與共用映像資源庫搭配使用的詳細資訊,請參閱預覽:使用客戶自控金鑰加密映像。

建立資源

啟用此功能後,您需要設定 DiskEncryptionSet,以及設定 Azure Key Vault 或 Azure Key Vault 管理 HSM。

Azure Key Vault

  • 安裝最新的 Azure CLI,並以 az login 登入 Azure 帳號。
  • 建立一個 Azure Key Vault 和加密金鑰。

建立 金鑰保存庫 時,必須啟用清除保護。 清除保護可確保在保留期間失效之前,無法永久刪除已刪除的密鑰。 這些設定可防止您因為意外刪除而遺失資料。 這些設定在使用 金鑰保存庫 來加密受管理磁碟時是必須的。

重要

區域名稱不要用駝峰式大小寫,否則您在 Azure 入口網站中指派額外磁碟給資源時,可能會遇到問題。

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName

az account set --subscription $subscriptionId

az group create --resource-group $rgName --location $location

az keyvault create -n $keyVaultName \
-g $rgName \
-l $location \
--enable-purge-protection true 

az keyvault key create --vault-name $keyVaultName \
-n $keyName \
--protection software
  • 建立 DiskEncryptionSet。 您可以將 enable-auto-key-rotation 設定為 true ,以啟用密鑰的自動輪替。 當您啟用自動輪替時,系統會自動更新所有參考磁碟加密設定的受控磁碟、快照和映像檔,以在一小時內使用新版本的密鑰。
keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
  • 將金鑰保存庫的存取權授予 DiskEncryptionSet 資源。

注意

Azure 可能需要幾分鐘時間才能在你的 Microsoft Entra ID 中建立你的 DiskEncryptionSet 身份。 如果你執行以下指令時出現「找不到 Active Directory 物件」的錯誤,請等幾分鐘再試一次。

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)

az keyvault set-policy -n $keyVaultName \
-g $rgName \
--object-id $desIdentity \
--key-permissions wrapkey unwrapkey get

Azure Key Vault Managed HSM

或者,您可以使用受控 HSM 來處理金鑰。

若要這樣做,您必須完成下列必要條件:

組態

建立受控 HSM 並新增權限之後,請啟用清除保護並建立加密金鑰。

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
    
az account set --subscription $subscriptionId
    
az keyvault update-hsm --subscription $subscriptionId -g $rgName --hsm-name $keyVaultName --enable-purge-protection true
    
az keyvault key create --hsm-name  $keyVaultName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 2048

然後,建立 DiskEncryptionSet。

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
    
az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false

最後,授與對受控 HSM 的 DiskEncryptionSet 存取權。

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
    
az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys

現在您已建立並設定這些資源,接下來即可使用這些資源來保護受控磁碟。 下列連結包含範例指令碼,每個指令碼都有個別的案例,可用來保護受控磁碟。

範例

使用 Marketplace 映像建立 VM,使用客戶管理的金鑰以加密作業系統和資料磁碟

rgName=yourResourceGroupName
vmName=yourVMName
location=westcentralus
vmSize=Standard_DS3_V2
image=LinuxImageURN
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vm create -g $rgName -n $vmName -l $location --image $image --size $vmSize --generate-ssh-keys --os-disk-encryption-set $diskEncryptionSetId --data-disk-sizes-gb 128 128 --data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

加密現有的受控磁碟

您的現有磁碟不能連結至執行中的 VM,您可以使用下列指令碼,以加密這些磁碟:

rgName=yourResourceGroupName
diskName=yourDiskName
diskEncryptionSetName=yourDiskEncryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az disk update -n $diskName -g $rgName --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId

使用 Marketplace 映像建立虛擬機器擴展集,使用客戶管理的金鑰以加密作業系統和資料磁碟

rgName=yourResourceGroupName
vmssName=yourVMSSName
location=westcentralus
vmSize=Standard_DS3_V2
image=LinuxImageURN
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vmss create -g $rgName -n $vmssName --image $image --upgrade-policy automatic --admin-username azureuser --generate-ssh-keys --os-disk-encryption-set $diskEncryptionSetId --data-disk-sizes-gb 64 128 --data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

透過使用客戶管理金鑰的伺服器端加密來建立一個空磁碟,並將其連接到 VM

vmName=yourVMName
rgName=yourResourceGroupName
diskName=yourDiskName
diskSkuName=Premium_LRS
diskSizeinGiB=30
location=westcentralus
diskLUN=2
diskEncryptionSetName=yourDiskEncryptionSetName


diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az disk create -n $diskName -g $rgName -l $location --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId --size-gb $diskSizeinGiB --sku $diskSkuName

diskId=$(az disk show -n $diskName -g $rgName --query [id] -o tsv)

az vm disk attach --vm-name $vmName --lun $diskLUN --ids $diskId

變更 DiskEncryptionSet 的金鑰,以輪替參考 DiskEncryptionSet 的所有資源的金鑰


rgName=yourResourceGroupName
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName


keyVaultId=$(az keyvault show --name $keyVaultName--query [id] -o tsv)

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set update -n keyrotationdes -g keyrotationtesting --key-url $keyVaultKeyUrl --source-vault $keyVaultId

尋找磁碟的伺服器端加密狀態

az disk show -g yourResourceGroupName -n yourDiskName --query [encryption.type] -o tsv

重要

客戶管理的金鑰依賴於 Azure 資源的受管理身份,這是 Microsoft Entra ID 的一項功能。 設定客戶管理金鑰時,受控的身分識別會在幕後自動被指派到您的資源。 如果你之後將訂閱、資源群組或受管磁碟從一個 Microsoft Entra 目錄移到另一個,與受管磁碟相關的管理身份不會轉移到新租戶,因此客戶管理的金鑰可能不再有效。 更多資訊請參見 在Microsoft Entra目錄間轉移訂閱。

下一步