Azure PowerShell - 使用伺服器端加密來啟用客戶自控金鑰 - 受控磁碟
適用於:✔️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 個磁碟加密集。
- 如需將客戶管理的金鑰與共用映像資源庫搭配使用的詳細資訊,請參閱預覽:使用客戶自控金鑰加密映像 (部分機器翻譯)。
您可選擇使用自動金鑰輪替設定 Azure Key Vault 及 DiskEncryptionSet
若要搭配 SSE 使用客戶自控金鑰,您必須設定 Azure Key Vault 和 DiskEncryptionSet 資源。
請確定您已安裝最新的 Azure PowerShell 版本,而且已使用 Connect-AzAccount 登入 Azure 帳戶
建立 Azure Key Vault 執行個體和加密金鑰。
建立 Key Vault 執行個體時,您必須啟用 [清除保護]。 清除保護可確保已刪除的金鑰在保留期限結束之前,無法永久刪除。 這些設定可防止您因為意外刪除而遺失資料。 使用 Key Vault 來加密受控磁碟時,必須使用這些設定。
$ResourceGroupName="yourResourceGroupName" $LocationName="westcentralus" $keyVaultName="yourKeyVaultName" $keyName="yourKeyName" $keyDestination="Software" $diskEncryptionSetName="yourDiskEncryptionSetName" $keyVault = New-AzKeyVault -Name $keyVaultName ` -ResourceGroupName $ResourceGroupName ` -Location $LocationName ` -EnablePurgeProtection $key = Add-AzKeyVaultKey -VaultName $keyVaultName ` -Name $keyName ` -Destination $keyDestination
建立 DiskEncryptionSet 的執行個體。 您可以將 RotationToLatestKeyVersionEnabled 設定為 [$true],以啟用金鑰的自動輪替。 當您啟用自動輪替時,系統會自動更新所有受控磁碟、快照集和參考磁碟加密的映像,以在一小時內使用新版本的金鑰。
$desConfig=New-AzDiskEncryptionSetConfig -Location $LocationName ` -SourceVaultId $keyVault.ResourceId ` -KeyUrl $key.Key.Kid ` -IdentityType SystemAssigned ` -RotationToLatestKeyVersionEnabled $false $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName ` -ResourceGroupName $ResourceGroupName ` -InputObject $desConfig
將 DiskEncryptionSet 資源存取權授與金鑰保存庫。
注意
Azure 可能需要幾分鐘的時間,才能在您的 Microsoft Entra ID 中建立 DiskEncryptionSet 的身分識別。 如果您在執行以下命令時收到「找不到 Active Directory 物件」之類的錯誤,請稍候幾分鐘再重試。
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
在不同的訂用帳戶中使用金鑰保存庫
或者,您可以從單一訂用帳戶中管理 Azure Key Vault,並使用儲存在金鑰保存庫中的金鑰來加密您的組織中其他訂用帳戶中的受控磁碟和快照集。 這可讓您的安全性小組對單一訂用帳戶實行並輕鬆地管理強固的安全性原則。
重要
針對此設定,您的金鑰保存庫與磁碟加密集都必須位於相同的磁碟區域中,且使用同一位的租用戶。
下列指令碼示範如何設定磁碟加密集,以在不同的訂用帳戶中 (但在相同區域) 使用金鑰保存庫的金鑰:
$sourceSubscriptionId="<sourceSubID>"
$sourceKeyVaultName="<sourceKVName>"
$sourceKeyName="<sourceKeyName>"
$targetSubscriptionId="<targetSubID>"
$targetResourceGroupName="<targetRGName>"
$targetDiskEncryptionSetName="<targetDiskEncSetName>"
$location="<targetRegion>"
Set-AzContext -Subscription $sourceSubscriptionId
$key = Get-AzKeyVaultKey -VaultName $sourceKeyVaultName -Name $sourceKeyName
Set-AzContext -Subscription $targetSubscriptionId
$desConfig=New-AzDiskEncryptionSetConfig -Location $location `
-KeyUrl $key.Key.Kid `
-IdentityType SystemAssigned `
-RotationToLatestKeyVersionEnabled $false
$des=New-AzDiskEncryptionSet -Name $targetDiskEncryptionSetName `
-ResourceGroupName $targetResourceGroupName `
-InputObject $desConfig
範例
現在您已建立並設定這些資源,接下來即可使用這些資源來保護受控磁碟。 下列為範例指令碼,每個指令碼都有個別的案例,可用來保護受控磁碟。
使用 Marketplace 映像建立 VM,使用客戶管理的金鑰以加密作業系統和資料磁碟
複製指令碼,以您自己的參數取代所有範例值,然後加以執行。
$VMLocalAdminUser = "yourVMLocalAdminUserName"
$VMLocalAdminSecurePassword = ConvertTo-SecureString <password> -AsPlainText -Force
$LocationName = "yourRegion"
$ResourceGroupName = "yourResourceGroupName"
$ComputerName = "yourComputerName"
$VMName = "yourVMName"
$VMSize = "yourVMSize"
$diskEncryptionSetName="yourdiskEncryptionSetName"
$NetworkName = "yourNetworkName"
$NICName = "yourNICName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
$NIC = New-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroupName -Location $LocationName -SubnetId $Vnet.Subnets[0].Id
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter' -Version latest
$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $($VMName +"_OSDisk") -DiskEncryptionSetId $diskEncryptionSet.Id -CreateOption FromImage
$VirtualMachine = Add-AzVMDataDisk -VM $VirtualMachine -Name $($VMName +"DataDisk1") -DiskSizeInGB 128 -StorageAccountType Premium_LRS -CreateOption Empty -Lun 0 -DiskEncryptionSetId $diskEncryptionSet.Id
New-AzVM -ResourceGroupName $ResourceGroupName -Location $LocationName -VM $VirtualMachine -Verbose
將伺服器端加密與客戶管理的金鑰搭配使用,以建立空磁碟,並將其連結至 VM
複製指令碼,以您自己的參數取代所有範例值,然後加以執行。
$vmName = "yourVMName"
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskSKU = "Premium_LRS"
$diskSizeinGiB = 30
$diskLUN = 1
$diskEncryptionSetName="yourDiskEncryptionSetName"
$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroupName
$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName
$vm = Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Empty -DiskSizeInGB $diskSizeinGiB -StorageAccountType $diskSKU -Lun $diskLUN -DiskEncryptionSetId $diskEncryptionSet.Id
Update-AzVM -ResourceGroupName $ResourceGroupName -VM $vm
加密現有的受控磁碟
您的現有磁碟不能連結至執行中的 VM,您可以使用下列指令碼,以加密這些磁碟:
$rgName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskEncryptionSetName = "yourDiskEncryptionSetName"
$diskEncryptionSet = Get-AzDiskEncryptionSet -ResourceGroupName $rgName -Name $diskEncryptionSetName
New-AzDiskUpdateConfig -EncryptionType "EncryptionAtRestWithCustomerKey" -DiskEncryptionSetId $diskEncryptionSet.Id | Update-AzDisk -ResourceGroupName $rgName -DiskName $diskName
使用 SSE 和客戶自控金鑰加密現有虛擬機器擴展集 (統一協調流程模式)
此指令碼僅適用於統一協調流程模式中的擴展集。 對於具彈性的協調流程模式中的擴展集,請遵循加密每個 VM 的現有受控磁碟。
複製指令碼,以您自有的參數取代所有範例值,然後加以執行:
#set variables
$vmssname = "name of the vmss that is already created"
$diskencryptionsetname = "name of the diskencryptionset already created"
$vmssrgname = "vmss resourcegroup name"
$diskencryptionsetrgname = "diskencryptionset resourcegroup name"
#get vmss object and create diskencryptionset object attach to vmss os disk
$ssevmss = get-azvmss -ResourceGroupName $vmssrgname -VMScaleSetName $vmssname
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet = New-Object -TypeName Microsoft.Azure.Management.Compute.Models.DiskEncryptionSetParameters
#get diskencryption object and retrieve the resource id
$des = Get-AzDiskEncryptionSet -ResourceGroupName $diskencryptionsetrgname -Name $diskencryptionsetname
write-host "the diskencryptionset resource id is:" $des.Id
#associate DES resource id to os disk and update vmss
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet.id = $des.Id
$ssevmss | update-azvmss
使用 Marketplace 映像建立虛擬機器擴展集,使用客戶管理的金鑰以加密作業系統和資料磁碟
複製指令碼,以您自己的參數取代所有範例值,然後加以執行。
重要
自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請移至 針對 VMSS PowerShell/CLI 客戶的中斷性變更 - Microsoft 社群中樞 (英文)
$VMLocalAdminUser = "yourLocalAdminUser"
$VMLocalAdminSecurePassword = ConvertTo-SecureString Password@123 -AsPlainText -Force
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$ComputerNamePrefix = "yourComputerNamePrefix"
$VMScaleSetName = "yourVMSSName"
$VMSize = "Standard_DS3_v2"
$diskEncryptionSetName="yourDiskEncryptionSetName"
$NetworkName = "yourVNETName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
$ipConfig = New-AzVmssIpConfig -Name "myIPConfig" -SubnetId $Vnet.Subnets[0].Id
$VMSS = New-AzVmssConfig -Location $LocationName -SkuCapacity 2 -SkuName $VMSize -UpgradePolicyMode 'Automatic' -OrchestrationMode 'Uniform'
$VMSS = Add-AzVmssNetworkInterfaceConfiguration -Name "myVMSSNetworkConfig" -VirtualMachineScaleSet $VMSS -Primary $true -IpConfiguration $ipConfig
$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName
# Enable encryption at rest with customer managed keys for OS disk by setting DiskEncryptionSetId property
$VMSS = Set-AzVmssStorageProfile $VMSS -OsDiskCreateOption "FromImage" -DiskEncryptionSetId $diskEncryptionSet.Id -ImageReferenceOffer 'WindowsServer' -ImageReferenceSku '2012-R2-Datacenter' -ImageReferenceVersion latest -ImageReferencePublisher 'MicrosoftWindowsServer'
$VMSS = Set-AzVmssOsProfile $VMSS -ComputerNamePrefix $ComputerNamePrefix -AdminUsername $VMLocalAdminUser -AdminPassword $VMLocalAdminSecurePassword
# Add a data disk encrypted at rest with customer managed keys by setting DiskEncryptionSetId property
$VMSS = Add-AzVmssDataDisk -VirtualMachineScaleSet $VMSS -CreateOption Empty -Lun 1 -DiskSizeGB 128 -StorageAccountType Premium_LRS -DiskEncryptionSetId $diskEncryptionSet.Id
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
New-AzVmss -VirtualMachineScaleSet $VMSS -ResourceGroupName $ResourceGroupName -VMScaleSetName $VMScaleSetName
變更 DiskEncryptionSet 的金鑰,以輪替參考 DiskEncryptionSet 的所有資源的金鑰
複製指令碼,以您自己的參數取代所有範例值,然後加以執行。
$ResourceGroupName="yourResourceGroupName"
$keyVaultName="yourKeyVaultName"
$keyName="yourKeyName"
$diskEncryptionSetName="yourDiskEncryptionSetName"
$keyVault = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $ResourceGroupName
$keyVaultKey = Get-AzKeyVaultKey -VaultName $keyVaultName -Name $keyName
Update-AzDiskEncryptionSet -Name $diskEncryptionSetName -ResourceGroupName $ResourceGroupName -SourceVaultId $keyVault.ResourceId -KeyUrl $keyVaultKey.Id
尋找磁碟的伺服器端加密狀態
$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"
$disk=Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName
$disk.Encryption.Type
重要
客戶自控金鑰須依賴 Azure 資源受控識別,這是 Microsoft Entra ID 的一項功能。 當您設定客戶管理的金鑰時,受控識別會在幕後自動指派給您的資源。 如果您之後將訂用帳戶、資源群組或受控磁碟從一個 Microsoft Entra 目錄移至另一個目錄,與受控磁碟相關聯的受控識別不會移轉至新的租用戶,因此,客戶自控金鑰可能無法再運作。 如需詳細資訊,請參閱在 Microsoft Entra 目錄之間移轉訂用帳戶 (部分機器翻譯)。