Création de clés et de certificats pour le chiffrement des données - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création de clés et de certificats pour le chiffrement des données

Avant de spécifier les options de chiffrement à l'aide d'une configuration de sécurité, choisissez le fournisseur que vous souhaitez utiliser pour les clés et les artefacts de chiffrement. Par exemple, vous pouvez utiliser AWS KMS ou un fournisseur personnalisé que vous créez. Ensuite, créez les clés ou le fournisseur de clés comme décrit dans cette section.

Fournir des clés pour chiffrer les données au repos avec Amazon EMR

Vous pouvez utiliserAWS Key Management Service(AWS KMS) ou un fournisseur de clés personnalisé pour le chiffrement des données au repos dans Amazon EMR. Lorsque vous utilisez AWS KMS, des frais s'appliquent pour le stockage et l'utilisation des clés de chiffrement. Pour en savoir plus, consultez Tarification de AWS KMS.

Cette rubrique fournit des détails clés sur la stratégie d'unAWS KMSCMK à utiliser avec Amazon EMR, ainsi que des instructions et des exemples de code pour écrire une classe de fournisseur de clés personnalisé pour le chiffrement Amazon S3. Pour plus d'informations sur la création de clés, consultezCréation de clésdans leAWS Key Management ServiceManuel du développeur.

Utilisation d’AWS KMSclés principales client (clés CMK) pour le chiffrement

LeAWS KMSLa clé de chiffrement doit être créée dans la même région que votre instance de cluster Amazon EMR et les compartiments Amazon S3 utilisés avec EMRFS. Si la clé que vous spécifiez se trouve dans un compte différent de celui que vous utilisez pour configurer un cluster, vous devez spécifier la clé à l'aide de son ARN.

Le rôle du profil d'instance Amazon EC2 doit être autorisé à utiliser le CMK que vous spécifiez. Le rôle par défaut pour le profil d'instance dans Amazon EMR estEMR_EC2_DefaultRole. Si vous utilisez un rôle différent pour le profil d'instance ou si vous utilisez des rôles IAM pour les demandes EMRFS à Amazon S3, assurez-vous que chaque rôle est ajouté en tant qu'utilisateur clé, le cas échéant. Cela donne au rôle les autorisations d'utiliser la CMK. Pour de plus amples informations, veuillez consulterUtilisation de stratégies de clédans leAWS Key Management ServiceManuel du développeuretConfiguration des rôles IAM pour les demandes EMRFS à Amazon S3.

Vous pouvez utiliser le pluginAWS Management Consolepour ajouter votre profil d'instance ou votre profil d'instance EC2 à la liste des utilisateurs clés pour le profil spécifiéAWS KMSCMK, ou vous pouvez utiliser leAWS CLIou unAWSSDK pour attacher une stratégie de clé appropriée.

Notez qu'Amazon EMR prend uniquement en charge.Clés KMS symétriques. Vous ne pouvez pas utiliser une clé KMS asymétrique pour chiffrer les données au repos dans un cluster Amazon EMR. Pour obtenir de l'aide sur la détermination de la symétrie ou de l'asymétrie d'une clé KMS, veuillez consulter.Identification des clés KMS symétriques et asymétriques.

La procédure ci-dessous explique comment ajouter le profil d'instance EMR par défaut,EMR_EC2_DefaultRoleen tant queutilisateur cléà l'aide deAWS Management Console. Elle suppose que vous avez déjà créé une clé CMK. Pour créer une nouvelle clé CMK, consultezCréation de clésdans leAWS Key Management ServiceManuel du développeur.

Pour ajouter le profil d'instance EC2 pour Amazon EMR à la liste des utilisateurs de clés de chiffrement

  1. Connectez-vous à la AWS Management Console et ouvrez la console AWS Key Management Service (AWS KMS) à l'adresse https://console.aws.amazon.com/kms

  2. Pour changer de région AWS, utilisez le Region selector (Sélecteur de région) dans l'angle supérieur droit de la page.

  3. Sélectionnez l'alias de la clé CMK à modifier.

  4. Sur la page de détails de la clé, sous Key Users (Utilisateurs de clés), choisissez Add (Ajouter).

  5. Dans la boîte de dialogue Ajouter des utilisateurs clés sélectionnez le rôle approprié. Le nom du rôle par défaut est EMR_EC2_DefaultRole.

  6. Choisissez Add (Ajouter).

Activation du chiffrement EBS en fournissant des autorisations supplémentaires pourAWS KMSKits CMK

