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 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 utiliser AWS Key Management Service (AWS KMS) ou un fournisseur de clés personnalisé pour le chiffrement des données au repos sur AmazonEMR. 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 les principaux détails de la politique relative à une KMS clé à utiliser avec AmazonEMR, ainsi que des directives et des exemples de code pour écrire une classe de fournisseur de clés personnalisée 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 EMR cluster Amazon et les compartiments Amazon S3 utilisés avecEMRFS. 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 sonARN.

Le rôle du profil d'EC2instance Amazon doit être autorisé à utiliser la KMS clé que vous spécifiez. Le rôle par défaut du 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 IAM des rôles pour les EMRFS demandes 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 l'autorisation d'utiliser la KMS clé. Pour plus d'informations, consultez les sections Utilisation des politiques clés dans le guide du AWS Key Management Service développeur et Configuration IAM des rôles pour les EMRFS demandes adressées à Amazon S3.

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

Notez qu'Amazon ne EMR prend en charge que les KMSclés symétriques. Vous ne pouvez pas utiliser de KMSclé asymétrique pour chiffrer des données au repos dans un cluster AmazonEMR. Pour savoir si une KMS clé est symétrique ou asymétrique, consultez la section Identification des clés symétriques et asymétriques. KMS

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

Pour ajouter le profil d'EC2instance 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 KMS clé à 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 EBS chiffrement en fournissant des autorisations supplémentaires pour les KMS clés

À partir de EMR la version 5.24.0 d'Amazon, vous pouvez chiffrer le périphérique EBS racine 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 ou AWS Management Console pour ajouter le rôle de service à la liste des utilisateurs clés pour la KMS clé spécifiée, ou vous pouvez utiliser le AWS CLI ou AWS SDK pour associer une politique clé appropriée.

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

Pour ajouter le rôle de EMR service Amazon à 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 KMS clé à 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ées varient selon que vous utilisez le chiffrement de disque local et le chiffrement Amazon S3, ainsi que selon la EMR version publiée par Amazon.

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 les versions 1.11.0 et ultérieures AWS SDK pour Java.

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 les EMR versions. 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 le matériel de chiffrement à renvoyer.

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, il remplit EMRFS éventuellement l' materialsDescription argument avec deux champs : l'Amazon S3 URI pour l'objet et le champ JobFlowId du cluster, qui peuvent être utilisés par la EncryptionMaterialsProvider classe pour renvoyer du matériel de chiffrement de manière sélective.

Par exemple, le fournisseur peut renvoyer des clés différentes pour différents URI préfixes Amazon S3. Il s'agit de la description du matériel de chiffrement renvoyé qui est finalement stocké avec l'objet Amazon S3 plutôt que de la materialsDescription valeur générée 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; } }

Fourniture de certificats pour chiffrer les données en transit avec Amazon EMR Encryption

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

  • Vous pouvez créer manuellement des PEM certificats, 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 JAR fichier de l'application dans Amazon S3, puis vous fournissez le nom de classe complet du fournisseur tel que déclaré dans l'application. La classe doit implémenter l'TLSArtifactsProviderinterface disponible à partir de la AWS SDK for Java version 1.11.0.

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

Utilisation de PEM certificats

Lorsque vous spécifiez un fichier .zip pour le chiffrement en transit, la configuration de sécurité s'attend à ce que PEM les fichiers du fichier .zip soient nommés exactement comme ils apparaissent 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. La racine sécurisée par défaut de Java CAs se trouve dansjre/lib/security/cacerts.

Vous souhaiterez probablement configurer le PEM fichier de clé privée comme un certificat générique permettant d'accéder au VPC domaine Amazon dans lequel résident 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 PEM fichier fourni dans l'artefact de chiffrement ne contient pas de caractère générique dans le CN du domaine, vous devez modifier la valeur de hadoop.ssl.hostname.verifier en. ALLOW_ALL Cela se fait avec la classification core-site lors de la soumission de configurations à un cluster ou en ajoutant cette valeur dans le fichier core-site.xml. Cette modification est nécessaire car le vérificateur de nom d'hôte par défaut n'accepte pas un nom d'hôte sans le caractère générique, ce qui entraîne une erreur. Pour plus d'informations sur la configuration de EMR clusters au sein d'un AmazonVPC, consultezConfiguration de la mise en réseau.

L'exemple suivant montre comment utiliser Open SSL pour générer un certificat X.509 auto-signé avec une clé privée de 1024 bitsRSA. La clé permet d'accéder aux instances du EMR cluster Amazon de l'émetteur dans la région us-west-2 (Oregon), comme indiqué par le nom de *.us-west-2.compute.internal 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 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: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