Dvojité šifrování neaktivních uložených dat ve službě Azure HDInsight

Tento článek popisuje metody šifrování neaktivních uložených dat v clusterech Azure HDInsight. Šifrování neaktivních uložených dat označuje šifrování na spravovaných discích (datové disky, disky operačního systému a dočasné disky) připojené k virtuálním počítačům clusteru HDInsight.

Tento dokument neřeší data uložená ve vašem účtu Azure Storage. Vaše clustery můžou mít jeden nebo více připojených účtů Azure Storage, ve kterých můžou být šifrovací klíče spravované microsoftem nebo spravované zákazníkem, ale šifrovací služba se liší. Další informace o šifrování služby Azure Storage najdete v tématu Šifrování neaktivních uložených dat ve službě Azure Storage.

Úvod

V Azure existují tři hlavní role spravovaných disků: datový disk, disk s operačním systémem a dočasný disk. Další informace o různých typech spravovaných disků najdete v tématu Úvod do spravovaných disků Azure.

HDInsight podporuje více typů šifrování ve dvou různých vrstvách:

  • Šifrování na straně serveru (SSE) – SSE provádí služba úložiště. V HDInsight se SSE používá k šifrování disků operačního systému a datových disků. Ve výchozím nastavení je povolená. SSE je šifrovací služba vrstvy 1.
  • Šifrování na hostiteli pomocí klíče spravovaného platformou – Podobně jako SSE tento typ šifrování provádí služba úložiště. Je to ale jenom pro dočasné disky a ve výchozím nastavení není povolená. Šifrování na hostiteli je také šifrovací služba vrstvy 1.
  • Šifrování neaktivních uložených dat pomocí klíče spravovaného zákazníkem – Tento typ šifrování lze použít na datech a dočasných discích. Ve výchozím nastavení není povolená a vyžaduje, aby zákazník zadal vlastní klíč prostřednictvím služby Azure Key Vault. Šifrování neaktivních uložených dat je šifrovací služba vrstvy 2.

Tyto typy jsou shrnuté v následující tabulce.

Typ clusteru Disk s operačním systémem (spravovaný disk) Datový disk (spravovaný disk) Dočasný datový disk (místní SSD)
Kafka, HBase s akcelerovanými zápisy Vrstva1: Šifrování SSE ve výchozím nastavení Vrstva1: Šifrování SSE ve výchozím nastavení, Vrstva2: Volitelné šifrování neaktivních uložených dat pomocí CMK Vrstva1: Volitelné šifrování v hostiteli pomocí PMK, Vrstva2: Volitelné šifrování neaktivních uložených dat pomocí CMK
Všechny ostatní clustery (Spark, Interactive, Hadoop, HBase bez akcelerovaných zápisů) Vrstva1: Šifrování SSE ve výchozím nastavení Vrstva1: Volitelné šifrování v hostiteli pomocí PMK, Vrstva2: Volitelné šifrování neaktivních uložených dat pomocí CMK

Šifrování neaktivních uložených dat pomocí klíčů spravovaných zákazníkem

Šifrování klíče spravovaného zákazníkem je proces o jednom kroku, který se zpracovává během vytváření clusteru bez dalších nákladů. Stačí autorizovat spravovanou identitu ve službě Azure Key Vault a přidat šifrovací klíč při vytváření clusteru.

Datové disky i dočasné disky na každém uzlu clusteru se šifrují pomocí symetrického šifrovacího klíče dat (DEK). Klíč DEK je chráněný pomocí šifrovacího klíče klíče (KEK) z trezoru klíčů. Procesy šifrování a dešifrování se zpracovávají výhradně službou Azure HDInsight.

Pro disky s operačním systémem připojené k virtuálním počítačům clusteru je k dispozici pouze jedna vrstva šifrování (PMK). Doporučuje se, aby zákazníci nekopírovali citlivá data na disky s operačním systémem, pokud je pro jejich scénáře vyžadováno šifrování CMK.

Pokud je v trezoru klíčů, ve kterém je uložený šifrovací klíč disku, je povolená brána firewall trezoru klíčů, musí být do konfigurace brány firewall trezoru klíčů přidány IP adresy místního poskytovatele prostředků služby HDInsight pro oblast, ve které se cluster nasadí. To je nezbytné, protože HDInsight není důvěryhodnou službou Azure Key Vault.

Klíče v trezoru klíčů můžete bezpečně otáčet pomocí webu Azure Portal nebo Azure CLI. Když se klíč otočí, cluster HDInsight začne nový klíč používat během několika minut. Povolte funkce ochrany klíče obnovitelného odstranění , které chrání před scénáři ransomwaru a náhodným odstraněním. Trezory klíčů bez této funkce ochrany se nepodporují.

Začínáme s klíči spravovanými zákazníkem

Pokud chcete vytvořit cluster HDInsight spravovaný zákazníkem, provedeme následující kroky:

  1. Vytváření spravovaných identit pro prostředky Azure
  2. Vytvoření služby Azure Key Vault
  3. Vytvoření klíče
  4. Vytvoření zásad přístupu
  5. Vytvoření clusteru HDInsight s povoleným klíčem spravovaným zákazníkem
  6. Obměně šifrovacího klíče

