Crittografare il sistema operativo e i dischi dati collegati in un set di scalabilità di macchine virtuali con l'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure viene usata per creare e gestire le risorse di Azure dalla riga di comando o negli script. Questa guida introduttiva illustra come usare l'interfaccia della riga di comando di Azure per creare e crittografare un set di scalabilità di macchine virtuali. Per altre informazioni sull'applicazione della crittografia dischi di Azure a un set di scalabilità di macchine virtuali, vedere Crittografia dischi di Azure per set di scalabilità di macchine virtuali.

Prerequisiti

  • Questo articolo richiede la versione 2.0.31 dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Creare un set di scalabilità

Per poter creare un set di scalabilità, è prima necessario creare un gruppo di risorse con il comando az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:

az group create --name myResourceGroup --location eastus

Creare ora un set di scalabilità di macchine virtuali con az vmss create. L'esempio seguente crea un set di scalabilità denominato myScaleSet impostato per l'aggiornamento automatico man mano che vengono applicate le modifiche e genera chiavi SSH se non esistono in ~/.ssh/id_rsa. Un disco dati da 32 GB è collegato a ogni istanza di macchina virtuale e l'estensione script personalizzata di Azure viene usata per preparare i dischi dati con az vmss extension set:

Importante

Assicurarsi di selezionare il sistema operativo supportato con ADE. Sistema operativo supportato per AdE.

# Create a scale set with attached data disk
az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode Flexible \
  --image <SKU Linux Image> \
  --admin-username azureuser \
  --generate-ssh-keys \
  --data-disk-sizes-gb 32

# Prepare the data disk for use with the Custom Script Extension
az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/prepare_vm_disks.sh"],"commandToExecute":"./prepare_vm_disks.sh"}'

La creazione e la configurazione di tutte le macchine virtuali e risorse del set di scalabilità richiedono alcuni minuti.

Creare un insieme di credenziali delle chiavi di Azure abilitato per la crittografia dei dischi

L'insieme di credenziali delle chiavi di Azure consente di archiviare chiavi, chiavi private o password da implementare in tutta sicurezza in applicazioni e servizi. Le chiavi crittografiche vengono archiviate in Azure Key Vault usando la protezione software oppure è possibile importare o generare le chiavi nei moduli di protezione hardware (HSM) certificati per gli standard convalidati FIPS 140. Queste chiavi di crittografia vengono usate per crittografare e decrittografare i dischi virtuali collegati alla VM. È possibile esercitare il controllo su queste chiavi di crittografia e sul loro uso.

Definire un nome_keyvault univoco. Creare quindi un KeyVault con il comando az keyvault create nella stessa sottoscrizione e nella stessa area del set di scalabilità e impostare il criterio di accesso --enabled-for-disk-encryption.

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault create --resource-group myResourceGroup --name $keyvault_name --enabled-for-disk-encryption

Usare un insieme di credenziali delle chiavi esistente

Questo passaggio è necessario solo se si vuole usare un insieme di credenziali delle chiavi già esistente con la crittografia dei dischi. Ignorare questo passaggio se si è creato un insieme di credenziali delle chiavi nella sezione precedente.

Definire un nome_keyvault univoco. Aggiornare quindi il KeyVault con az keyvault update e impostare il criterio di accesso --enabled-for-disk-encryption.

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault update --name $keyvault_name --enabled-for-disk-encryption

Abilitare la crittografia

Nota

Se si usa set di scalabilità di macchine virtuali in modalità di orchestrazione flessibile, verranno crittografate solo le nuove istanze. Le istanze esistenti nel set di scalabilità dovranno essere crittografate singolarmente o rimosse e sostituite.

Per crittografare le istanze di macchine virtuali in un set di scalabilità, ottenere prima alcune informazioni sull'ID risorsa dell'insieme di credenziali delle chiavi con az keyvault show. Queste variabili vengono quindi usate per avviare il processo di crittografia con il comando az vmss encryption enable:

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --volume-type DATA

L'avvio del processo di crittografia potrebbe richiedere un minuto o due.

Poiché il criterio di aggiornamento per il set di scalabilità creato in un passaggio precedente è impostato come automatico, le istanze di macchine virtuali avviano automaticamente il processo di crittografia. Nei set di scalabilità in cui il criterio di aggiornamento è manuale, avviare il criterio di crittografia nelle istanze di macchine virtuali con az vmss update-instances.

Abilitare la crittografia con la chiave di crittografia della chiave per eseguire il wrapping della chiave

È anche possibile usare una chiave di crittografia della chiave per una maggiore sicurezza durante la crittografia del set di scalabilità di macchine virtuali.

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --key-encryption-key myKEK \
    --key-encryption-keyvault $vaultResourceId \
    --volume-type DATA

Nota

La sintassi per il valore del parametro disk-encryption-keyvault è la stringa di identificatore completa:
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]

La sintassi per il valore del parametro key-encryption-key è l'URI completo della chiave kek come in:
https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

Verificare lo stato della crittografia

Per controllare lo stato della crittografia dei dischi, usare az vmss encryption show:

az vmss encryption show --resource-group myResourceGroup --name myScaleSet

Quando le istanze di macchine virtuali sono crittografate, il codice di stato indica EncryptionState/encrypted, come mostrato nell'output di esempio seguente:

[
  {
    "disks": [
      {
        "encryptionSettings": null,
        "name": "myScaleSet_myScaleSet_0_disk2_3f39c2019b174218b98b3dfae3424e69",
        "statuses": [
          {
            "additionalProperties": {},
            "code": "EncryptionState/encrypted",
            "displayStatus": "Encryption is enabled on disk",
            "level": "Info",
            "message": null,
            "time": null
          }
        ]
      }
    ],
    "id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualMachines/0",
    "resourceGroup": "MYRESOURCEGROUP"
  }
]

Disabilitare la crittografia

Se non si vogliono più usare i dischi delle istanze di macchine virtuali crittografate, è possibile disabilitare la crittografia con az vmss encryption disable, come segue:

az vmss encryption disable --resource-group myResourceGroup --name myScaleSet

Passaggi successivi

  • In questo articolo è stata usata l'interfaccia della riga di comando di Azure per crittografare un set di scalabilità di macchine virtuali. È anche possibile usare Azure PowerShell o i modelli di Azure Resource Manager.
  • Se si vuole che Crittografia dischi di Azure venga applicato dopo il provisioning di un'altra estensione, è possibile usare la sequenziazione delle estensioni.
  • Un esempio di file batch end-to-end per la crittografia del disco dati del set di scalabilità di Linux è disponibile qui. Questo esempio crea un gruppo di risorse, un set di scalabilità Linux, monta un disco dati da 5 GB e crittografa il set di scalabilità di macchine virtuali.