Azure PowerShell. Включение управляемых клиентом ключей с шифрованием на стороне сервера — управляемые диски

Применимо к: ✔️ Виртуальным машинам Windows ✔️ Гибким масштабируемым наборам ✔️ Унифицированным масштабируемым наборам

Хранилище дисков Azure позволяет управлять собственными ключами при использовании шифрования на стороне сервера (SSE) для управляемых дисков при выборе. Общие концепции, связанные с SSE с использованием ключей, управляемых клиентом, и к другими типами шифрования управляемых дисков, см. в разделе Ключи, управляемые клиентом статьи о шифровании дисков.

Ограничения

В настоящее время ключи, управляемые клиентом, имеют следующие ограничения.

  • Если эта функция включена для диска с добавочными моментальными снимками, его нельзя отключить на этом диске или его моментальных снимках. Чтобы обойти эту проблему, скопируйте все данные на совершенно другой управляемый диск, который не использует ключи, управляемые клиентом. Это можно сделать с помощью модуля Azure CLI или модуля Azure PowerShell.
  • Диск и все связанные с ним инкрементные снимки должны иметь один и тот же набор шифрования дисков.
  • Поддерживаются только ключи RSA для программного обеспечения и HSM с размерами 2048 бит, 3072 бит и 4096 бит. Другие ключи или размеры не поддерживаются.
    • ключи HSM требуют уровня премиум в хранилищах ключей Azure.
  • Только для дисков категории "Ультра" и SSD уровня "Премиум" версии 2:
    • (предварительная версия) Управляемые удостоверения, назначаемые пользователем, доступны для дисков Категории "Ультра" и SSD уровня "Премиум" версии 2, зашифрованных с помощью ключей, управляемых клиентом.
  • Большинство ресурсов, связанных с ключами, управляемыми клиентом (наборы шифрования дисков, виртуальные машины, диски и моментальные снимки), должны находиться в одной подписке и одном регионе.
  • Диски, зашифрованные с помощью управляемых клиентом ключей, могут перемещаться в другую группу ресурсов, только если виртуальная машина, к которой они подключены, деактивирована.
  • Диски, моментальные снимки и изображения, зашифрованные с помощью ключей, управляемых клиентом, нельзя перемещать между подписками.
  • Управляемые диски в настоящее время или ранее зашифрованные с помощью Шифрование дисков Azure не могут быть зашифрованы с помощью ключей, управляемых клиентом.
  • Можно создавать до 5000 наборов шифрования дисков в каждом регионе для каждой подписки.
  • Сведения об использовании ключей, управляемых клиентом, с общими коллекциями образов см. в статье "Предварительная версия: использование управляемых клиентом ключей для шифрования изображений".

Настройка Azure Key Vault и DiskEncryptionSet с автоматическим поворотом ключей

Чтобы использовать управляемые клиентом ключи с SSE, необходимо настроить Azure Key Vault и ресурс DiskEncryptionSet.

  1. Убедитесь, что вы установили последнюю версию Azure PowerShell и вошли в учетную запись Azure с помощью Connect-AzAccount

  2. Создайте экземпляр 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
    
    Set-AzKeyVaultKeyRotationPolicy -VaultName $keyVaultName -KeyName $keyName -ExpiresIn P2Y -KeyRotationLifetimeAction @{Action="Rotate";TimeBeforeExpiry = "P18M"}
    
  3. Создайте экземпляр DiskEncryptionSet. Этот скрипт устанавливает RotationToLatestKeyVersionEnabled равным $true, чтобы включить автоматическую ротацию ключа. При включении автоматического вращения система автоматически обновляет все управляемые диски, моментальные снимки и образы, ссылающиеся на комплект шифрования дисков, чтобы использовать новую версию ключа в течение одного часа.

    $desConfig=New-AzDiskEncryptionSetConfig -Location $LocationName `
        -SourceVaultId $keyVault.ResourceId `
        -KeyUrl $key.Key.Kid `
        -IdentityType SystemAssigned `
        -RotationToLatestKeyVersionEnabled $true
    
    $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName `
           -ResourceGroupName $ResourceGroupName `
           -InputObject $desConfig
    
  4. Предоставьте ресурсу DiskEncryptionSet доступ к хранилищу ключей.

    Примечание.

    Для создания идентификатора DiskEncryptionSet в вашей Microsoft Entra ID в Azure может потребоваться несколько минут. Если при выполнении следующей команды возникает сообщение об ошибке "Не удается найти объект Active Directory", подождите несколько минут и повторите попытку.

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

Использование хранилища ключей в другой подписке

Кроме того, вы можете централизованно управлять Azure Key Vaults из одной подписки и использовать ключи, хранящиеся в Key Vault для шифрования управляемых дисков и моментальных снимков в других подписках в организации. Это позволяет группе безопасности применять и легко управлять надежной политикой безопасности для одной подписки.

Внимание

Для этой конфигурации Key Vault и набор шифрования дисков должны находиться в одном регионе и использовать один и тот же клиент.

Следующий сценарий — это пример настройки набора шифрования дисков для использования ключа из 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 $true

$des=New-AzDiskEncryptionSet -Name $targetDiskEncryptionSetName `
-ResourceGroupName $targetResourceGroupName `
-InputObject $desConfig

Примеры

Итак, создав и настроив эти ресурсы, вы теперь можете использовать их для защиты управляемых дисков. Ниже представлены примеры скриптов с описанием соответствующего сценария, которые можно использовать для защиты управляемых дисков.

Создание виртуальной машины с помощью образа Marketplace, шифрование дисков операционной системы и данных с помощью управляемых клиентом ключей

Скопируйте скрипт, замените все примеры значений собственными параметрами и выполните его.

$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

Создайте пустой диск, зашифрованный с помощью шифрования на стороне сервера, с ключами, управляемыми клиентом, и подключите его к виртуальной машине.

Скопируйте скрипт, замените все примеры значений собственными параметрами и выполните его.

$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

Шифрование существующих управляемых дисков

Существующие диски не должны быть подключены к работающей виртуальной машине, чтобы их можно было зашифровать с помощью следующего скрипта.

$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 и ключей, управляемых клиентом

Этот скрипт будет работать только для масштабируемых наборов в режиме универсальной оркестрации. Для масштабируемых наборов в режиме гибкой оркестрации выполните шифрование существующих управляемых дисков для каждой виртуальной машины.

Скопируйте скрипт, замените все примеры значений собственными параметрами и выполните его.

#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 года масштабируемые наборы виртуальных машин, созданные с помощью PowerShell и Azure CLI по умолчанию будут использоваться в режиме гибкой оркестрации, если режим оркестрации не указан. Дополнительные сведения об этом изменении и действиях, которые необходимо предпринять, см. в Разрывное изменение для клиентов PowerShell/CLI vmSS — Майкрософт 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

Изменение ключа для 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.

Следующие шаги