Každý krok je podrobně vysvětlený v jedné z následujících částí.

Vytváření spravovaných identit pro prostředky Azure

Vytvořte spravovanou identitu přiřazenou uživatelem pro ověření ve službě Key Vault.

Konkrétní kroky najdete v tématu Vytvoření spravované identity přiřazené uživatelem. Další informace o tom, jak spravované identity fungují ve službě Azure HDInsight, najdete v tématu Spravované identity ve službě Azure HDInsight. Při přidávání do zásad přístupu ke službě Key Vault nezapomeňte uložit ID prostředku spravované identity.

Vytvoření služby Azure Key Vault

Vytvořte trezor klíčů. Konkrétní kroky najdete v tématu Vytvoření služby Azure Key Vault .

HDInsight podporuje pouze Službu Azure Key Vault. Pokud máte vlastní trezor klíčů, můžete své klíče importovat do služby Azure Key Vault. Nezapomeňte, že trezor klíčů musí mít povolené obnovitelné odstranění . Další informace o importu existujících klíčů najdete v tématu O klíčích, tajných klíčích a certifikátech.

Vytvoření klíče

  1. V novém trezoru klíčů přejděte na Nastavení> Klíče>+ Generate/Import.

    Generate a new key in Azure Key Vault.

  2. Zadejte název a pak vyberte Vytvořit. Udržujte výchozí typklíče RSA.

    generates key name.

  3. Když se vrátíte na stránku Klíče , vyberte klíč, který jste vytvořili.

    key vault key list.

  4. Výběrem verze otevřete stránku Verze klíče. Pokud pro šifrování clusteru HDInsight používáte vlastní klíč, musíte zadat identifikátor URI klíče. Zkopírujte identifikátor klíče a uložte ho někam, dokud nebudete připraveni vytvořit cluster.

    get key identifier.

Vytvoření zásad přístupu

  1. V novém trezoru klíčů přejděte na Nastavení> Zásady přístupu+ Přidat zásady> přístupu.

    Create new Azure Key Vault access policy.

  2. Na stránce Přidat zásadu přístupu zadejte následující informace:

    Vlastnost Popis
    Oprávnění ke klíči Vyberte Získat, Rozbalit klíč a Zalamovat klíč.
    Oprávnění pro tajné kódy Vyberte Získat, Nastavit a Odstranit.
    Výběr objektu zabezpečení Vyberte spravovanou identitu přiřazenou uživatelem, kterou jste vytvořili dříve.

    Set Select Principal for Azure Key Vault access policy.

  3. Vyberte přidat.

  4. Zvolte Uložit.

    Save Azure Key Vault access policy.

Vytvoření clusteru s šifrováním disků spravovaných zákazníkem

Teď jste připraveni vytvořit nový cluster HDInsight. Klíče spravované zákazníkem je možné použít pouze u nových clusterů během vytváření clusteru. Z clusterů klíčů spravovaných zákazníkem nejde odebrat šifrování a klíče spravované zákazníkem se nedají přidat do existujících clusterů.

Od verze z listopadu 2020 podporuje HDInsight vytváření clusterů pomocí identifikátorů URI klíčů bez verzí i verzí. Pokud vytvoříte cluster s identifikátorem URI klíče bez verze, cluster HDInsight se pokusí provést automatickou obměnu klíčů při aktualizaci klíče ve službě Azure Key Vault. Pokud vytvoříte cluster s identifikátorem URI klíče s verzí, budete muset provést ruční obměnu klíčů, jak je popsáno v části Obměna šifrovacího klíče.

U clusterů vytvořených před vydáním z listopadu 2020 budete muset ručně provést obměnu klíčů pomocí identifikátoru URI klíče s verzí.

Typy virtuálních počítačů, které podporují šifrování disků

Velikost Virtuální procesory Paměť: 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

Pomocí webu Azure Portal

Během vytváření clusteru můžete použít buď klíč s verzí, nebo klíč bez verzí následujícím způsobem:

  • Verze – Během vytváření clusteru zadejte úplný identifikátor klíče, včetně verze klíče. Například https://contoso-kv.vault.azure.net/keys/myClusterKey/46ab702136bc4b229f8b10e8c2997fa4.
  • Bez verzí – během vytváření clusteru zadejte pouze identifikátor klíče. Například https://contoso-kv.vault.azure.net/keys/myClusterKey.

Musíte také přiřadit spravovanou identitu ke clusteru.

Create new cluster.

Použití Azure CLI

Následující příklad ukazuje, jak pomocí Azure CLI vytvořit nový cluster Apache Spark s povoleným šifrováním disku. Další informace najdete v tématu Azure CLI az hdinsight create. encryption-key-version Parametr je volitelný.

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

Použití šablon Azure Resource Manageru

Následující příklad ukazuje, jak pomocí šablony Azure Resource Manageru vytvořit nový cluster Apache Spark s povoleným šifrováním disku. Další informace najdete v tématu Co jsou šablony ARM? Vlastnost diskEncryptionKeyVersion šablony Resource Manageru je volitelná.

