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.
Chiffrement côté client sur Amazon S3
Avec le chiffrement côté client Amazon S3, le chiffrement et le déchiffrement Amazon S3 ont lieu dans le EMRFS client de votre cluster. Les objets sont chiffrés avant d'être chargés sur Amazon S3 et déchiffrés après leur chargement. Le fournisseur que vous indiquez fournit la clé de chiffrement utilisée par le client. Le client peut utiliser les clés fournies par AWS KMS (CSE-KMS) ou une classe Java personnalisée qui fournit la clé racine côté client (CSE-C). Les spécificités du chiffrement sont légèrement différentes entre CSE - KMS et CSE -C, selon le fournisseur spécifié et les métadonnées de l'objet déchiffré ou chiffré. Pour plus d'informations sur ces différences, consultez Protection des données à l'aide du chiffrement côté client dans le Guide de l'utilisateur Amazon Simple Storage Service.
Note
Amazon S3 garantit CSE uniquement que les EMRFS données échangées avec Amazon S3 sont chiffrées ; toutes les données sur les volumes d'instance de cluster ne sont pas cryptées. De plus, comme Hue n'en a pas EMRFS besoin, les objets que le navigateur de fichiers Hue S3 écrit sur Amazon S3 ne sont pas chiffrés.
Pour spécifierCSE, KMS pour les EMRFS données d'Amazon S3 à l'aide du AWS CLI
-
Tapez la commande suivante et remplacez
MyKMSKeyID
avec l'ID de clé ou ARN de la KMS clé à utiliser :aws emr create-cluster --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
Création d'un fournisseur de clés personnalisé
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.
-
Pour implémenter le chiffrement Amazon S3, utilisez le fichier com.amazonaws.services.s3.model. EncryptionMaterialsProvider interface.
-
Pour implémenter le chiffrement du disque local, utilisez le fichier com.amazonaws.services.elasticmapreduce.spi.security. EncryptionMaterialsProvider interface.
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; } }
Spécifier un fournisseur de matériaux personnalisés à l'aide du AWS CLI
Pour utiliser l' AWS CLI, transmettez les arguments Encryption
, ProviderType
, CustomProviderClass
et CustomProviderLocation
à l'option emrfs
.
aws emr create-cluster --instance-type m5.xlarge --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=Custom,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/provider.jar,CustomProviderClass=classname
Le paramètre Encryption
ClientSide
active le chiffrement côté client. CustomProviderClass
Il s'agit du nom de votre EncryptionMaterialsProvider
objet et CustomProviderLocation
de l'emplacement local ou Amazon S3 à partir duquel Amazon EMR copie les données CustomProviderClass
vers chaque nœud du cluster et les place dans le chemin de classe.
Spécifier un fournisseur de matériaux personnalisés à l'aide d'un SDK
Pour utiliser unSDK, vous pouvez définir la propriété fs.s3.cse.encryptionMaterialsProvider.uri
pour télécharger la EncryptionMaterialsProvider
classe personnalisée que vous stockez dans Amazon S3 sur chaque nœud de votre cluster. Vous le configurez dans un emrfs-site.xml
fichier avec l'emplacement CSE activé et approprié du fournisseur personnalisé.
Par exemple, lors de l' AWS SDK for Java utilisation RunJobFlowRequest, votre code peut ressembler à ce qui suit :
<snip> Map<String,String> emrfsProperties = new HashMap<String,String>(); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider.uri","s3://amzn-s3-demo-bucket/MyCustomEncryptionMaterialsProvider.jar"); emrfsProperties.put("fs.s3.cse.enabled","true"); emrfsProperties.put("fs.s3.consistent","true"); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider","full.class.name.of.EncryptionMaterialsProvider"); Configuration myEmrfsConfig = new Configuration() .withClassification("emrfs-site") .withProperties(emrfsProperties); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Custom EncryptionMaterialsProvider") .withReleaseLabel("
emr-7.3.0
") .withApplications(myApp) .withConfigurations(myEmrfsConfig) .withServiceRole("EMR_DefaultRole_V2") .withJobFlowRole("EMR_EC2_DefaultRole") .withLogUri("s3://myLogUri
/") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myEc2Key
") .withInstanceCount(2) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m5.xlarge") .withSlaveInstanceType("m5.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request); </snip>
Personnalisé EncryptionMaterialsProvider avec arguments
Vous devrez peut-être transmettre des arguments directement au fournisseur. Pour ce faire, vous pouvez utiliser la classification de configuration emrfs-site
avec les propriétés définies comme arguments personnalisés. Un exemple de configuration est indiqué ci-dessous, qui est enregistré dans un fichier, myConfig.json
:
[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]
À l'aide de la create-cluster
commande du AWS CLI, vous pouvez utiliser l'--configurations
option pour spécifier le fichier comme indiqué ci-dessous :
aws emr create-cluster --release-label
--instance-type
emr-7.3.0
m5.xlarge
--instance-count2
--configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar
,CustomProviderClass=classname
Configuration de la prise EMRFS en charge du S3EC V2
SDKLes versions Java S3 (1.11.837 et ultérieures) prennent en charge la version 2 du client de chiffrement (S3EC V2) avec diverses améliorations de sécurité. Pour plus d'informations, consultez l'article de blog S3 Updates to the Amazon S3 encryption client
Le client de chiffrement V1 est toujours disponible dans le SDK pour des raisons de rétrocompatibilité. Par défautEMRFS, S3EC V1 est utilisé pour chiffrer et déchiffrer les objets S3 s'il est activé. CSE
Les objets S3 chiffrés avec S3EC V2 ne peuvent pas être déchiffrés EMRFS sur un EMR cluster dont la version de publication est antérieure à emr-5.31.0 (emr-5.30.1 et versions antérieures, emr-6.1.0 et versions antérieures).
Exemple Configurer EMRFS pour utiliser S3EC V2
Pour configurer EMRFS afin d'utiliser S3EC V2, ajoutez la configuration suivante :
{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }
Propriétés emrfs-site.xml
pour le chiffrement côté client Amazon S3
Propriété | Valeur par défaut | Description |
---|---|---|
fs.s3.cse.enabled |
false |
Lorsqu'il est défini sur |
fs.s3.cse.encryptionV2.enabled |
false |
Lorsqu'il est défini sur |
fs.s3.cse.encryptionMaterialsProvider.uri |
N/A |
S'applique lors de l'utilisation de supports de chiffrement personnalisés. L'Amazon S3 URI où se EncryptionMaterialsProvider trouve le JAR with. Lorsque vous le fournissezURI, Amazon le télécharge EMR automatiquement JAR sur tous les nœuds du cluster. |
fs.s3.cse.encryptionMaterialsProvider |
N/A |
Le chemin de classe |
fs.s3.cse.materialsDescription.enabled |
false |
Lorsqu'il est défini sur |
fs.s3.cse.kms.keyId |
N/A |
S'applique lors de l'utilisation de CSE -KMS. La valeur de KeyIdARN, ou alias de la KMS clé utilisée pour le chiffrement. |
fs.s3.cse.cryptoStorageMode |
ObjectMetadata |
Le mode de stockage Amazon S3. Par défaut, la description des informations de chiffrement est stockée dans les métadonnées de l'objet. Vous pouvez également stocker la description dans un fichier d'instructions. Les valeurs valides sont ObjectMetadata etInstructionFile. Pour plus d'informations, consultez la section Chiffrement des données côté client avec Amazon S3 AWS SDK for Java et Amazon S3 |