使用 Azure CLI 為受控磁碟啟用採用客戶自控金鑰的伺服器端加密
適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集
Azure 磁碟儲存體可讓您在針對受控磁碟使用伺服器端加密 (SSE) 時,選擇管理自己的金鑰。 如需 SSE 與客戶自控金鑰及其他受控磁碟加密類型的概念資訊,請參閱磁碟加密文章的客戶自控金鑰一節。
限制
目前,客戶管理的金鑰具有下列限制:
- 如果已對具有增量快照集的磁碟啟用此功能,就無法在該磁碟或其快照集上停用此功能。 若要解決此問題,請將所有資料複製到未使用客戶自控金鑰的另一個完全不同受控磁碟。 您可以使用 Azure CLI 或 Azure PowerShell 模組來解決。
- 磁碟及其所有相關聯的增量快照集必須具有相同的磁碟加密集。
- 僅支援大小為 2048 位元、3072 位元和 4096 位元的軟體和 HSM RSA 金鑰,不支援其他金鑰或大小。
- HSM 金鑰需要 Azure 金鑰保存庫的進階服務層級。
- 僅適用於 Ultra 磁碟和進階 SSD v2 磁碟:
- 從使用伺服器端加密和客戶自控密鑰加密的快照集所建立的磁碟,必須使用相同的磁碟加密集來加密。
- 使用客戶自控金鑰加密的 Ultra 磁碟和進階 SSD v2 磁碟不支援使用者指派的受控識別。
- 目前不支援使用儲存在不同的Microsoft Entra ID 租用戶中儲存的 Azure 金鑰保存庫,使用客戶管理的密鑰加密 Ultra 磁碟和進階 SSD v2 磁碟。
- 幾乎所有與客戶管理金鑰相關的資源 (磁碟加密集、VM、磁碟和快照集) 必須位於相同的訂閱和區域中。
- Azure Key Vault 可從不同的訂用帳戶使用,但必須與磁碟加密集位於相同的區域中。 作為預覽版,您可以從不同的 Microsoft Entra 租用戶使用 Azure Key Vault。
- 只有在相連結的 VM 解除配置時,使用客戶自控金鑰加密的磁碟才能移至另一個資源群組。
- 使用客戶自控金鑰加密的磁碟、快照集和映像,無法在訂用帳戶之間移動。
- 目前正在或之前使用 Azure 磁碟加密進行加密的受控磁碟,將無法使用客戶自控金鑰進行加密。
- 每個區域的每個訂用帳戶最多只能建立 5000 個磁碟加密集。
- 如需將客戶自控金鑰與共用映像資源庫搭配使用的詳細資訊,請參閱預覽:使用客戶自控金鑰加密映像。
建立資源
啟用此功能之後,您必須設定 DiskEncryptionSet 和 Azure Key Vault 或 Azure Key Vault 受控 HSM。
Azure Key Vault
建立 Key Vault 時,您必須啟用清除保護。 清除保護可確保已刪除的金鑰在保留期限結束之前,無法永久刪除。 這些設定可防止您因為意外刪除而遺失資料。 使用 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 受控 HSM
或者,您可以使用受控 HSM 來處理金鑰。
若要這樣做,您必須完成下列必要條件:
- 安裝最新的 Azure CLI,並使用 az login 來登入 Azure 帳戶。
- 建立及設定受控 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
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 目錄之間移轉訂用帳戶 (部分機器翻譯)。