Chiffrement transparent dans HDFS sur Amazon EMR
Le chiffrement transparent est mis en œuvre grâce à l'utilisation des zones de chiffrement HDFS qui sont des chemins d'accès HDFS que vous définissez. Chaque zone de chiffrement a sa propre clé, qui est stockée dans le serveur de clés spécifié à l'aide de la classification de configuration hdfs-site
.
A partir de la version 4.8.0 d'Amazon EMR, vous pouvez utiliser les configurations de sécurité Amazon EMR pour configurer plus facilement les paramètres de chiffrement des données pour les clusters. Les configurations de sécurité offrent des paramètres permettant d'activer la sécurité des données en transit et des données au repos dans les volumes de stockage Amazon Elastic Block Store (Amazon EBS) et les données EMRFS dans Amazon S3. Pour plus d'informations, consultez Chiffrement des données en transit et au repos dans le Guide de gestion d'Amazon EMR.
Amazon EMR utilise le KMS Hadoop par défaut. Toutefois, vous pouvez utiliser un autre KMS qui met en œuvre l'opération API KeyProvider. Chaque fichier dans une zone de chiffrement HDFS a sa propre clé de chiffrement de données unique qui est chiffrée par la clé de la zone de chiffrement. Les données HDFS sont chiffrées de bout en bout (au repos et en transit) lorsque les données sont écrites dans une zone de chiffrement car les activités de chiffrement et de déchiffrement se produisent uniquement dans le client.
Vous ne pouvez pas déplacer des fichiers entre les zones de chiffrement ou d'une zone de chiffrement vers des chemins d'accès non chiffrés.
Le client HDFS et NameNode interagissent avec le KMS Hadoop (ou un autre KMS que vous avez configuré) via l'opération API KeyProvider. Le KMS est responsable du stockage des clés de chiffrement dans le magasins de clés de sauvegarde. En outre, Amazon EMR inclut la stratégie force illimitée JCE afin que vous puissiez créer des clés à la longueur souhaitée.
Pour plus d'informations, consultez Chiffrement transparent dans HDFS
Note
Dans Amazon EMR, KMS sur HTTPS n'est pas activé par défaut avec Hadoop KMS. Pour plus d'informations sur l'activation de KMS sur HTTPS, consultez la Documentation Hadoop KMS
Configuration du chiffrement transparent HDFS
Vous pouvez configurer le chiffrement transparent dans Amazon EMR en créant des clés et en ajoutant des zones de chiffrement. Pour ce faire, plusieurs options s'offrent à vous :
-
Avec l'opération API de configuration Amazon EMR lorsque vous créez un cluster
-
Avec une étape Hadoop JAR avec command-runner.jar
-
En vous connectant au nœud principal du cluster Hadoop et en utilisant les clients de ligne de commande
hadoop key
ethdfs crypto
-
Avec l'API REST de Hadoop KMS et HDFS
Pour plus d'informations sur les API REST, consultez la documentation concernée pour HDFS et KMS Hadoop.
Pour créer des zones de chiffrement et leurs clés lors de la création du cluster à l'aide de l'interface de ligne de commande
La classification hdfs-encryption-zones
dans l'opération d'API de configuration vous permet de spécifier un nom de clé et une zone de chiffrement lorsque vous créez un cluster. Amazon EMR crée cette clé dans Hadoop KMS sur votre cluster et configure la zone de chiffrement.
-
Créez un cluster à l'aide de la commande suivante.
aws emr create-cluster --release-label
emr-5.36.1
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonNote
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
myConfig.json
:[ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
Pour créer des zones de chiffrement et leurs clés manuellement sur le nœud maître
-
Lancement de votre cluster à l'aide d'une version Amazon EMR supérieure à 4.1.0.
-
Connectez-vous au nœud principal du cluster avec SSH.
-
Créez une clé au sein d'Hadoop KMS.
$ hadoop key create path2_key path2_key has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=256, description='null', attributes=null}. KMSClientProvider[http://ip-x-x-x-x.ec2.internal:16000/kms/v1/] has been updated.
Important
Hadoop KMS a besoin que vos noms de clés soient en minuscules. Si vous utilisez une clé comprenant des majuscules, votre cluster échouera lors du lancement.
-
Créez le chemin d'accès de zone de chiffrement dans HDFS.
$ hadoop fs -mkdir /myHDFSPath2
-
Faites du chemin d'accès HDFS une zone de chiffrement à l'aide de la clé que vous avez créée.
$ hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2 Added encryption zone /myHDFSPath2
Pour créer des zones de chiffrement et leurs clés manuellement à l'aide de l'AWS CLI
-
Ajoutez des étapes pour créer les clés KMS et les zones de chiffrement manuellement avec la commande suivante.
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Create First Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path1_key\""] \ Type=CUSTOM_JAR,Name="Create First Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create First Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path1_key -path /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path2_key\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath2\""] \ Type=CUSTOM_JAR,Name="Create Second Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2\""]
Note
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
Considérations pour le chiffrement transparent HDFS
Une bonne pratique consiste à créer une zone de chiffrement pour chaque application où des fichiers peuvent être écrits. En outre, vous pouvez chiffrer tous les HDFS à l'aide de la classification hdfs-encryption-zones dans l'API de configuration et spécifier le chemin d'accès racine (/) comme étant la zone de chiffrement.
Serveur de gestion des clés Hadoop
Hadoop KMS
Pour configurer Hadoop KMS, utilisez la classification hadoop-kms-site pour modifier les paramètres. Pour configurer les ACL, vous utilisez la classification kms-acls.
Pour plus d'informations, consultez la Documentation Hadoop KMS
Note
Dans Amazon EMR, KMS sur HTTPS n'est pas activé par défaut avec Hadoop KMS. Pour savoir comment activer KMS sur HTTPS, consultez la Documentation KMS Hadoop
Important
Hadoop KMS a besoin que vos noms de clés soient en minuscules. Si vous utilisez une clé comprenant des majuscules, votre cluster échouera lors du lancement.
Configuration de Hadoop KMS dans Amazon EMR
Avec Amazon EMR version 4.6.0 ou ultérieure, kms-http-port
est 9700 et kms-admin-port
est 9701.
Vous pouvez configurer Hadoop KMS au moment de la création du cluster à l'aide de l'API de configuration pour versions Amazon EMR. Les éléments suivants correspondent aux classifications d'objet de configuration disponibles pour Hadoop KMS :
Classifications de configuration Hadoop KMS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Classification | Nom de fichier | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-site | kms-site.xml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-acls | kms-acls.xml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-env | kms-env.sh |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-log4j | kms-log4j.properties |
Pour définir les ACL Hadoop KMS à l'aide de l'interface de ligne de commande
-
Créez un cluster avec Hadoop KMS avec des ACL à l'aide de la commande suivante :
aws emr create-cluster --release-label
emr-5.36.1
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonNote
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
myConfig.json
:[ { "Classification": "hadoop-kms-acls", "Properties": { "hadoop.kms.blacklist.CREATE": "hdfs,foo,myBannedUser", "hadoop.kms.acl.ROLLOVER": "myAllowedUser" } } ]
Pour désactiver le cache Hadoop KMS à l'aide de l'interface de ligne de commande
-
Créez un cluster avec le paramètre Hadoop KMS
hadoop.kms.cache.enable
défini surfalse
à l'aide de la commande suivante :aws emr create-cluster --release-label
emr-5.36.1
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonNote
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
myConfig.json
:[ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.cache.enable": "false" } } ]
Pour définir des variables d'environnement le script kms-env.sh
à l'aide de l'interface de ligne de commande
-
Modifiez les paramètres dans
kms-env.sh
via la configurationhadoop-kms-env
. Créez un cluster avec Hadoop KMS à l'aide de la commande suivante :aws emr create-cluster --release-label
emr-5.36.1
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonNote
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
myConfig.json
:[ { "Classification": "hadoop-kms-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_LIBRARY_PATH": "
/path/to/files
", "KMS_SSL_KEYSTORE_FILE": "/non/Default/Path/
.keystore", "KMS_SSL_KEYSTORE_PASS": "myPass
" }, "Configurations": [ ] } ] } ]
Pour plus d'informations sur la configuration de Hadoop KMS, consultez la Documentation Hadoop KMS
Chiffrement transparent HDFS sur les clusters EMR avec plusieurs nœuds principaux
Apache Ranger
Apache Ranger KMS stocke sa clé racine et ses clés de zone de chiffrement (EZ) dans votre Amazon RDS pour un cluster Amazon EMR comportant plusieurs nœuds primaires. Pour activer le chiffrement transparent dans HDFS sur un cluster Amazon EMR avec plusieurs nœuds primaires, vous devez fournir les configurations suivantes.
-
Amazon RDS ou votre propre URL de connexion au serveur MySQL pour stocker la clé racine Ranger KMS et la clé EZ
-
Nom d'utilisateur et mot de passe pour MySQL
-
Mot de passe pour la clé racine KMS de Ranger
-
Fichier PEM de l'autorité de certification (CA) pour la connexion SSL au serveur MySQL
Vous pouvez fournir ces configurations à l'aide des classifications ranger-kms-dbks-site
et ranger-kms-db-ca
, comme l'illustre l'exemple suivant.
[ { "Classification": "ranger-kms-dbks-site", "Properties": { "ranger.ks.jpa.jdbc.url": "
jdbc:log4jdbc:mysql://mysql-host-url.xx-xxx-1.xxx.amazonaws.com:3306/rangerkms
", "ranger.ks.jpa.jdbc.user": "mysql-user-name
", "ranger.ks.jpa.jdbc.password": "mysql-password
", "ranger.db.encrypt.key.password": "password-for-encrypting-a-master-key
" } }, { "Classification": "ranger-kms-db-ca", "Properties": { "ranger.kms.trust.ca.file.s3.url": "s3://rds-downloads/rds-ca-2019-root.pem
" } } ]
Voici les classifications d'objets de configuration pour Apache Ranger KMS.
Classifications de configuration Hadoop KMS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Classification | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-dbks-site | Modifiez les valeurs dans le fichier dbks-site.xml de Ranger KMS. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-site | Modifiez les valeurs dans le fichier ranger-kms-site.xml de Ranger KMS. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-env | Modifiez les valeurs dans l'environnement Ranger KMS. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger -kms-log4j | Modifiez les valeurs dans le fichier kms-log4j.properties de Ranger KMS. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-db-ca | Modifiez les valeurs du fichier CA sur S3 pour la connexion SSL MySQL avec Ranger KMS. |
Considérations
-
Il est vivement recommandé de chiffrer votre instance Amazon RDS pour améliorer la sécurité. Pour plus d'informations, consultez Présentation du chiffrement des ressources Amazon RDS.
-
Il est fortement recommandé d'utiliser une base de données MySQL distincte pour chaque cluster Amazon EMR avec plusieurs nœuds primaires pour garantir un niveau de sécurité élevé.
-
Pour configurer le chiffrement transparent dans HDFS sur un cluster Amazon EMR avec plusieurs nœuds primaires, vous devez spécifier la classification
hdfs-encryption-zones
lors de la création du cluster. Sinon, Ranger KMS ne sera pas configuré ou ne démarrera pas. La reconfiguration de la classificationhdfs-encryption-zones
ou de l'une des classifications de la configuration KMS de Hadoop sur un cluster en cours d'exécution n'est pas prise en charge sur un cluster Amazon EMR avec plusieurs nœuds primaires.