V tomto příkladu se k volání šablony používá PowerShell.

$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

Obsah šablony správy prostředků: 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'))]": {}
        }
      }
    }
  ]
}

Obměně šifrovacího klíče

Šifrovací klíče použité ve spuštěném clusteru můžete změnit pomocí webu Azure Portal nebo Azure CLI. Pro tuto operaci musí mít cluster přístup k aktuálnímu i zamýšlenému novému klíči, jinak operace otočit klíč selže. U clusterů vytvořených po vydání z listopadu 2020 můžete zvolit, jestli chcete, aby nový klíč měl verzi nebo ne. U clusterů vytvořených před vydáním z listopadu 2020 musíte při obměně šifrovacího klíče použít klíč s verzí.

Pomocí webu Azure Portal

Pokud chcete klíč otočit, potřebujete identifikátor URI základního trezoru klíčů. Až to uděláte, přejděte na portálu do části Vlastnosti clusteru HDInsight a klikněte na změnit klíč v části Adresa URL šifrovacího klíče disku. Zadejte adresu URL nového klíče a odešlete ho, aby se klíč otočil.

rotate disk encryption key.

Použití Azure CLI

Následující příklad ukazuje, jak otočit šifrovací klíč disku pro existující cluster HDInsight. Další informace najdete v tématu Azure CLI 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

Nejčastější dotazy k šifrování klíčů spravovaných zákazníkem

Jak cluster HDInsight přistupuje k mému trezoru klíčů?

HDInsight přistupuje k vaší instanci služby Azure Key Vault pomocí spravované identity, kterou přidružíte ke clusteru HDInsight. Tuto spravovanou identitu je možné vytvořit před vytvořením clusteru nebo během vytváření clusteru. Musíte také udělit spravované identitě přístup k trezoru klíčů, ve kterém je klíč uložený.

Je tato funkce dostupná pro všechny clustery ve službě HDInsight?

Šifrování klíčů spravované zákazníkem je k dispozici pro všechny typy clusterů s výjimkou Sparku 2.1 a 2.2.

Můžu k šifrování různých disků nebo složek použít více klíčů?

Ne, všechny spravované disky a disky prostředků jsou šifrované stejným klíčem.

Co se stane, když cluster ztratí přístup k trezoru klíčů nebo klíči?

Pokud cluster ztratí přístup ke klíči, zobrazí se upozornění na portálu Apache Ambari. V tomto stavu operace Změnit klíč selže. Po obnovení přístupu ke klíči zmizí upozornění Ambari a operace, jako je obměny klíčů, se dají úspěšně provést.

key access Ambari alert.

Jak můžu cluster obnovit, když se klíče odstraní?

Vzhledem k tomu, že se podporují jenom povolené klíče obnovitelného odstranění, pokud se klíče obnoví v trezoru klíčů, měl by cluster znovu získat přístup ke klíčům. Pokud chcete obnovit klíč služby Azure Key Vault, přečtěte si téma Undo-AzKeyVaultKeyRemoval nebo az-keyvault-key-recover.

Pokud se cluster vertikálně navýší, budou nové uzly bez problémů podporovat klíče spravované zákazníkem?

Ano. Cluster potřebuje přístup k klíči v trezoru klíčů během vertikálního navýšení kapacity. Stejný klíč se používá k šifrování spravovaných disků i disků prostředků v clusteru.

Jsou klíče spravované zákazníkem dostupné v mém umístění?

Klíče spravované zákazníkem služby HDInsight jsou k dispozici ve všech veřejných cloudech a národních cloudech.

Šifrování na hostiteli pomocí klíčů spravovaných platformou

Povolení na webu Azure Portal

Šifrování na hostiteli je možné povolit při vytváření clusteru na webu Azure Portal.

Poznámka:

Pokud je povolené šifrování na hostiteli, nemůžete do clusteru HDInsight přidávat aplikace z Azure Marketplace.

Enable encryption at host.

Tato možnost umožňuje šifrování na hostiteli pro dočasné datové disky virtuálních počítačů HDInsight pomocí PMK. Šifrování na hostiteli se podporuje jenom u určitých skladových položek virtuálních počítačů v omezených oblastech a HDInsight podporuje následující konfiguraci a skladové položky uzlů.

Informace o správné velikosti virtuálního počítače pro cluster HDInsight najdete v tématu Výběr správné velikosti virtuálního počítače pro váš cluster Azure HDInsight. Výchozí skladová položka virtuálního počítače pro uzel Zookeeper při povolení šifrování v hostiteli bude DS2V2.

Povolení s využitím PowerShellu

Následující fragment kódu ukazuje, jak můžete vytvořit nový cluster Azure HDInsight s povoleným šifrováním v hostiteli pomocí PowerShellu. K povolení této funkce se používá parametr -EncryptionAtHost $true .

$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 `

Povolení pomocí Azure CLI

Následující fragment kódu ukazuje, jak vytvořit nový cluster Azure HDInsight s povoleným šifrováním na hostiteli pomocí Azure CLI. K povolení této funkce se používá parametr --encryption-at-host true .

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

Další kroky