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 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és personnalisé pour le chiffrement des données au repos dans Amazon EMR. Lorsque vous les utilisez 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 des fins de 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' EC2 instance Amazon 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 AWS Management Console pour ajouter votre profil d' EC2 instance ou votre profil d'instance à 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 AWS Management Console. 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' EC2 instance d'Amazon EMR à la liste des utilisateurs de clés de chiffrement
  1. Connectez-vous à la console AWS Key Management Service (AWS KMS) AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/kms.

  2. Pour modifier le Région AWS, utilisez le sélecteur de région 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 AWS KMS le spécifier comme fournisseur principal. En outre, vous devez accorder au rôle de service EMR_DefaultRole les autorisations nécessaires pour utiliser celles AWS KMS key que vous spécifiez.

Vous pouvez utiliser le AWS Management Console pour ajouter le rôle de service à 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.

La procédure suivante décrit comment utiliser le AWS Management Console pour ajouter le rôle de service Amazon EMR par défaut en EMR_DefaultRole 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 AWS Key Management Service (AWS KMS) AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/kms.

  2. Pour modifier le Région AWS, utilisez le sélecteur de région 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 est. EMR_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ées dépendent de l'utilisation du chiffrement de disque local et du chiffrement Amazon S3, ainsi que de la version publiée par 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 versions ultérieures.

Vous pouvez utiliser n'importe quelle stratégie pour fournir du matériel 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/NoPaddingpour le matériel de chiffrement personnalisé.

Si vous utilisez le chiffrement de disque local, l'algorithme de chiffrement à utiliser pour le matériel de chiffrement personnalisé varie selon la version de l'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 ulté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 : utilisation d'un fournisseur de clés personnalisé pour le chiffrement Amazon S3 avec EMRFS

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

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 du matériel de chiffrement est transmise à la EncryptionMaterialsProvider classe, afin qu'elle puisse, à nouveau, renvoyer de manière sélective la clé correspondante pour déchiffrer l'objet.

Une implémentation EncryptionMaterialsProvider de 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 4.8.0 d'Amazon EMR 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. La classe doit implémenter l'interface TLSArtifactsProvider disponible à partir de la AWS SDK for Java version 1.11.0.

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 Nous vous recommandons de fournir un certificat qui n'est pas signé par l'autorité de certification racine sécurisée (CA) par défaut de Java ou par une autorité de certification intermédiaire pouvant être liée à l'autorité de certification racine approuvée par défaut de Java. Nous vous déconseillons d'utiliser le mode public CAs lorsque vous utilisez des certificats génériques ou lorsque vous désactivez la vérification du nom d'hôte.

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 contient pas de caractère générique pour le domaine dans le nom commun, vous devez modifier la valeur de en. 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 nécessaire 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 Configuration de la mise en réseau dans un VPC pour Amazon EMR.

L'exemple suivant montre comment utiliser OpenSSL pour générer un certificat X.509 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 n'est qu'une proof-of-concept démonstration. 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