Chiffrement transparent dans HDFS sur Amazon EMR - Amazon EMR

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 dans la documentation Hadoop.

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 et hdfs 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.json
    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 (^).

    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
  1. Lancement de votre cluster à l'aide d'une version Amazon EMR supérieure à 4.1.0.

  2. Connectez-vous au nœud principal du cluster avec SSH.

  3. 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.

  4. Créez le chemin d'accès de zone de chiffrement dans HDFS.

    $ hadoop fs -mkdir /myHDFSPath2
  5. 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 est un serveur de gestion des clés qui offre la possibilité de mettre en place des services de chiffrement pour les clusters Hadoop et peut servir de fournisseur de clé pour Chiffrement transparent dans HDFS sur Amazon EMR. Hadoop KMS dans Amazon EMR est installé et activé par défaut lorsque vous sélectionnez l'application Hadoop lors du lancement d'un cluster EMR. Le KMS Hadoop ne stocke pas les clés lui-même, sauf dans le cas de mise en cache temporaire. Hadoop KMS agit comme un proxy entre le fournisseur de clés et le tiers de confiance du client dans un magasins de clés de sauvegarde. Il ne s'agit pas d'un magasin de clés. Le magasins de clés par défaut qui est créé pour Hadoop KMS est le Java Cryptography Extension KeyStore (JCEKS). La stratégie de force illimitée JCE est également incluse, vous pouvez donc créer des clés avec la longueur souhaitée. Hadoop KMS prend également en charge une gamme d'ACL qui contrôlent l'accès aux clés et aux opérations clés indépendamment des autres applications clientes telles que HDFS. La longueur de clé par défaut dans Amazon EMR est de 256 bits.

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. Hadoop KMS est utilisé dans le chiffrement transparent Hadoop HDFS. Pour en savoir plus sur le chiffrement transparent HDFS, consultez Chiffrement transparent HDFS dans la documentation Apache Hadoop.

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.json
    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 (^).

    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 sur false à 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.json
    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 (^).

    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 configuration hadoop-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.json
    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 (^).

    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 KMS est utilisé dans un cluster Amazon EMR avec plusieurs nœuds primaires pour un chiffrement transparent dans HDFS.

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 classification hdfs-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.