Azure HDInsight dubbele versleuteling voor data-at-rest
In dit artikel worden methoden besproken voor versleuteling van data-at-rest in Azure HDInsight-clusters. Gegevensversleuteling in rust verwijst naar versleuteling op beheerde schijven (gegevensschijven, besturingssysteemschijven en tijdelijke schijven) die zijn gekoppeld aan virtuele HDInsight-clustermachines.
In dit document worden geen gegevens verwerkt die zijn opgeslagen in uw Azure Storage-account. Uw clusters hebben mogelijk een of meer gekoppelde Azure Storage-accounts waarin de versleutelingssleutels ook door Microsoft kunnen worden beheerd of door de klant worden beheerd, maar de versleutelingsservice verschilt. Zie Azure Storage-versleuteling voor data-at-rest voor meer informatie over Azure Storage-versleuteling.
Inleiding
Er zijn drie hoofdrollen voor beheerde schijven in Azure: de gegevensschijf, de besturingssysteemschijf en de tijdelijke schijf. Zie Inleiding tot beheerde Azure-schijven voor meer informatie over verschillende typen beheerde schijven.
HDInsight ondersteunt meerdere typen versleuteling in twee verschillende lagen:
- SSE (Server Side Encryption) - SSE wordt uitgevoerd door de opslagservice. In HDInsight wordt SSE gebruikt om besturingssysteemschijven en gegevensschijven te versleutelen. Deze functie is standaard ingeschakeld. SSE is een laag 1-versleutelingsservice.
- Versleuteling op host met behulp van door het platform beheerde sleutel: dit type versleuteling wordt uitgevoerd door de opslagservice. Het is echter alleen voor tijdelijke schijven en is niet standaard ingeschakeld. Versleuteling op de host is ook een laag 1-versleutelingsservice.
- Versleuteling-at-rest met behulp van door de klant beheerde sleutel: dit type versleuteling kan worden gebruikt op gegevens en tijdelijke schijven. Deze functie is niet standaard ingeschakeld en vereist dat de klant zijn eigen sleutel via Azure Key Vault opgeeft. Versleuteling-at-rest is een laag 2-versleutelingsservice.
Deze typen worden samengevat in de volgende tabel.
Clustertype | Besturingssysteemschijf (beheerde schijf) | Gegevensschijf (beheerde schijf) | Tijdelijke gegevensschijf (lokale SSD) |
---|---|---|---|
Kafka, HBase met versnelde schrijfbewerkingen | Laag 1: SSE-versleuteling standaard | Laag 1: SSE-versleuteling standaard, Laag 2: Optionele versleuteling-at-rest met behulp van CMK | Laag 1: Optionele versleuteling op host met behulp van PMK, Laag 2: Optionele versleuteling-at-rest met behulp van CMK |
Alle andere clusters (Spark, Interactive, Hadoop, HBase zonder versnelde schrijfbewerkingen) | Laag 1: SSE-versleuteling standaard | N.v.t. | Laag 1: Optionele versleuteling op host met behulp van PMK, Laag 2: Optionele versleuteling-at-rest met behulp van CMK |
Versleuteling at rest met door de klant beheerde sleutels
Door de klant beheerde sleutelversleuteling is een proces met één stap dat wordt verwerkt tijdens het maken van het cluster, zonder extra kosten. U hoeft alleen maar een beheerde identiteit te autoriseren met Azure Key Vault en de versleutelingssleutel toe te voegen wanneer u uw cluster maakt.
Zowel gegevensschijven als tijdelijke schijven op elk knooppunt van het cluster worden versleuteld met een SYMMETRISCHE Gegevensversleutelingssleutel (DEK). De DEK wordt beveiligd met behulp van de Sleutelversleutelingssleutel (KEK) uit uw sleutelkluis. De versleutelings- en ontsleutelingsprocessen worden volledig verwerkt door Azure HDInsight.
Voor besturingssysteemschijven die zijn gekoppeld aan de cluster-VM's is slechts één laag versleuteling (PMK) beschikbaar. Het wordt aanbevolen dat klanten voorkomen dat gevoelige gegevens worden gekopieerd naar besturingssysteemschijven als een CMK-versleuteling vereist is voor hun scenario's.
Als de firewall van de sleutelkluis is ingeschakeld in de sleutelkluis waar de schijfversleutelingssleutel is opgeslagen, moeten de IP-adressen van de regionale resourceprovider van HDInsight voor de regio waar het cluster wordt geïmplementeerd, worden toegevoegd aan de firewallconfiguratie van de sleutelkluis. Dit is nodig omdat HDInsight geen vertrouwde Azure Key Vault-service is.
U kunt Azure Portal of Azure CLI gebruiken om de sleutels veilig te roteren in de sleutelkluis. Wanneer een sleutel wordt gedraaid, begint het HDInsight-cluster binnen enkele minuten met de nieuwe sleutel. Schakel de belangrijkste beveiligingsfuncties voor voorlopig verwijderen in om te beschermen tegen ransomware-scenario's en onbedoeld verwijderen. Sleutelkluizen zonder deze beveiligingsfunctie worden niet ondersteund.
Aan de slag met door de klant beheerde sleutels
Als u een HDInsight-cluster met door de klant beheerde sleutel wilt maken, voert u de volgende stappen uit:
- Beheerde identiteiten maken voor Azure-resources
- Azure Key Vault maken
- Sleutel maken
- Toegangsbeleid maken
- HDInsight-cluster maken met door de klant beheerde sleutel ingeschakeld
- De versleutelingssleutel roteren
Elke stap wordt in een van de volgende secties uitgebreid uitgelegd.
Beheerde identiteiten maken voor Azure-resources
Maak een door de gebruiker toegewezen beheerde identiteit om te verifiëren bij Key Vault.
Zie Een door de gebruiker toegewezen beheerde identiteit maken voor specifieke stappen. Zie Beheerde identiteiten in Azure HDInsight voor meer informatie over hoe beheerde identiteiten werken in Azure HDInsight. Zorg ervoor dat u de resource-id van de beheerde identiteit opslaat wanneer u deze toevoegt aan het key vault-toegangsbeleid.
Azure Key Vault maken
Een sleutelkluis maken. Zie Azure Key Vault maken voor specifieke stappen.
HDInsight ondersteunt alleen Azure Key Vault. Als u uw eigen sleutelkluis hebt, kunt u uw sleutels importeren in Azure Key Vault. Houd er rekening mee dat voorlopig verwijderen moet zijn ingeschakeld voor de sleutelkluis. Ga naar Info over sleutels, geheimen en certificaten voor meer informatie over het importeren van bestaande sleutels.
Sleutel maken
Navigeer vanuit uw nieuwe sleutelkluis naar Instellingensleutels>>+ Genereren/importeren.
Geef een naam op en selecteer Vervolgens Maken. Behoud het standaardsleuteltype van RSA.
Wanneer u terugkeert naar de pagina Sleutels , selecteert u de sleutel die u hebt gemaakt.
Selecteer de versie om de pagina Sleutelversie te openen. Wanneer u uw eigen sleutel gebruikt voor HDInsight-clusterversleuteling, moet u de sleutel-URI opgeven. Kopieer de sleutel-id en sla deze ergens op totdat u klaar bent om uw cluster te maken.
Toegangsbeleid maken
Navigeer vanuit uw nieuwe sleutelkluis naar Instellingentoegangsbeleid>>+ Toegangsbeleid toevoegen.
Geef op de pagina Toegangsbeleid toevoegen de volgende informatie op:
Eigenschappen Beschrijving Sleutelmachtigingen Selecteer Ophalen, Sleutel uitpakken en Sleutel verpakken. Geheime machtigingen Selecteer Ophalen, instellen en verwijderen. Principal selecteren Selecteer de door de gebruiker toegewezen beheerde identiteit die u eerder hebt gemaakt. Selecteer Toevoegen.
Selecteer Opslaan.
Cluster maken met door de klant beheerde sleutelschijfversleuteling
U kunt nu een nieuw HDInsight-cluster maken. Door de klant beheerde sleutels kunnen alleen worden toegepast op nieuwe clusters tijdens het maken van het cluster. Versleuteling kan niet worden verwijderd uit door de klant beheerde sleutelclusters en door de klant beheerde sleutels kunnen niet worden toegevoegd aan bestaande clusters.
Vanaf de release van november 2020 biedt HDInsight ondersteuning voor het maken van clusters met zowel versies als sleutel-URI's met versieloze versies. Als u het cluster maakt met een sleutel-URI met een versieloze sleutel, probeert het HDInsight-cluster automatisch sleutelrotatie uit te voeren wanneer de sleutel wordt bijgewerkt in uw Azure Key Vault. Als u het cluster maakt met een URI met een versie van een sleutel, moet u een handmatige sleutelrotatie uitvoeren zoals besproken in Het roteren van de versleutelingssleutel.
Voor clusters die vóór de release van november 2020 zijn gemaakt, moet u sleutelrotatie handmatig uitvoeren met behulp van de versie-URI van de sleutel.
VM-typen die schijfversleuteling ondersteunen
Tekengrootte | vCPU | Geheugen: 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 |
Met gebruik van Azure Portal
Tijdens het maken van een cluster kunt u een versieloze sleutel of een versieloze sleutel op de volgende manier gebruiken:
- Versiebeheer : geef tijdens het maken van het cluster de volledige sleutel-id op, inclusief de sleutelversie. Bijvoorbeeld:
https://contoso-kv.vault.azure.net/keys/myClusterKey/46ab702136bc4b229f8b10e8c2997fa4
. - Versieloos : geef tijdens het maken van het cluster alleen de sleutel-id op. Bijvoorbeeld:
https://contoso-kv.vault.azure.net/keys/myClusterKey
.
U moet ook de beheerde identiteit toewijzen aan het cluster.
Azure CLI gebruiken
In het volgende voorbeeld ziet u hoe u Azure CLI gebruikt om een nieuw Apache Spark-cluster te maken waarvoor schijfversleuteling is ingeschakeld. Zie Azure CLI az hdinsight create voor meer informatie. De parameter encryption-key-version
is optioneel.
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
Azure Resource Manager-sjablonen gebruiken
In het volgende voorbeeld ziet u hoe u een Azure Resource Manager-sjabloon gebruikt om een nieuw Apache Spark-cluster te maken waarvoor schijfversleuteling is ingeschakeld. Zie Wat zijn ARM-sjablonen? voor meer informatie. De eigenschap diskEncryptionKeyVersion
Resource Manager-sjabloon is optioneel.
In dit voorbeeld wordt PowerShell gebruikt om de sjabloon aan te roepen.
$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
De inhoud van de resourcebeheersjabloon: 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'))]": {}
}
}
}
]
}
De versleutelingssleutel roteren
U kunt de versleutelingssleutels die worden gebruikt in uw actieve cluster wijzigen met behulp van Azure Portal of Azure CLI. Voor deze bewerking moet het cluster toegang hebben tot zowel de huidige sleutel als de beoogde nieuwe sleutel, anders mislukt de bewerking van de draaisleutel. Voor clusters die na de release van november 2020 zijn gemaakt, kunt u kiezen of u de nieuwe sleutel een versie wilt geven of niet. Voor clusters die vóór de release van november 2020 zijn gemaakt, moet u een versiesleutel gebruiken bij het roteren van de versleutelingssleutel.
Met gebruik van Azure Portal
Als u de sleutel wilt draaien, hebt u de URI van de basissleutelkluis nodig. Zodra u dat hebt gedaan, gaat u naar de sectie eigenschappen van het HDInsight-cluster in de portal en klikt u op Sleutel wijzigen onder DE URL van schijfversleutelingssleutel. Voer de nieuwe sleutel-URL in en verzend deze om de sleutel te draaien.
Azure CLI gebruiken
In het volgende voorbeeld ziet u hoe u de schijfversleutelingssleutel voor een bestaand HDInsight-cluster kunt roteren. Zie Azure CLI az hdinsight rotate-disk-encryption-key voor meer informatie.
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
Veelgestelde vragen over door de klant beheerde sleutelversleuteling
Hoe heeft het HDInsight-cluster toegang tot mijn sleutelkluis?
HDInsight opent uw Azure Key Vault-exemplaar met behulp van de beheerde identiteit die u koppelt aan het HDInsight-cluster. Deze beheerde identiteit kan worden gemaakt vóór of tijdens het maken van het cluster. U moet de beheerde identiteit ook toegang verlenen tot de sleutelkluis waar de sleutel is opgeslagen.
Is deze functie beschikbaar voor alle clusters in HDInsight?
Door de klant beheerde sleutelversleuteling is beschikbaar voor alle clustertypen, met uitzondering van Spark 2.1 en 2.2.
Kan ik meerdere sleutels gebruiken om verschillende schijven of mappen te versleutelen?
Nee, alle beheerde schijven en resourceschijven worden versleuteld met dezelfde sleutel.
Wat gebeurt er als het cluster geen toegang meer heeft tot de sleutelkluis of de sleutel?
Als het cluster geen toegang meer heeft tot de sleutel, worden er waarschuwingen weergegeven in de Apache Ambari-portal. In deze status mislukt de bewerking Sleutel wijzigen. Zodra de sleuteltoegang is hersteld, gaan Ambari-waarschuwingen weg en kunnen bewerkingen zoals sleutelrotatie worden uitgevoerd.
Hoe kan ik het cluster herstellen als de sleutels worden verwijderd?
Omdat alleen sleutels met voorlopig verwijderen worden ondersteund, moet het cluster weer toegang krijgen tot de sleutels als de sleutels in de sleutelkluis worden hersteld. Zie Undo-AzKeyVaultKeyRemoval of az-keyvault-key-recover om een Azure Key Vault-sleutel te herstellen.
Als een cluster omhoog wordt geschaald, ondersteunen de nieuwe knooppunten door de klant beheerde sleutels naadloos?
Ja. Het cluster heeft tijdens het omhoog schalen toegang nodig tot de sleutel in de sleutelkluis. Dezelfde sleutel wordt gebruikt om zowel beheerde schijven als resourceschijven in het cluster te versleutelen.
Zijn door de klant beheerde sleutels beschikbaar op mijn locatie?
HdInsight door de klant beheerde sleutels zijn beschikbaar in alle openbare clouds en nationale clouds.
Versleuteling op host met behulp van door platform beheerde sleutels
Inschakelen in Azure Portal
Versleuteling op de host kan worden ingeschakeld tijdens het maken van clusters in Azure Portal.
Notitie
Wanneer versleuteling op de host is ingeschakeld, kunt u geen toepassingen toevoegen aan uw HDInsight-cluster vanuit De Azure Marketplace.
Met deze optie schakelt u versleuteling op host in voor HDInsight-VM's tijdelijke gegevensschijven met behulp van PMK. Versleuteling op de host wordt alleen ondersteund op bepaalde VM-SKU's in beperkte regio's en HDInsight ondersteunt de volgende knooppuntconfiguratie en SKU's.
Zie Voor meer informatie over de juiste VM-grootte voor uw HDInsight-cluster de juiste VM-grootte selecteren voor uw Azure HDInsight-cluster. De standaard-VM-SKU voor Zookeeper-knooppunt wanneer versleuteling op host is ingeschakeld, is DS2V2.
Inschakelen met PowerShell
In het volgende codefragment ziet u hoe u een nieuw Azure HDInsight-cluster kunt maken waarvoor versleuteling op de host is ingeschakeld met behulp van PowerShell. De parameter -EncryptionAtHost $true
wordt gebruikt om de functie in te schakelen.
$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 `
Inschakelen met behulp van Azure CLI
In het volgende codefragment ziet u hoe u een nieuw Azure HDInsight-cluster kunt maken waarvoor versleuteling is ingeschakeld op de host, met behulp van Azure CLI. De parameter --encryption-at-host true
wordt gebruikt om de functie in te schakelen.
az hdinsight create -t spark -g MyResourceGroup -n MyCluster \\
-p "yourpass" \\
--storage-account MyStorageAccount --encryption-at-host true
Volgende stappen
- Zie Wat is Azure Key Vault? voor meer informatie over Azure Key Vault.
- Overzicht van bedrijfsbeveiliging in Azure HDInsight.