À partir de la version 5.24.0 d'Amazon EMR, vous pouvez chiffrer le périphérique racine EBS et les volumes de stockage à l'aide d'une option de configuration de sécurité. Pour activer cette option, vous devez spécifier AWS KMS comme fournisseur de clés. En outre, vous devez accorder au rôle de service EMR EMR_DefaultRole des autorisations pour utiliser la clé CMK que vous spécifiez.

Vous pouvez utiliser le pluginAWS Management Consolepour ajouter le rôle de service EMR à la liste des utilisateurs clés pour le rôle spécifiéAWS KMSCMK, ou vous pouvez utiliser leAWS CLIou unAWSSDK pour attacher une stratégie de clé appropriée.

La procédure ci-dessous explique comment ajouter le rôle de service EMR par défaut, EMR_DefaultRole, en tant qu'utilisateur de clés via AWS Management Console. Elle suppose que vous avez déjà créé une clé CMK. Pour créer une nouvelle clé CMK, consultezCréation de clésdans leAWS Key Management ServiceManuel du développeur.

Pour ajouter le rôle de service EMR à la liste des utilisateurs de clé de chiffrement

  1. Connectez-vous à la AWS Management Console et ouvrez la console AWS Key Management Service (AWS KMS) à l'adresse https://console.aws.amazon.com/kms

  2. Pour changer de région AWS, utilisez le Region selector (Sélecteur de région) dans l'angle supérieur droit de la page.

  3. ChoisissezClés CMKdans la barre latérale gauche.

  4. Sélectionnez l'alias de la clé CMK à modifier.

  5. Sur la page de détails de la clé, sous Key Users (Utilisateurs de clés), choisissez Add (Ajouter).

  6. Dans la boîte de dialogue Ajouter des utilisateurs clés sélectionnez le rôle approprié. Le nom du rôle de service EMR par défaut est EMR_DefaultRole.

  7. Choisissez Add (Ajouter).

Création d'un fournisseur de clés personnalisé

Lorsque vous utilisez une configuration de sécurité, vous devez spécifier un autre nom de classe de fournisseur pour le chiffrement de disque local et le chiffrement Amazon S3.

Lorsque vous créez un fournisseur de clés personnalisé, l'application doit implémenter leEncryptionMaterialsProvider, qui est disponible dans leAWS SDK for Javaversion 1.11.0 et ultérieure. L'implémentation peut utiliser n'importe quelle stratégie pour fournir du matériel de chiffrement. Vous pouvez, par exemple, choisir de fournir des matériaux de chiffrement statiques ou de les intégrer à un système de gestion des clés plus complexe.

L'algorithme de chiffrement utilisé pour les matériaux de chiffrement personnalisés doit êtreAES/GCM/NoPadding.

La classe EncryptionMaterialsProvider obtient les matériaux de chiffrement par contexte de chiffrement. Amazon EMR renseigne les informations contextuelles de chiffrement lors de l'exécution pour aider l'appelant à déterminer les matériaux de chiffrement corrects à renvoyer.

Exemple : Utilisation d'un fournisseur de clés personnalisé pour le chiffrement Amazon S3 avec EMRFS

Lorsque Amazon EMR récupère les matériaux de chiffrement de la classe EncryptionMaterialsProvider pour effectuer le chiffrement, EMRFS remplit éventuellement l'argument materialsDescription avec deux champs : l'URI Amazon S3 pour l'objet et l'ID JobFlowId du cluster, qui peut être utilisé par le fournisseur EncryptionMaterialsProvider pour renvoyer les matériaux de chiffrement de manière sélective.

Par exemple, le fournisseur peut renvoyer différentes clés pour différents préfixes d'URI Amazon S3. Il s'agit de la materialsDescription de chiffrement renvoyés qui sont éventuellement stockés avec l'objet Amazon S3 plutôt que la valeur MaterialsDescription générée par EMRFS et transmise au fournisseur. Lors du déchiffrement d'un objet Amazon S3, la description des matériaux de chiffrement est transmise à la classe EncryptionMaterialsProvider, de sorte qu'il peut, encore une fois, renvoyer sélectivement la clé correspondante pour déchiffrer l'objet.

Vous trouverez une implémentation de référence EncryptionMaterialsProvider est fournie ci-dessous. Un autre fournisseur personnalisé,Fournisseur de matériel de chiffrement EMRFSRSA, est disponible sur GitHub.

import com.amazonaws.services.s3.model.EncryptionMaterials; import com.amazonaws.services.s3.model.EncryptionMaterialsProvider; import com.amazonaws.services.s3.model.KMSEncryptionMaterials; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; import java.util.Map; /** * Provides KMSEncryptionMaterials according to Configuration */ public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{ private Configuration conf; private String kmsKeyId; private EncryptionMaterials encryptionMaterials; private void init() { this.kmsKeyId = conf.get("my.kms.key.id"); this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId); } @Override public void setConf(Configuration conf) { this.conf = conf; init(); } @Override public Configuration getConf() { return this.conf; } @Override public void refresh() { } @Override public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) { return this.encryptionMaterials; } @Override public EncryptionMaterials getEncryptionMaterials() { return this.encryptionMaterials; } }

