Azure PowerShell – Ativar as chaves geridas pelo cliente com a encriptação do lado do servidor – discos geridos
Aplica-se a: ✔️ VMs ✔️ do Windows Conjuntos ✔️ de escala flexíveis Conjuntos de escalas uniformes
O Armazenamento em Disco do Azure permite que você gerencie suas próprias chaves ao usar a criptografia do lado do servidor (SSE) para discos gerenciados, se desejar. Para obter informações conceituais sobre SSE com chaves gerenciadas pelo cliente e outros tipos de criptografia de disco gerenciado, consulte a seção Chaves gerenciadas pelo cliente de nosso artigo sobre criptografia de disco.
Restrições
Por enquanto, as chaves gerenciadas pelo cliente têm as seguintes restrições:
- Se esse recurso estiver habilitado para um disco com snapshots incrementais, ele não poderá ser desabilitado nesse disco ou em seus snapshots. Para contornar isso, copie todos os dados para um disco gerenciado totalmente diferente que não esteja usando chaves gerenciadas pelo cliente. Você pode fazer isso com a CLI do Azure ou o módulo do Azure PowerShell.
- Um disco e todos os snapshots incrementais associados devem ter o mesmo conjunto de criptografia de disco.
- Apenas software e chaves HSM RSA de tamanhos de 2.048 bits, 3.072 bits e 4.096 bits são suportados, sem outras chaves ou tamanhos.
- As chaves HSM exigem a camada premium dos cofres da Chave do Azure.
- Apenas para discos Ultra e SSD Premium v2:
- Os discos criados a partir de instantâneos criptografados com criptografia do lado do servidor e chaves gerenciadas pelo cliente devem ser criptografados com o mesmo conjunto de criptografia de disco.
- As identidades gerenciadas atribuídas pelo usuário não são suportadas para discos Ultra Disks e SSD Premium v2 criptografados com chaves gerenciadas pelo cliente.
- Atualmente, não há suporte para a criptografia de discos Ultra e discos SSD Premium v2 com chaves gerenciadas pelo cliente usando os Cofres de Chaves do Azure armazenados em um locatário diferente do Microsoft Entra ID.
- A maioria dos recursos relacionados às chaves gerenciadas pelo cliente (conjuntos de criptografia de disco, VMs, discos e instantâneos) deve estar na mesma assinatura e região.
- Os Cofres de Chaves do Azure podem ser usados a partir de uma assinatura diferente, mas devem estar na mesma região do conjunto de criptografia de disco. Como visualização, você pode usar os Cofres de Chaves do Azure de diferentes locatários do Microsoft Entra.
- Os discos criptografados com chaves gerenciadas pelo cliente só podem ser movidos para outro grupo de recursos se a VM à qual estão conectados for deslocalizada.
- Discos, instantâneos e imagens criptografados com chaves gerenciadas pelo cliente não podem ser movidos entre assinaturas.
- Os discos gerenciados atualmente ou anteriormente criptografados usando o Azure Disk Encryption não podem ser criptografados usando chaves gerenciadas pelo cliente.
- Só pode criar até 5000 conjuntos de criptografia de disco por região e por assinatura.
- Para obter informações sobre como usar chaves gerenciadas pelo cliente com galerias de imagens compartilhadas, consulte Visualização: usar chaves gerenciadas pelo cliente para criptografar imagens.
Configurar um Cofre de Chaves do Azure e DiskEncryptionSet opcionalmente com rotação automática de chaves
Para usar chaves gerenciadas pelo cliente com SSE, você deve configurar um Cofre de Chaves do Azure e um recurso DiskEncryptionSet.
Certifique-se de que instalou a versão mais recente do Azure PowerShell e que tem sessão iniciada numa conta do Azure com Connect-AzAccount
Crie uma instância do Cofre da Chave do Azure e uma chave de criptografia.
Ao criar a instância do Cofre da Chave, você deve habilitar a proteção contra limpeza. A proteção contra limpeza garante que uma chave excluída não possa ser excluída permanentemente até que o período de retenção expire. Estas definições protegem-no contra a perda de dados devido à eliminação acidental. Essas configurações são obrigatórias ao usar um Cofre de Chaves para criptografar discos gerenciados.
$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
Crie uma instância de um DiskEncryptionSet. Você pode definir RotationToLatestKeyVersionEnabled igual a $true para habilitar a rotação automática da chave. Quando você habilita a rotação automática, o sistema atualiza automaticamente todos os discos gerenciados, instantâneos e imagens que fazem referência ao conjunto de criptografia de disco para usar a nova versão da chave dentro de uma hora.
$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
Conceda ao recurso DiskEncryptionSet acesso ao cofre de chaves.
Nota
Pode levar alguns minutos para o Azure criar a identidade do seu DiskEncryptionSet em sua ID do Microsoft Entra. Se você receber um erro como "Não é possível localizar o objeto do Ative Directory" ao executar o seguinte comando, aguarde alguns minutos e tente novamente.
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
Usar um cofre de chaves em uma assinatura diferente
Como alternativa, você pode gerenciar seus Cofres de Chaves do Azure centralmente a partir de uma única assinatura e usar as chaves armazenadas no Cofre de Chaves para criptografar discos gerenciados e instantâneos em outras assinaturas em sua organização. Isso permite que sua equipe de segurança aplique e gerencie facilmente uma política de segurança robusta para uma única assinatura.
Importante
Para essa configuração, o Cofre da Chave e o conjunto de criptografia de disco devem estar na mesma região e usando o mesmo locatário.
O script a seguir é um exemplo de como você configuraria um conjunto de criptografia de disco para usar uma chave de um Cofre de Chaves em uma assinatura diferente, mas na mesma região:
$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
Exemplos
Agora que você criou e configurou esses recursos, pode usá-los para proteger seus discos gerenciados. A seguir estão exemplos de scripts, cada um com um respetivo cenário, que você pode usar para proteger seus discos gerenciados.
Crie uma VM usando uma imagem do Marketplace, criptografando o sistema operacional e os discos de dados com chaves gerenciadas pelo cliente
Copie o script, substitua todos os valores de exemplo por seus próprios parâmetros e execute-o.
$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
Crie um disco vazio criptografado usando criptografia do lado do servidor com chaves gerenciadas pelo cliente e anexe-o a uma VM
Copie o script, substitua todos os valores de exemplo por seus próprios parâmetros e execute-o.
$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
Criptografar discos gerenciados existentes
Seus discos existentes não devem ser anexados a uma VM em execução para que você os criptografe usando o seguinte script:
$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
Criptografar um conjunto de dimensionamento de máquina virtual existente (modo de orquestração uniforme) com SSE e chaves gerenciadas pelo cliente
Este script funcionará apenas para conjuntos de escalas no modo de orquestração uniforme. Para conjuntos de dimensionamento no modo de orquestração flexível, siga a opção Criptografar discos gerenciados existentes para cada VM.
Copie o script, substitua todos os valores de exemplo por seus próprios parâmetros e execute-o:
#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
Crie um conjunto de dimensionamento de máquina virtual usando uma imagem do Marketplace, criptografando o sistema operacional e os discos de dados com chaves gerenciadas pelo cliente
Copie o script, substitua todos os valores de exemplo por seus próprios parâmetros e execute-o.
Importante
A partir de novembro de 2023, os conjuntos de dimensionamento de VM criados usando o PowerShell e a CLI do Azure assumirão como padrão o Modo de Orquestração Flexível se nenhum modo de orquestração for especificado. Para obter mais informações sobre essa alteração e quais ações você deve tomar, vá para Breaking Change for VMSS PowerShell/CLI Customers - 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
Altere a chave de um DiskEncryptionSet para girar a chave para todos os recursos que fazem referência ao DiskEncryptionSet
Copie o script, substitua todos os valores de exemplo por seus próprios parâmetros e execute-o.
$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
Localizar o status da criptografia do lado do servidor de um disco
$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"
$disk=Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName
$disk.Encryption.Type
Importante
As chaves gerenciadas pelo cliente dependem de identidades gerenciadas para recursos do Azure, um recurso do Microsoft Entra ID. Quando você configura chaves gerenciadas pelo cliente, uma identidade gerenciada é automaticamente atribuída aos seus recursos sob as cobertas. Se, posteriormente, você mover a assinatura, o grupo de recursos ou o disco gerenciado de um diretório do Microsoft Entra para outro, a identidade gerenciada associada aos discos gerenciados não será transferida para o novo locatário, portanto, as chaves gerenciadas pelo cliente podem não funcionar mais. Para obter mais informações, consulte Transferindo uma assinatura entre diretórios do Microsoft Entra.
Próximos passos
- Explore os modelos do Azure Resource Manager para criar discos criptografados com chaves gerenciadas pelo cliente
- Replicar máquinas com discos habilitados para chaves gerenciadas pelo cliente
- Configurar a recuperação após desastre de VMs do VMware para o Azure com o PowerShell
- Configurar a recuperação após desastre para o Azure para VMs Hyper-V com o PowerShell e com o Azure Resource Manager