Doppia crittografia di Azure HDInsgiht per dati inattivi

Questo articolo illustra i metodi per la crittografia dei dati inattivi nei cluster Azure HDInsight. La crittografia dei dati inattivi si riferisce alla crittografia nei dischi gestiti (dischi dati, dischi del sistema operativo e dischi temporanei) collegati alle macchine virtuali del cluster HDInsight.

Questo documento non risolve i dati archiviati nell'account Archiviazione di Azure. I cluster possono avere uno o più account Archiviazione di Azure collegati in cui le chiavi di crittografia possono anche essere gestite da Microsoft o gestite dal cliente, ma il servizio di crittografia è diverso. Per altre informazioni sulla crittografia Archiviazione di Azure, vedere crittografia Archiviazione di Azure per i dati inattivi.

Introduzione

In Azure sono disponibili tre ruoli principali del disco gestito: il disco dati, il disco del sistema operativo e il disco temporaneo. Per altre informazioni sui diversi tipi di dischi gestiti, vedere Introduzione ai dischi gestiti di Azure.

HDInsight supporta più tipi di crittografia in due livelli diversi:

  • Crittografia lato server (S edizione Standard): S edizione Standard viene eseguita dal servizio di archiviazione. In HDInsight, S edizione Standard viene usato per crittografare dischi del sistema operativo e dischi dati. È abilitato per impostazione predefinita. S edizione Standard è un servizio di crittografia di livello 1.
  • Crittografia nell'host tramite chiave gestita dalla piattaforma: analogamente a S edizione Standard, questo tipo di crittografia viene eseguito dal servizio di archiviazione. Tuttavia, è solo per i dischi temporanei e non è abilitato per impostazione predefinita. La crittografia nell'host è anche un servizio di crittografia di livello 1.
  • Crittografia dei dati inattivi tramite chiave gestita dal cliente: questo tipo di crittografia può essere usato nei dati e nei dischi temporanei. Non è abilitato per impostazione predefinita e richiede al cliente di fornire la propria chiave tramite Azure Key Vault. La crittografia dei dati inattivi è un servizio di crittografia di livello 2.

Questi tipi sono riepilogati nella tabella seguente.

Tipo di cluster Disco del sistema operativo (disco gestito) Disco dati (disco gestito) Disco dati temporaneo (UNITÀ SSD locale)
Kafka, HBase con scritture accelerate Livello 1: Crittografia S edizione Standard per impostazione predefinita Layer1: Crittografia S edizione Standard per impostazione predefinita, Layer2: Crittografia facoltativa dei dati inattivi tramite la chiave gestita dal cliente Layer1: Crittografia facoltativa nell'host tramite PMK, Layer2: Crittografia facoltativa dei dati inattivi tramite cmk
Tutti gli altri cluster (Spark, Interactive, Hadoop, HBase senza scritture accelerate) Livello 1: Crittografia S edizione Standard per impostazione predefinita N/D Layer1: Crittografia facoltativa nell'host tramite PMK, Layer2: Crittografia facoltativa dei dati inattivi tramite cmk

Crittografia dei dati inattivi tramite chiavi gestite dal cliente

La crittografia della chiave gestita dal cliente è un processo in un unico passaggio gestito durante la creazione del cluster senza costi aggiuntivi. È sufficiente autorizzare un'identità gestita con Azure Key Vault e aggiungere la chiave di crittografia quando si crea il cluster.

Sia i dischi dati che i dischi temporanei in ogni nodo del cluster vengono crittografati con una chiave DEK (Symmetric Data Encryption Key). La chiave DEK viene protetta con la chiave di crittografia della chiave dall'insieme di credenziali delle chiavi. I processi di crittografia e decrittografia vengono gestiti interamente da Azure HDInsight.

Per i dischi del sistema operativo collegati alle macchine virtuali del cluster è disponibile un solo livello di crittografia (PMK). È consigliabile evitare ai clienti di copiare dati sensibili nei dischi del sistema operativo se è necessaria una crittografia cmk per i relativi scenari.