Fournir des certificats pour le chiffrement des données en transit avec le chiffrement Amazon EMR

Avec Amazon EMR version 4.8.0 ou une version ultérieure, deux options s'offrent à vous afin de spécifier les artefacts pour le chiffrement des données en transit à l'aide d'une configuration de sécurité :

  • Vous pouvez créer manuellement les certificats PEM, les inclure dans un fichier zip, puis référencer le fichier zip dans Amazon S3.

  • Vous pouvez implémenter un fournisseur de certificats personnalisés en tant que classe Java. Vous spécifiez le fichier JAR de l'application dans Amazon S3, puis vous fournissez le nom de classe complet du fournisseur, comme déclaré dans l'application. Cette classe doit implémenter l'interface TLSArtifactsProvider disponible à partir de la version 1.11.0 de AWS SDK for Java.

Amazon EMR télécharge automatiquement les objets sur chaque nœud du cluster et les utilise ultérieurement pour mettre en œuvre les fonctionnalités de chiffrement open source en transit. Pour plus d'informations sur les options disponibles, consultez Chiffrement en transit.

Utilisation des certificats PEM

Lorsque vous spécifiez un fichier zip pour le chiffrement en transit, la configuration de sécurité s'attend à ce que les fichiers PEM contenus dans ce fichier zip aient exactement le même nom que ci-dessous :

Certificats de chiffrement en transit
Nom de fichier Obligatoire/facultatif Détails
privateKey.pem Obligatoire Clé privée
certificateChain.pem Obligatoire Chaîne de certificats
trustedCertificates.pem Facultatif Obligatoire si le certificat fourni n'est signé ni par l'autorité de certification racine Java par défaut de confiance (CA), ni par un intermédiaire CA qui est rattaché avec l'autorité de certification racine Java par défaut. Les autorités de certification racine Java par défaut sont disponibles : jre/lib/security/cacerts.

Il est probable que le fichier PEM de la clé privée soit un certificat générique permettant d'accéder au domaine Amazon VPC dans lequel se trouvent vos instances de cluster. Par exemple, si le cluster se trouve dans us-east-1 (N. Virginia), vous pourriez définir un nom commun dans la configuration du certificat qui autorise l'accès au cluster en spécifiant CN=*.ec2.internal dans la définition d'objet de ce certificat. Si votre cluster se trouve dans la région us-west-2 (Oregon), vous pouvez spécifier CN=*.us-west-2.compute.internal.

Si le fichier PEM fourni dans l'artefact de chiffrement ne comporte pas de caractère générique dans le CN pour le domaine, vous devez modifier la valeur dehadoop.ssl.hostname.verifierpourALLOW_ALL. Cette opération est exécutée aveccore-siteclassification lors de la soumission de configurations à un cluster ou en ajoutant cette valeur dans lecore-site.xmldans le fichier. Cette modification est nécessaire car le vérificateur de nom d'hôte par défaut n'accepte pas de nom d'hôte sans le caractère générique, ce qui entraîne une erreur. Pour plus d'informations sur la configuration des clusters EMR dans Amazon VPC, consultezSélectionnez un sous-réseau Amazon VPC pour le cluster.

L'exemple suivant montre comment utiliser OpenSSL pour générer un certificat X.509 avec une clé privée RSA 1024 bits. La clé autorise l'accès aux instances de cluster Amazon EMR de l'émetteur dans la région us-west-2 (Oregon), comme spécifié par la*.us-west-2.compute.internalnom de domaine en tant que nom commun.

D'autres éléments d'objet facultatifs tels que le pays (C), l'état (S), la langue (L), etc. sont spécifiés. Comme un certificat auto-signé est généré, la deuxième commande dans l'exemple copie le fichier certificateChain.pem dans le fichier trustedCertificates.pem. La troisième commande utilise zip pour créer le fichier my-certs.zip qui contient les certificats.

Important

Cet exemple est la démonstration d'une preuve de concept uniquement. L'utilisation de certificats auto-signés n'est pas recommandé et présente un risque de sécurité potentiel. Pour les systèmes de production, utilisez une autorité de certification (CA) approuvée pour émettre des certificats.

$ openssl req -x509 -newkey rsa:1024 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal' $ cp certificateChain.pem trustedCertificates.pem $ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem