Criptografar SO e discos de dados anexados em um conjunto de dimensionamento de máquina virtual com o Azure PowerShell

O módulo do Azure PowerShell é utilizado para criar e gerir recursos do Azure a partir da linha de comandos do PowerShell ou em scripts. Este artigo mostra como usar o Azure PowerShell para criar e criptografar um Conjunto de Dimensionamento de Máquina Virtual. Para obter mais informações sobre como aplicar o Azure Disk Encryption a um Conjunto de Dimensionamento de Máquina Virtual, consulte Azure Disk Encryption for Virtual Machine Scale Sets.

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Button to launch Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

Criar um Cofre da Chave do Azure habilitado para criptografia de disco

O Azure Key Vault pode armazenar chaves, segredos ou palavras-passe que lhe permitem implementá-los com segurança nas suas aplicações e serviços. As chaves criptográficas são armazenadas no Cofre de Chaves do Azure usando proteção de software ou você pode importar ou gerar suas chaves em HSMs (Módulos de Segurança de Hardware) certificados de acordo com os padrões validados pelo FIPS 140. Essas chaves criptográficas são usadas para criptografar e descriptografar discos virtuais anexados à sua VM. Você mantém o controle dessas chaves criptográficas e pode auditar seu uso.

Crie um Cofre de Chaves com New-AzKeyVault. Para permitir que o Cofre da Chave seja usado para criptografia de disco, defina o parâmetro EnabledForDiskEncryption . O exemplo a seguir também define variáveis para nome do grupo de recursos, nome do cofre da chave e local. Forneça seu próprio nome exclusivo do Cofre da Chave:

$rgName="myResourceGroup"
$vaultName="myuniquekeyvault"
$location = "EastUS"

New-AzResourceGroup -Name $rgName -Location $location
New-AzKeyVault -VaultName $vaultName -ResourceGroupName $rgName -Location $location -EnabledForDiskEncryption

Usar um Cofre da Chave existente

Esta etapa só é necessária se você tiver um Cofre de Chaves existente que deseja usar com criptografia de disco. Ignore esta etapa se você criou um Cofre da Chave na seção anterior.

Você pode habilitar um Cofre de Chaves existente na mesma assinatura e região que o conjunto de escala para criptografia de disco com Set-AzKeyVaultAccessPolicy. Defina o nome do Cofre da Chave existente na variável $vaultName da seguinte maneira:

$vaultName="myexistingkeyvault"
Set-AzKeyVaultAccessPolicy -VaultName $vaultName -EnabledForDiskEncryption

Criar um conjunto de dimensionamento

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

Primeiro, defina um nome de utilizador e uma palavra-passe para as instâncias da VM com Get-Credential:

$cred = Get-Credential

Agora crie um conjunto de escala de máquina virtual com New-AzVmss. Para distribuir o tráfego pelas instâncias de VM individuais, é também criado um balanceador de carga. O balanceador de carga inclui regras para distribuir tráfego na porta TCP 80, bem como permitir o tráfego de ambiente de trabalho remoto na porta TCP 3389 e a comunicação remota do PowerShell na porta TCP 5985:

$vmssName="myScaleSet"

New-AzVmss `
    -ResourceGroupName $rgName `
    -VMScaleSetName $vmssName `
    -OrchestrationMode "flexible" `
    -Location $location `
    -VirtualNetworkName "myVnet" `
    -SubnetName "mySubnet" `
    -PublicIpAddressName "myPublicIPAddress" `
    -LoadBalancerName "myLoadBalancer" `
    -Credential $cred

Ativar encriptação

Para criptografar instâncias de VM em um conjunto de escala, primeiro obtenha algumas informações sobre o URI do Cofre da Chave e a ID do recurso com Get-AzKeyVault. Essas variáveis são usadas para iniciar o processo de criptografia com Set-AzVmssDiskEncryptionExtension:

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

Quando solicitado, digite y para continuar o processo de criptografia de disco nas instâncias de VM do conjunto de escala.

Habilite a criptografia usando o KEK para encapsular a chave

Você também pode usar uma chave de criptografia de chave para maior segurança ao criptografar o Conjunto de Dimensionamento de Máquina Virtual.

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId
$keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $vaultName -Name $keyEncryptionKeyName).Key.kid;

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId `
    -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

Nota

A sintaxe para o valor do parâmetro disk-encryption-keyvault é a cadeia de caracteres do identificador completo:
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]

A sintaxe para o valor do parâmetro key-encryption-key é o URI completo para o KEK como em:
https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

Verificar o progresso da encriptação

Para verificar o status da criptografia de disco, use Get-AzVmssDiskEncryption:

Get-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

Quando as instâncias de VM são criptografadas, o código EncryptionSummary relata ProvisioningState/succeed , conforme mostrado na saída de exemplo a seguir:

ResourceGroupName            : myResourceGroup
VmScaleSetName               : myScaleSet
EncryptionSettings           :
  KeyVaultURL                : https://myuniquekeyvault.vault.azure.net/
  KeyEncryptionKeyURL        :
  KeyVaultResourceId         : /subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myuniquekeyvault
  KekVaultResourceId         :
  KeyEncryptionAlgorithm     :
  VolumeType                 : All
  EncryptionOperation        : EnableEncryption
EncryptionSummary[0]         :
  Code                       : ProvisioningState/succeeded
  Count                      : 2
EncryptionEnabled            : True
EncryptionExtensionInstalled : True

Desativar encriptação

Se você não quiser mais usar discos de instâncias de VM criptografadas, poderá desabilitar a criptografia com Disable-AzVmssDiskEncryption da seguinte maneira:

Disable-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

Próximos passos

  • Neste artigo, você usou o Azure PowerShell para criptografar um Conjunto de Dimensionamento de Máquina Virtual. Você também pode usar os modelos da CLI do Azure ou do Azure Resource Manager.
  • Se desejar que a Criptografia de Disco do Azure seja aplicada após o provisionamento de outra extensão, você poderá usar o sequenciamento de extensão.