Se il firewall dell'insieme di credenziali delle chiavi è abilitato nell'insieme di credenziali delle chiavi in cui è archiviata la chiave di crittografia del disco, gli indirizzi IP del provider di risorse dell'area di HDInsight per l'area in cui verrà distribuito il cluster devono essere aggiunti alla configurazione del firewall dell'insieme di credenziali delle chiavi. Questa operazione è necessaria perché HDInsight non è un servizio di Insieme di credenziali delle chiavi di Azure attendibile.

È possibile usare il portale di Azure o l'interfaccia della riga di comando di Azure per ruotare in modo sicuro le chiavi nell'insieme di credenziali delle chiavi. Quando una chiave ruota, il cluster HDInsight inizia a usare la nuova chiave entro pochi minuti. Abilitare le funzionalità di protezione della chiave di eliminazione temporanea per proteggersi da scenari ransomware ed eliminazione accidentale. Gli insiemi di credenziali delle chiavi senza questa funzionalità di protezione non sono supportati.

Introduzione alle chiavi gestite dal cliente

Per creare un cluster HDInsight abilitato per la chiave gestita dal cliente, verranno illustrati i passaggi seguenti:

  1. Creare identità gestite per le risorse di Azure
  2. Creare un Azure Key Vault
  3. Creare la chiave
  4. Crea criteri di accesso
  5. Creare un cluster HDInsight con la chiave gestita dal cliente abilitata
  6. Rotazione della chiave di crittografia

Ogni passaggio viene illustrato in una delle sezioni seguenti in dettaglio.

Creare identità gestite per le risorse di Azure

Creare un'identità gestita assegnata dall'utente per l'autenticazione in Key Vault.

Per passaggi specifici, vedere Creare un'identità gestita assegnata dall'utente. Per altre informazioni sul funzionamento delle identità gestite in Azure HDInsight, vedere Identità gestite in Azure HDInsight. Assicurarsi di salvare l'ID risorsa dell'identità gestita da usare quando lo si aggiungerà ai criteri di accesso di Key Vault.

Creare un Azure Key Vault

Creare un insieme di credenziali delle chiavi. Per passaggi specifici, vedere Creare Azure Key Vault .

In HDInsight è supportato solo Azure Key Vault. Se si ha un proprio insieme di credenziali delle chiavi, è possibile importare le chiavi in Azure Key Vault. Tenere presente che l'insieme di credenziali delle chiavi deve avere l'eliminazione temporanea abilitata. Per altre informazioni sull'importazione delle chiavi esistenti, vedere Informazioni su chiavi, segreti e certificati.

Creare la chiave

  1. Dal nuovo insieme di credenziali delle chiavi passare a Impostazioni> Chiavi>+ Genera/Importa.

    Generate a new key in Azure Key Vault.

  2. Specificare un nome, quindi selezionare Crea. Mantenere il tipo di chiave predefinito RSA.

    generates key name.

  3. Quando si torna alla pagina Chiavi , selezionare la chiave creata.

    key vault key list.

  4. Selezionare la versione per aprire la pagina Versione chiave. Quando si usa la propria chiave per la crittografia del cluster HDInsight, è necessario fornire l'URI della chiave. Copiare l'identificatore di chiave e salvarlo in qualunque posizione fino a quando non si è pronti per creare il cluster.

    get key identifier.

Crea criteri di accesso

  1. Dal nuovo insieme di credenziali delle chiavi passare a Impostazioni Criteri> di> accesso+ Aggiungi criteri di accesso.

    Create new Azure Key Vault access policy.

  2. Nella pagina Aggiungi criteri di accesso specificare le informazioni seguenti:

    Proprietà Descrizione
    Autorizzazioni chiave Selezionare Get, Unwrap Key (Ottieni), Unwrap Key (Annulla il wrapping della chiave) e Wrap Key (A capo).
    Autorizzazioni segreto Selezionare Recupera, Imposta ed Elimina.
    Selezionare un'entità Selezionare l'identità gestita assegnata dall'utente creata in precedenza.

    Set Select Principal for Azure Key Vault access policy.

  3. Selezionare Aggiungi.

  4. Seleziona Salva.

    Save Azure Key Vault access policy.

Creare un cluster con la crittografia del disco con chiave gestita dal cliente

È ora possibile creare un nuovo cluster HDInsight. Le chiavi gestite dal cliente possono essere applicate solo ai nuovi cluster durante la creazione del cluster. La crittografia non può essere rimossa dai cluster di chiavi gestite dal cliente e le chiavi gestite dal cliente non possono essere aggiunte ai cluster esistenti.

A partire dalla versione di novembre 2020, HDInsight supporta la creazione di cluster che usano URI chiave con versione e senza versione. Se si crea il cluster con un URI di chiave senza versione, il cluster HDInsight tenterà di eseguire la rotazione automatica delle chiavi quando la chiave viene aggiornata in Azure Key Vault. Se si crea il cluster con un URI di chiave con versione, sarà necessario eseguire una rotazione manuale delle chiavi come illustrato in Rotazione della chiave di crittografia.

Per i cluster creati prima della versione di novembre 2020, è necessario eseguire manualmente la rotazione delle chiavi usando l'URI della chiave con versione.

Tipi di vm che supportano la crittografia del disco

Dimensione vCPU Memoria: GiB
Standard_D4a_v4 4 16
Standard_D8a_v4 8 32
Standard_D16a_v4 16 64
Standard_D32a_v4 32 128
Standard_D48a_v4 48 192
Standard_D64a_v4 64 256
Standard_D96a_v4 96 384
Standard_E64is_v3 64 432
Standard_E20s_V3 20 160
Standard_E2s_V3 2 16
Standard_E2a_v4 2 16
Standard_E4a_v4 4 32
Standard_E8a_v4 8 64
Standard_E16a_v4 16 128
Standard_E20a_v4 20 160
Standard_E32a_v4 32 256
Standard_E48a_v4 48 384
Standard_E64a_v4 64 512
Standard_E96a_v4 96 672
Standard_DS3_v2 4 14
Standard_DS4_v2 8 28
Standard_DS5_v2 16 56
Standard_DS12_v2 4 28
Standard_DS13_v2 8 56
Standard_DS14_v2 16 112

Tramite il portale di Azure

Durante la creazione del cluster, è possibile usare una chiave con controllo delle versioni o una chiave senza versione nel modo seguente:

  • Controllo delle versioni: durante la creazione del cluster specificare l'identificatore completo della chiave, inclusa la versione della chiave. Ad esempio: https://contoso-kv.vault.azure.net/keys/myClusterKey/46ab702136bc4b229f8b10e8c2997fa4.
  • Senza versione: durante la creazione del cluster specificare solo l'identificatore di chiave. Ad esempio: https://contoso-kv.vault.azure.net/keys/myClusterKey.

È anche necessario assegnare l'identità gestita al cluster.

Create new cluster.

Utilizzare l'interfaccia della riga di comando di Azure

L'esempio seguente illustra come usare l'interfaccia della riga di comando di Azure per creare un nuovo cluster Apache Spark con crittografia dischi abilitata. Per altre informazioni, vedere l'articolo relativo all'interfaccia della riga di comando di Azure az hdinsight create. Il parametro encryption-key-version è facoltativo.

az hdinsight create -t spark -g MyResourceGroup -n MyCluster \
-p "HttpPassword1234!" --workernode-data-disks-per-node 2 \
--storage-account MyStorageAccount \
--encryption-key-name SparkClusterKey \
--encryption-key-version 00000000000000000000000000000000 \
--encryption-vault-uri https://MyKeyVault.vault.azure.net \
--assign-identity MyMSI

Uso di modelli di Azure Resource Manager

L'esempio seguente illustra come usare un modello di Azure Resource Manager per creare un nuovo cluster Apache Spark con crittografia dischi abilitata. Per altre informazioni, vedere Che cosa sono i modelli di Resource Manager?. La proprietà diskEncryptionKeyVersion del modello di Resource Manager è facoltativa.

Questo esempio usa PowerShell per chiamare il modello.

$templateFile = "azuredeploy.json"
$ResourceGroupName = "MyResourceGroup"
$clusterName = "MyCluster"
$password = ConvertTo-SecureString 'HttpPassword1234!' -AsPlainText -Force
$diskEncryptionVaultUri = "https://MyKeyVault.vault.azure.net"
$diskEncryptionKeyName = "SparkClusterKey"
$diskEncryptionKeyVersion = "00000000000000000000000000000000"
$managedIdentityName = "MyMSI"

New-AzResourceGroupDeployment `
  -Name mySpark `
  -TemplateFile $templateFile `
  -ResourceGroupName $ResourceGroupName `
  -clusterName $clusterName `
  -clusterLoginPassword $password `
` -sshPassword $password `
  -diskEncryptionVaultUri $diskEncryptionVaultUri `
  -diskEncryptionKeyName $diskEncryptionKeyName `
  -diskEncryptionKeyVersion $diskEncryptionKeyVersion `
  -managedIdentityName $managedIdentityName

Contenuto del modello di gestione delle risorse, azuredeploy.json:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "0.9.0.0",
  "parameters": {
    "clusterName": {
      "type": "string",
      "metadata": {
        "description": "The name of the HDInsight cluster to create."
      }
    },
    "clusterLoginUserName": {
      "type": "string",
      "defaultValue": "admin",
      "metadata": {
        "description": "These credentials can be used to submit jobs to the cluster and to log into cluster dashboards."
      }
    },
    "clusterLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location where all azure resources will be deployed."
      }
    },
    "sshUserName": {
      "type": "string",
      "defaultValue": "sshuser",
      "metadata": {
        "description": "These credentials can be used to remotely access the cluster."
      }
    },
    "sshPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
      }
    },
    "headNodeSize": {
      "type": "string",
      "defaultValue": "Standard_D12_v2",
      "metadata": {
        "description": "The VM size of the head nodes."
      }
    },
    "workerNodeSize": {
      "type": "string",
      "defaultValue": "Standard_D13_v2",
      "metadata": {
        "description": "The VM size of the worker nodes."
      }
    },
    "diskEncryptionVaultUri": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault DNSname."
      }
    },
    "diskEncryptionKeyName": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault key name."
      }
    },
    "diskEncryptionKeyVersion": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault key version for the selected key."
      }
    },
    "managedIdentityName": {
      "type": "string",
      "metadata": {
        "description": "The user-assigned managed identity."
      }
    }
  },
  "variables": {
    "defaultStorageAccount": {
      "name": "[uniqueString(resourceGroup().id)]",
      "type": "Standard_LRS"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('defaultStorageAccount').name]",
      "location": "[parameters('location')]",
      "apiVersion": "2019-06-01",
      "sku": {
        "name": "[variables('defaultStorageAccount').type]"
      },
      "kind": "Storage",
      "properties": {}
    },
    {
      "apiVersion": "2018-06-01-preview",
      "name": "[parameters('clusterName')]",
      "type": "Microsoft.HDInsight/clusters",
      "location": "[parameters('location')]",
      "properties": {
        "clusterVersion": "3.6",
        "osType": "Linux",
        "tier": "standard",
        "clusterDefinition": {
          "kind": "spark",
          "componentVersion": {
            "Spark": "2.3"
          },
          "configurations": {
            "gateway": {
              "restAuthCredential.isEnabled": true,
              "restAuthCredential.username": "[parameters('clusterLoginUserName')]",
              "restAuthCredential.password": "[parameters('clusterLoginPassword')]"
            }
          }
        },
        "storageProfile": {
          "storageaccounts": [
            {
              "name": "[replace(replace(reference(resourceId('Microsoft.Storage/storageAccounts', variables('defaultStorageAccount').name), '2019-06-01').primaryEndpoints.blob,'https://',''),'/','')]",
              "isDefault": true,
              "container": "[parameters('clusterName')]",
              "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('defaultStorageAccount').name), '2019-06-01').keys[0].value]"
            }
          ]
        },
        "computeProfile": {
          "roles": [
            {
              "name": "headnode",
              "minInstanceCount": 1,
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('headNodeSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                },
              },
            },
            {
              "name": "workernode",
              "targetInstanceCount": 1,
              "hardwareProfile": {
                "vmSize": "[parameters('workerNodeSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                },
              },
            }
          ]
        },
        "minSupportedTlsVersion": "1.2",
        "diskEncryptionProperties": {
          "vaultUri": "[parameters('diskEncryptionVaultUri')]",
          "keyName": "[parameters('diskEncryptionKeyName')]",
          "keyVersion": "[parameters('diskEncryptionKeyVersion')]",
          "msiResourceId": "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('managedIdentityName'))]"
        }
      },
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('managedIdentityName'))]": {}
        }
      }
    }
  ]
}

Rotazione della chiave di crittografia

È possibile modificare le chiavi di crittografia usate nel cluster in esecuzione usando il portale di Azure o l'interfaccia della riga di comando di Azure. Per questa operazione, il cluster deve avere accesso sia alla chiave corrente che alla nuova chiave desiderata. In caso contrario, l'operazione di rotazione della chiave avrà esito negativo. Per i cluster creati dopo la versione di novembre 2020 è possibile scegliere se si vuole che la nuova chiave abbia una versione o meno. Per i cluster creati prima della versione di novembre 2020, è necessario usare una chiave con controllo delle versioni durante la rotazione della chiave di crittografia.

Tramite il portale di Azure

Per ruotare la chiave, è necessario l'URI dell'insieme di credenziali delle chiavi di base. Al termine, passare alla sezione proprietà del cluster HDInsight nel portale e fare clic su Cambia chiave in URL della chiave di crittografia del disco. Immettere il nuovo URL della chiave e inviare per ruotare la chiave.

rotate disk encryption key.

Utilizzare l'interfaccia della riga di comando di Azure

L'esempio seguente illustra come ruotare la chiave di crittografia del disco per un cluster HDInsight esistente. Per altre informazioni, vedere l'articolo relativo all'interfaccia della riga di comando di Azure az hdinsight rotate-disk-encryption-key.

az hdinsight rotate-disk-encryption-key \
--encryption-key-name SparkClusterKey \
--encryption-key-version 00000000000000000000000000000000 \
--encryption-vault-uri https://MyKeyVault.vault.azure.net \
--name MyCluster \
--resource-group MyResourceGroup

Domande frequenti sulla crittografia della chiave gestita dal cliente

In che modo il cluster HDInsight accede all'insieme di credenziali delle chiavi?

HDInsight accede all'istanza di Azure Key Vault usando l'identità gestita associata al cluster HDInsight. È possibile creare questa identità gestita prima o durante la creazione del cluster. È anche necessario concedere all'identità gestita l'accesso all'insieme di credenziali delle chiavi in cui viene archiviata la chiave.

Questa funzionalità è disponibile per tutti i cluster in HDInsight?

La crittografia della chiave gestita dal cliente è disponibile per tutti i tipi di cluster ad eccezione di Spark 2.1 e 2.2.

È possibile usare più chiavi per crittografare dischi o cartelle diversi?

No, tutti i dischi gestiti e i dischi delle risorse vengono crittografati dalla stessa chiave.

Cosa accade se il cluster perde l'accesso all'insieme di credenziali delle chiavi o alla chiave?

Se il cluster perde l'accesso alla chiave, gli avvisi verranno visualizzati nel portale di Apache Ambari. In questo stato, l'operazione Cambia chiave avrà esito negativo. Una volta ripristinato l'accesso alla chiave, gli avvisi di Ambari verranno eliminati e le operazioni come la rotazione delle chiavi possono essere eseguite correttamente.

key access Ambari alert.

Come è possibile recuperare il cluster se le chiavi vengono eliminate?

Poiché sono supportate solo le chiavi abilitate per l'eliminazione temporanea, se le chiavi vengono ripristinate nell'insieme di credenziali delle chiavi, il cluster dovrebbe ottenere nuovamente l'accesso alle chiavi. Per ripristinare una chiave di Azure Key Vault, vedere Undo-AzKeyVaultKeyRemoval o az-keyvault-key-recover.

Se si aumentano le prestazioni di un cluster, i nuovi nodi supportano facilmente le chiavi gestite dal cliente?

Sì. Il cluster deve avere accesso alla chiave nell'insieme di credenziali delle chiavi durante il passaggio a un piano superiore. La stessa chiave viene usata per crittografare sia i dischi gestiti che i dischi delle risorse nel cluster.

Le chiavi gestite dal cliente sono disponibili nella mia posizione?

Le chiavi gestite dal cliente di HDInsight sono disponibili in tutti i cloud pubblici e nei cloud nazionali.

Crittografia nell'host tramite chiavi gestite dalla piattaforma

Abilitazione nel portale di Azure

La crittografia nell'host può essere abilitata durante la creazione del cluster nella portale di Azure.

Nota

Quando la crittografia nell'host è abilitata, non è possibile aggiungere applicazioni al cluster HDInsight da Azure Marketplace.

Enable encryption at host.

Questa opzione abilita la crittografia nell'host per i dischi dati temporanei delle macchine virtuali HDInsight tramite PMK. La crittografia nell'host è supportata solo in determinati SKU di macchine virtuali in aree limitate e HDInsight supporta la configurazione del nodo e gli SKU seguenti.

Per comprendere le dimensioni corrette della macchina virtuale per il cluster HDInsight, vedere Selezione delle dimensioni della macchina virtuale appropriate per il cluster Azure HDInsight. Lo SKU predefinito della macchina virtuale per il nodo Zookeeper quando la crittografia nell'host è abilitata sarà DS2V2.

Abilitare con PowerShell

Il frammento di codice seguente illustra come creare un nuovo cluster Azure HDInsight con crittografia nell'host abilitato tramite PowerShell. Usa il parametro -EncryptionAtHost $true per abilitare la funzionalità.

$storageAccountResourceGroupName = "Group"
$storageAccountName = "yourstorageacct001"
$storageAccountKey = Get-AzStorageAccountKey `
    -ResourceGroupName $storageAccountResourceGroupName `
    -Name $storageAccountName | %{ $_.Key1 }
$storageContainer = "container002"
# Cluster configuration info
$location = "East US 2"
$clusterResourceGroupName = "Group"
$clusterName = "your-hadoop-002"
$clusterCreds = Get-Credential
# If the cluster's resource group doesn't exist yet, run:
# New-AzResourceGroup -Name $clusterResourceGroupName -Location $location
# Create the cluster
New-AzHDInsightCluster `
    -ClusterType Hadoop `
    -ClusterSizeInNodes 4 `
    -ResourceGroupName $clusterResourceGroupName `
    -ClusterName $clusterName `
    -HttpCredential $clusterCreds `
    -Location $location `
    -DefaultStorageAccountName "$storageAccountName.blob.core.contoso.net" `
    -DefaultStorageAccountKey $storageAccountKey `
    -DefaultStorageContainer $storageContainer `
    -SshCredential $clusterCreds `
    -EncryptionAtHost $true `

Abilitare tramite l'interfaccia della riga di comando di Azure

Il frammento di codice seguente illustra come creare un nuovo cluster Azure HDInsight con crittografia abilitata per l'host usando l'interfaccia della riga di comando di Azure. Usa il parametro --encryption-at-host true per abilitare la funzionalità.

az hdinsight create -t spark -g MyResourceGroup -n MyCluster \\
-p "yourpass" \\
--storage-account MyStorageAccount --encryption-at-host true

Passaggi successivi