View a markdown version of this page

Créez des clés et des certificats pour le chiffrement des données avec Amazon EMR - 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éez des clés et des certificats pour le chiffrement des données avec Amazon EMR

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.

Fourniture de clés pour chiffrer les données au repos

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

Cette rubrique fournit des informations sur la stratégie de clé KMS à 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, consultez Création de clés dans le Guide du développeur AWS Key Management Service .

Utilisation AWS KMS keys pour le chiffrement

La clé de AWS KMS 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 la clé KMS que vous spécifiez. Le rôle par défaut du profil d'instance dans Amazon EMR est EMR_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 adressées à Amazon S3, assurez-vous que chaque rôle est ajouté en tant qu'utilisateur clé, le cas échéant. Cela donne au rôle des autorisations pour utiliser la clé KMS. Pour plus d'informations, consultez les sections Utilisation des stratégies de clé dans le Guide du développeur AWS Key Management Service et Configuration des rôles IAM pour les demandes EMRFS adressées à Amazon S3.

Vous pouvez utiliser le Console de gestion AWS pour ajouter votre profil d'instance ou votre profil d'instance EC2 à la liste des utilisateurs clés pour la clé KMS spécifiée, ou vous pouvez utiliser le AWS CLI ou un AWS SDK pour associer une politique de clé appropriée.

Notez qu'Amazon EMR prend uniquement en charge les 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 savoir si une clés KMS est symétrique ou asymétrique, consultez Identification de clés KMS symétriques et asymétriques.

La procédure ci-dessous décrit comment ajouter le profil d'instance Amazon EMR par défaut, EMR_EC2_DefaultRole, en tant qu'utilisateur de clé à l'aide de la Console de gestion AWS. Elle suppose que vous avez déjà créé une clé KMS. Pour créer une nouvelle clé KMS, consultez Création de clés dans le Guide du développeur AWS Key Management Service .

Pour ajouter le profil d'instance EC2 pour Amazon EMR à la liste des utilisateurs de clés de chiffrement
  1. Connectez-vous à la console () Console de gestion AWS et ouvrez la console AWS Key Management Service (AWS KMS) à l'adresse https://console.aws.amazon.com/kms.

  2. Pour modifier la Région AWS, utilisez le sélecteur de région situé dans le coin supérieur droit de la page.

  3. Sélectionnez l'alias de la clé KMS à 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 Ajouter.

Activation du chiffrement EBS en fournissant des autorisations supplémentaires pour les clés KMS

À 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 l'autorisation EMR_DefaultRole d'utiliser le rôle AWS KMS key que vous spécifiez.

Vous pouvez utiliser le Console de gestion AWS pour ajouter le rôle de service à la liste des principaux utilisateurs pour la clé KMS spécifiée, ou vous pouvez utiliser le AWS CLI ou un AWS SDK pour associer une politique de clé appropriée.

La procédure suivante décrit comment utiliser le Console de gestion AWS pour ajouter le rôle de service Amazon EMR par défaut EMR_DefaultRole en tant qu'utilisateur clé. Elle suppose que vous avez déjà créé une clé KMS. Pour créer une nouvelle clé KMS, consultez Création de clés dans le Guide du développeur AWS Key Management Service .

Pour ajouter le rôle de service Amazon EMR à la liste des utilisateurs de clés de chiffrement
  1. Connectez-vous à la console () Console de gestion AWS et ouvrez la console AWS Key Management Service (AWS KMS) à l'adresse https://console.aws.amazon.com/kms.

  2. Pour modifier la Région AWS, utilisez le sélecteur de région situé dans le coin supérieur droit de la page.

  3. Sélectionnez Clés gérées par le client dans la barre latérale gauche.

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

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

  6. Dans la section Ajouter des utilisateurs clés, sélectionnez le rôle approprié. Le nom du rôle de service par défaut pour Amazon EMR estEMR_DefaultRole.

  7. Choisissez 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. Les exigences relatives au fournisseur de clés personnalisé varient selon que vous utilisez le chiffrement de disque local et le cryptage Amazon S3, ainsi que la version finale d'Amazon EMR.

Selon le type de chiffrement que vous utilisez lors de la création d'un fournisseur de clés personnalisé, l'application doit également implémenter différentes EncryptionMaterialsProvider interfaces. Les deux interfaces sont disponibles dans le AWS SDK pour Java version 1.11.0 et ultérieure.

Vous pouvez utiliser n'importe quelle stratégie pour fournir des matériaux de chiffrement pour la mise en œuvre. Par exemple, vous pouvez choisir de fournir du matériel de chiffrement statique ou de l'intégrer à un système de gestion de clés plus complexe.

Si vous utilisez le chiffrement Amazon S3, vous devez utiliser les algorithmes de chiffrement AES/GCM/NoPadding pour les supports de chiffrement personnalisés.

Si vous utilisez le chiffrement de disque local, l'algorithme de chiffrement à utiliser pour les supports de chiffrement personnalisés varie en fonction de la version d'EMR. Pour Amazon EMR 7.0.0 et versions antérieures, vous devez utiliser. AES/GCM/NoPadding Pour Amazon EMR 7.1.0 et versions supérieures, vous devez utiliser AES.

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

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

Lorsqu'Amazon EMR extrait le matériel de chiffrement de la EncryptionMaterialsProvider classe pour effectuer le chiffrement, EMRFS remplit éventuellement l'argument MaterialsDescription avec deux champs : l'URI Amazon S3 pour l'objet et l'URI du cluster, qui peuvent être utilisés par la classe pour renvoyer les EncryptionMaterialsProvider matériaux JobFlowId de chiffrement de manière sélective.

Par exemple, le fournisseur peut renvoyer des clés différentes pour différents préfixes d'URI Amazon S3. C'est la description des matériaux de chiffrement renvoyés qui est finalement stockée avec l'objet Amazon S3 plutôt que la valeur materialsDescription qui est 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 EncryptionMaterialsProvider classe, afin que celle-ci puisse, à nouveau, renvoyer de manière sélective la clé correspondante pour déchiffrer l'objet.

Une implémentation de EncryptionMaterialsProvider référence est fournie ci-dessous. Un autre fournisseur personnalisé est disponible auprès de GitHub. EMRFSRSAEncryptionMaterialsProvider

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 de chiffrement des données en transit avec le chiffrement Amazon EMR

Avec la version 7.11.0 ou ultérieure d'Amazon EMR, vous disposez de trois options pour spécifier des artefacts pour le chiffrement des données en transit à l'aide d'une configuration de sécurité :

  • Vous pouvez demander à Amazon EMR de créer et de gérer des certificats privés pour vous. Lorsque vous sélectionnez cette option, Amazon EMR télécharge le PEM-encoded certificat de l'autorité de certification créée AWS Secrets Manager dans votre compte pour que vous puissiez l'utiliser dans vos boutiques de confiance. Pour plus de détails sur la configuration et des exemples de commandes, consultezConfiguration du chiffrement des données.

  • 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. La classe doit implémenter l'TLSArtifactsProviderinterface disponible à partir de la AWS SDK pour Java version 1.11.0.

Pour les versions 4.8.0 à 7.10.0 d'Amazon EMR, seul un fichier .zip ou une classe Java personnalisée sont pris en charge.

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 :

In-transit certificats de chiffrement
Nom de fichier Required/optional Détails
privé Key.pem Obligatoire Clé privée
certificat Chain.pem Obligatoire Chaîne de certificats
fiable Certificates.pem Facultatif Nous vous recommandons de fournir un certificat qui n'est pas signé par l'autorité de certification racine sécurisée par défaut de Java ou par une autorité de certification intermédiaire pouvant établir un lien avec l'autorité de certification racine sécurisée par défaut de Java. Nous vous déconseillons d'utiliser des autorités de certification publiques lorsque vous utilisez des certificats génériques ou lorsque vous désactivez la vérification du nom d'hôte.
Note

Amazon EMR nécessite des clés privées sans phrases de passe. Amazon EMR ne prend pas en charge les clés privées protégées par mot de passe (formats PBES1 et PBES2). Les services Amazon EMR démarrent automatiquement, de sorte qu'aucun utilisateur n'est disponible pour fournir une phrase secrète. Si vous utilisez une clé privée protégée par mot de passe, le cluster ne démarre pas avec une erreur similaire à. Failed to read the private key from /emr/instance-controller/emr-encryption/privateKey.pem

Pour supprimer une phrase secrète d'une clé privée existante, exécutez la commande suivante. Reconfigurez ensuite votre configuration de sécurité pour utiliser le fichier clé mis à jour.

openssl rsa -in encrypted_privateKey.pem -out privateKey.pem

Nous vous recommandons de configurer le fichier PEM de la clé privée de sorte qu'il joue le rôle de 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 pour le domaine dans le nom commun, vous devez modifier la valeur de to. hadoop.ssl.hostname.verifier ALLOW_ALL Pour ce faire, dans les versions 7.3.0 et supérieures d'Amazon EMR, ajoutez la core-site classification lorsque vous soumettez des configurations à un cluster. Dans les versions antérieures à 7.3.0, ajoutez la configuration "hadoop.ssl.hostname.verifier": "ALLOW_ALL" directement dans le core-site.xml fichier. Cette modification est requise car le vérificateur de nom d'hôte par défaut nécessite un nom d'hôte sans caractère générique, car tous les hôtes du cluster l'utilisent. Pour plus d'informations sur la configuration d'un cluster EMR au sein d'un Amazon VPC, consultez Configurer la mise en réseau dans un VPC pour Amazon EMR.

L'exemple suivant montre comment utiliser OpenSSL pour générer un X.509 certificat auto-signé avec une clé privée RSA de 2048 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 le nom de domaine *.us-west-2.compute.internal comme 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:2048 -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