Udostępnij za pośrednictwem


Azure PowerShell — Włączanie kluczy zarządzanych przez klienta z szyfrowaniem po stronie serwera — dyski zarządzane

Dotyczy: ✔️ Maszyny wirtualne z systemem Windows — elastyczne zestawy ✔️ ✔️ skalowania jednolite zestawy skalowania

Usługa Azure Disk Storage umożliwia zarządzanie własnymi kluczami podczas korzystania z szyfrowania po stronie serwera (SSE) dla dysków zarządzanych, jeśli wybierzesz. Aby uzyskać informacje koncepcyjne dotyczące SSE z kluczami zarządzanymi przez klienta i innymi typami szyfrowania dysków zarządzanych przez klienta, zobacz sekcję Klucze zarządzane przez klienta w artykule dotyczącym szyfrowania dysków.

Ograniczenia

Na razie klucze zarządzane przez klienta mają następujące ograniczenia:

  • Jeśli ta funkcja jest włączona dla dysku z migawkami przyrostowymi, nie można jej wyłączyć na tym dysku ani jego migawkach. Aby obejść ten problem, skopiuj wszystkie dane na zupełnie inny dysk zarządzany, który nie korzysta z kluczy zarządzanych przez klienta. Można to zrobić za pomocą interfejsu wiersza polecenia platformy Azure lub modułu Azure PowerShell.
  • Obsługiwane są tylko klucze oprogramowania i modułu HSM RSA o rozmiarach 2048-bitowych, 3072-bitowych i 4096-bitowych, bez innych kluczy ani rozmiarów.
    • Klucze HSM wymagają warstwy Premium usługi Azure Key Vault.
  • Tylko w przypadku dysków w warstwie Ultra Disk i SSD w warstwie Premium w wersji 2:
    • Migawki utworzone na podstawie dysków zaszyfrowanych za pomocą szyfrowania po stronie serwera i kluczy zarządzanych przez klienta muszą być szyfrowane przy użyciu tych samych kluczy zarządzanych przez klienta.
    • Tożsamości zarządzane przypisane przez użytkownika nie są obsługiwane w przypadku dysków w warstwie Ultra i dysków SSD w warstwie Premium w wersji 2 zaszyfrowanych przy użyciu kluczy zarządzanych przez klienta.
  • Większość zasobów związanych z kluczami zarządzanymi przez klienta (zestawy szyfrowania dysków, maszyny wirtualne, dyski i migawki) musi znajdować się w tej samej subskrypcji i regionie.
    • Usługi Azure Key Vault mogą być używane z innej subskrypcji, ale muszą znajdować się w tym samym regionie co zestaw szyfrowania dysków. Jako wersja zapoznawcza możesz używać usługi Azure Key Vault z różnych dzierżaw firmy Microsoft Entra.
  • Dyski zaszyfrowane za pomocą kluczy zarządzanych przez klienta mogą być przenoszone tylko do innej grupy zasobów, jeśli maszyna wirtualna, do której są dołączone, zostanie cofnięto przydział.
  • Dysków, migawek i obrazów zaszyfrowanych przy użyciu kluczy zarządzanych przez klienta nie można przenosić między subskrypcjami.
  • Dyski zarządzane obecnie lub wcześniej zaszyfrowane przy użyciu usługi Azure Disk Encryption nie mogą być szyfrowane przy użyciu kluczy zarządzanych przez klienta.
  • Można utworzyć maksymalnie 5000 zestawów szyfrowania dysków na region na subskrypcję.
  • Aby uzyskać informacje na temat używania kluczy zarządzanych przez klienta z galeriami obrazów udostępnionych, zobacz Wersja zapoznawcza: używanie kluczy zarządzanych przez klienta do szyfrowania obrazów.

Konfigurowanie usługi Azure Key Vault i diskEncryptionSet opcjonalnie z automatycznym obracaniem kluczy

Aby używać kluczy zarządzanych przez klienta z funkcją SSE, należy skonfigurować usługę Azure Key Vault i zasób DiskEncryptionSet.

  1. Upewnij się, że zainstalowano najnowszą wersję programu Azure PowerShell i zalogowano się do konta platformy Azure przy użyciu polecenia Połączenie-AzAccount

  2. Utwórz wystąpienie usługi Azure Key Vault i klucza szyfrowania.

    Podczas tworzenia wystąpienia usługi Key Vault należy włączyć ochronę przed przeczyszczeniem. Ochrona przed przeczyszczeniem gwarantuje, że usunięty klucz nie może zostać trwale usunięty, dopóki okres przechowywania nie wygaśnie. Te ustawienia chronią cię przed utratą danych z powodu przypadkowego usunięcia. Te ustawienia są obowiązkowe w przypadku używania usługi Key Vault do szyfrowania dysków zarządzanych.

    $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 
    
  3. Utwórz wystąpienie elementu DiskEncryptionSet. Można ustawić wartość RotationToLatestKeyVersionEnabled równą $true, aby włączyć automatyczną rotację klucza. Po włączeniu rotacji automatycznej system automatycznie zaktualizuje wszystkie dyski zarządzane, migawki i obrazy odwołujące się do zestawu szyfrowania dysku, aby używać nowej wersji klucza w ciągu jednej godziny.

    $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
    
  4. Udziel zasobowi DiskEncryptionSet dostępu do magazynu kluczy.

    Uwaga

    Utworzenie tożsamości elementu DiskEncryptionSet na platformie Azure w identyfikatorze Entra firmy Microsoft może potrwać kilka minut. Jeśli podczas uruchamiania następującego polecenia wystąpi błąd, taki jak "Nie można odnaleźć obiektu usługi Active Directory", zaczekaj kilka minut i spróbuj ponownie.

    Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
    

Używanie magazynu kluczy w innej subskrypcji

Alternatywnie możesz zarządzać usługą Azure Key Vault centralnie z jednej subskrypcji i używać kluczy przechowywanych w usłudze Key Vault do szyfrowania dysków zarządzanych i migawek w innych subskrypcjach w organizacji. Dzięki temu zespół ds. zabezpieczeń może wymusić i łatwo zarządzać niezawodnymi zasadami zabezpieczeń w jednej subskrypcji.

Ważne

W przypadku tej konfiguracji zarówno usługa Key Vault, jak i zestaw szyfrowania dysków muszą znajdować się w tym samym regionie i korzystać z tej samej dzierżawy.

Poniższy skrypt to przykład konfigurowania zestawu szyfrowania dysku w celu użycia klucza z usługi Key Vault w innej subskrypcji, ale w tym samym regionie:

$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

Przykłady

Po utworzeniu i skonfigurowaniu tych zasobów można ich użyć do zabezpieczenia dysków zarządzanych. Poniżej przedstawiono przykładowe skrypty, z których każdy ma odpowiedni scenariusz, którego można użyć do zabezpieczenia dysków zarządzanych.

Tworzenie maszyny wirtualnej przy użyciu obrazu witryny Marketplace, szyfrowanie dysków systemu operacyjnego i danych przy użyciu kluczy zarządzanych przez klienta

Skopiuj skrypt, zastąp wszystkie przykładowe wartości własnymi parametrami, a następnie uruchom go.

$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

Tworzenie pustego dysku zaszyfrowanego przy użyciu szyfrowania po stronie serwera z kluczami zarządzanymi przez klienta i dołączanie go do maszyny wirtualnej

Skopiuj skrypt, zastąp wszystkie przykładowe wartości własnymi parametrami, a następnie uruchom go.

$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

Szyfrowanie istniejących dysków zarządzanych

Istniejące dyski nie mogą być dołączone do uruchomionej maszyny wirtualnej w celu zaszyfrowania ich przy użyciu następującego skryptu:

$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

Szyfrowanie istniejącego zestawu skalowania maszyn wirtualnych (jednolity tryb aranżacji) przy użyciu kluczy SSE i zarządzanych przez klienta

Ten skrypt będzie działać tylko w przypadku zestawów skalowania w trybie jednolitej aranżacji. W przypadku zestawów skalowania w trybie elastycznej aranżacji postępuj zgodnie z instrukcjami Szyfrowanie istniejących dysków zarządzanych dla każdej maszyny wirtualnej.

Skopiuj skrypt, zastąp wszystkie przykładowe wartości własnymi parametrami, a następnie uruchom go:

#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

Tworzenie zestawu skalowania maszyn wirtualnych przy użyciu obrazu witryny Marketplace, szyfrowanie dysków systemu operacyjnego i danych przy użyciu kluczy zarządzanych przez klienta

Skopiuj skrypt, zastąp wszystkie przykładowe wartości własnymi parametrami, a następnie uruchom go.

Ważne

Od listopada 2023 r. zestawy skalowania maszyn wirtualnych utworzone przy użyciu programu PowerShell i interfejsu wiersza polecenia platformy Azure będą domyślnie ustawiać tryb elastycznej orkiestracji, jeśli nie określono trybu aranżacji. Aby uzyskać więcej informacji na temat tej zmiany i akcji, które należy wykonać, zobacz Zmiana powodująca niezgodność dla klientów programu PowerShell/interfejsu wiersza polecenia usługi VMSS — Microsoft Community Hub

$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

Zmień klucz elementu DiskEncryptionSet, aby obrócić klucz dla wszystkich zasobów odwołujących się do elementu DiskEncryptionSet

Skopiuj skrypt, zastąp wszystkie przykładowe wartości własnymi parametrami, a następnie uruchom go.

$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

Znajdowanie stanu szyfrowania po stronie serwera dysku

$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"

$disk=Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName
$disk.Encryption.Type

Ważne

Klucze zarządzane przez klienta opierają się na tożsamościach zarządzanych dla zasobów platformy Azure— funkcji identyfikatora Entra firmy Microsoft. Podczas konfigurowania kluczy zarządzanych przez klienta tożsamość zarządzana jest automatycznie przypisywana do zasobów w ramach tych elementów. Jeśli następnie przeniesiesz subskrypcję, grupę zasobów lub dysk zarządzany z jednego katalogu firmy Microsoft Entra do innego, tożsamość zarządzana skojarzona z dyskami zarządzanymi nie zostanie przeniesiona do nowej dzierżawy, więc klucze zarządzane przez klienta mogą już nie działać. Aby uzyskać więcej informacji, zobacz Przenoszenie subskrypcji między katalogami firmy Microsoft Entra.

Następne kroki