Use la CLI de Azure para habilitar el cifrado de un extremo a otro mediante el cifrado en host

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

Cuando se habilita el cifrado en el host, los datos almacenados en el host de máquina virtual se cifran en reposo y se transmiten cifrados al servido Storage. Para obtener información conceptual sobre el cifrado en el host y otros tipos de cifrado de disco administrado, consulte la sección Cifrado en el host: cifrado de un extremo a otro de los datos de la máquina virtual.

Restricciones

  • Compatible con discos Ultra de tamaño de sector 4k y SSD prémium v2.
  • Solo se admite en discos Ultra de tamaño de sector 512e y SSD prémium v2 si se crearon después del 13/5/2023.
  • No se puede habilitar en máquinas virtuales (VM) ni en conjuntos de escalado de máquinas virtuales que actualmente o nunca tenían habilitado Azure Disk Encryption.
  • No se puede habilitar Azure Disk Encryption en discos que tienen habilitado el cifrado en el host.
  • El cifrado se puede habilitar en los conjuntos de escalado de máquinas virtuales. Sin embargo, solo se cifrarán automáticamente las nuevas máquinas virtuales creadas después de habilitar el cifrado.
  • Las máquinas virtuales existentes se deben desasignar y reasignar para su cifrado.

Tamaños de máquinas virtuales que se admiten

La lista completa de tamaños de máquina virtual admitidos se puede obtener mediante programación. Para obtener información sobre cómo recuperarlos mediante programación, consulte la sección Búsqueda de tamaños de máquinas virtuales admitidos. La actualización del tamaño de la máquina virtual produce una validación para comprobar si el nuevo tamaño de máquina virtual admite la característica EncryptionAtHost.

Requisitos previos

Debe habilitar la característica para su suscripción antes de usar la propiedad EncryptionAtHost para su VM/VMSS. Siga los pasos que se indican a continuación para habilitar la característica para su suscripción:

  • Ejecute el siguiente comando para registrar la característica para su suscripción
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
  • Compruebe que el estado de registro es Registrado (tarda unos minutos). Para ello, use el comando siguiente antes de probar la característica.
az feature show --namespace Microsoft.Compute --name EncryptionAtHost

Crear recursos

Nota

Esta sección solo se aplica a las configuraciones con claves administradas por el cliente. Si usa claves administradas por la plataforma, puede ir directamente a la sección Scripts de ejemplo.

Una vez habilitada la característica, debe configurar diskEncryptionSet y una instancia de Azure Key Vault o un recurso HSM administrado por Azure Key Vault.

Azure Key Vault

  • Instale la última versión de la CLI de Azure e inicie sesión en una cuenta de Azure mediante az login.
  • Cree una instancia de Azure Key Vault y la clave de cifrado

Al crear la instancia de Key Vault, debe habilitar la protección de purgas. La protección de purgas garantiza que una clave eliminada no se puede eliminar permanentemente hasta que transcurra el período de retención. Esta configuración le protege contra la pérdida de datos debido a la eliminación accidental. Estos valores son obligatorios cuando se usa una instancia de Key Vault para cifrar discos administrados.

Importante

No use el estilo CamelCase para la región. Si lo hace, podría experimentar problemas al asignar discos adicionales al recurso en Azure Portal.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName

az account set --subscription $subscriptionId

az group create --resource-group $rgName --location $location

az keyvault create -n $keyVaultName \
-g $rgName \
-l $location \
--enable-purge-protection true 

az keyvault key create --vault-name $keyVaultName \
-n $keyName \
--protection software
  • Cree una instancia de DiskEncryptionSet. Puede establecer enable-auto-key-rotation en true para habilitar la rotación automática de la clave. Al habilitar la rotación automática, el sistema actualiza automáticamente todos los discos administrados, instantáneas e imágenes que hagan referencia al conjunto de cifrado de disco para usar la nueva versión de la clave en una hora.
keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
  • Conceda al recurso DiskEncryptionSet acceso al almacén de claves.

Nota:

Azure puede tardar unos minutos en crear la identidad de DiskEncryptionSet en Microsoft Entra ID. Si recibe un error similar a "No se encuentra el objeto en Active Directory" al ejecutar el siguiente comando, espere unos minutos y vuelva a intentarlo.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)

az keyvault set-policy -n $keyVaultName \
-g $rgName \
--object-id $desIdentity \
--key-permissions wrapkey unwrapkey get

HSM administrado por Azure Key Vault

Como alternativa, puede usar un recurso HSM administrado para manejar las claves.

Para ello, debe cumplir los siguientes requisitos previos:

Configuración

Una vez que haya creado un recurso HSM administrado y haya agregado permisos, habilite la protección de purgas y cree una clave de cifrado.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
    
az account set --subscription $subscriptionId
    
az keyvault update-hsm --subscription $subscriptionId -g $rgName --hsm-name $keyVaultName --enable-purge-protection true
    
az keyvault key create --hsm-name  $keyVaultName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 2048

A continuación, cree una instancia de diskEncryptionSet.

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
    
az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false

Por último, conceda acceso a DiskEncryptionSet para el recurso HSM administrado.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
    
az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys

Scripts de ejemplo

Creación de una máquina virtual con cifrado en el host habilitado con claves administradas por el cliente

Cree una máquina virtual con discos administrados mediante el identificador URI del recurso de DiskEncryptionSet creado anteriormente para cifrar la caché de los discos de datos y del sistema operativo con claves administradas por el cliente. Los discos temporales se cifran con claves administradas por la plataforma.

rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=LinuxImageURN
diskEncryptionSetName=yourDiskEncryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 128 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

Creación de una máquina virtual con cifrado en el host habilitado con claves administradas por la plataforma

Cree una máquina virtual con cifrado en el host habilitado para cifrar la caché de discos de datos o del sistema operativo, y discos temporales con claves administradas por la plataforma.

rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=LinuxImageURN

az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--data-disk-sizes-gb 128 128 \

Actualización de una máquina virtual para habilitar el cifrado en el host

rgName=yourRGName
vmName=yourVMName

az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=true

Comprobación del estado del cifrado en el host de una máquina virtual

rgName=yourRGName
vmName=yourVMName

az vm show -n $vmName \
-g $rgName \
--query [securityProfile.encryptionAtHost] -o tsv

Actualización de una máquina virtual para deshabilitar el cifrado en el host

Debe desasignar la máquina virtual para poder deshabilitar el cifrado en el host.

rgName=yourRGName
vmName=yourVMName

az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=false

Creación de un conjunto de escalado de máquinas virtuales con cifrado en el host habilitado con claves administradas por el cliente

Cree un conjunto de escalado de máquinas virtuales con discos administrados mediante el identificador URI del recurso de DiskEncryptionSet creado anteriormente para cifrar la caché de los discos de datos y del sistema operativo con claves administradas por el cliente. Los discos temporales se cifran con claves administradas por la plataforma.

Importante

A partir de noviembre de 2023, los conjuntos de escalado de máquinas virtuales creados con PowerShell y la CLI de Azure tendrán como valor predeterminado el modo de orquestación flexible si no se especifica ningún modo de orquestación. Para más información sobre este cambio y las acciones que debe realizar, vaya a Cambio importante para clientes de PowerShell o la CLI de VMSS: Centro de comunidad de Microsoft

rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204
diskEncryptionSetName=yourDiskEncryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image $image \
--orchestration-mode flexible \
--admin-username azureuser \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 64 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

Creación de un conjunto de escalado de máquinas virtuales con cifrado en el host habilitado con claves administradas por la plataforma

Cree un conjunto de escalado de máquinas virtuales con cifrado en el host habilitado para cifrar la caché de discos de datos o del sistema operativo, y discos temporales con claves administradas por la plataforma.

Importante

A partir de noviembre de 2023, los conjuntos de escalado de máquinas virtuales creados con PowerShell y la CLI de Azure tendrán como valor predeterminado el modo de orquestación flexible si no se especifica ningún modo de orquestación. Para más información sobre este cambio y las acciones que debe realizar, vaya a Cambio importante para clientes de PowerShell o la CLI de VMSS: Centro de comunidad de Microsoft.

rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204

az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image $image \
--orchestration-mode flexible \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 64 128 \

Actualización de un conjunto de escalado de máquinas virtuales para habilitar el cifrado en el host

rgName=yourRGName
vmssName=yourVMName

az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=true

Comprobación del estado del cifrado en el host de un conjunto de escalado de máquinas virtuales

rgName=yourRGName
vmssName=yourVMName

az vmss show -n $vmssName \
-g $rgName \
--query [virtualMachineProfile.securityProfile.encryptionAtHost] -o tsv

Actualización de un conjunto de escalado de máquinas virtuales para deshabilitar el cifrado en el host

Puede deshabilitar el cifrado en el host en el conjunto de escalado de máquinas virtuales, pero esto solo afectará a las máquinas virtuales creadas después de deshabilitar el cifrado en el host. En el caso de las máquinas virtuales existentes, debe desasignar la máquina virtual, deshabilitar el cifrado en el host en esa máquina virtual individual y volver a asignar la máquina virtual.

rgName=yourRGName
vmssName=yourVMName

az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=false

Búsqueda de tamaños de máquinas virtuales admitidos

No se admiten los tamaños de máquina virtual heredados. Puede encontrar la lista de tamaños de máquina virtual admitidos mediante las API Resource Skus o el módulo de Azure PowerShell. No puede encontrar los tamaños admitidos mediante la CLI.

Al llamar a la API Resource Skus y comprobar que la capacidad EncryptionAtHostSupported esté configurada en True.

    {
        "resourceType": "virtualMachines",
        "name": "Standard_DS1_v2",
        "tier": "Standard",
        "size": "DS1_v2",
        "family": "standardDSv2Family",
        "locations": [
        "CentralUSEUAP"
        ],
        "capabilities": [
        {
            "name": "EncryptionAtHostSupported",
            "value": "True"
        }
        ]
    }

Para el módulo de Azure PowerShell, use el cmdlet Get-AzComputeResourceSku.

$vmSizes=Get-AzComputeResourceSku | where{$_.ResourceType -eq 'virtualMachines' -and $_.Locations.Contains('CentralUSEUAP')}

foreach($vmSize in $vmSizes)
{
    foreach($capability in $vmSize.capabilities)
    {
        if($capability.Name -eq 'EncryptionAtHostSupported' -and $capability.Value -eq 'true')
        {
            $vmSize

        }

    }
}

Pasos siguientes

Ahora que ha creado y configurado estos recursos, puede usarlos para proteger los discos administrados. En los vínculos siguientes encontrará scripts de ejemplo, cada uno con un escenario correspondiente, que puede usar para proteger sus discos administrados.

Ejemplos de plantillas de Azure Resource Manager