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 sur Amazon S3, le chiffrement et le déchiffrement par Amazon S3 se déroulent dans le client EMRFS 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, en fonction du fournisseur indiqué et des métadonnées de l'objet à déchiffrer ou à chiffrer. 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
Le chiffrement CSE sur Amazon S3 garantit uniquement que les données EMRFS échangées avec Amazon S3 sont chiffrées ; cela ne signifie pas que toutes les données sur les volumes des instances du cluster sont chiffrées. De plus, étant donné que Hue n'utilise pas EMRFS, les objets que le navigateur de fichiers S3 de Hue écrit sur Amazon S3 ne sont pas chiffrés.
Pour spécifier le CSE-KMS pour les données EMRFS dans Amazon S3 à l'aide du AWS CLI
-
Tapez la commande suivante et remplacez-la
MyKMSKeyID
par l'ID de clé ou l'ARN de la clé KMS à 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 le AWS SDK pour Java version 1.11.0 et versions ultérieures.
-
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 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; } }
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
L'affectation à ClientSide
de la valeur Encryption
rend possible le chiffrement côté client. CustomProviderClass
est le nom de votre objet EncryptionMaterialsProvider
et CustomProviderLocation
est l'emplacement local ou Amazon S3 à partir duquel Amazon EMR copie CustomProviderClass
sur chaque nœud du cluster et le place dans le chemin de classe.
Spécification d'un fournisseur de matériaux personnalisés à l'aide d'un kit SDK
Pour utiliser un kit SDK, vous pouvez définir la propriété fs.s3.cse.encryptionMaterialsProvider.uri
pour télécharger la classe EncryptionMaterialsProvider
personnalisée que vous stockez dans Amazon S3 vers chaque nœud de votre cluster. Vous configurez cela dans le fichier emrfs-site.xml
avec CSE activé et l'emplacement correct 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.6.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.6.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 en charge d'EMRFS S3EC V2
Les versions du SDK Java S3 (1.11.837 et versions 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éfaut, EMRFS utilise S3EC V1 pour chiffrer et déchiffrer les objets S3 si le CSE est activé.
Les objets S3 chiffrés avec S3EC V2 ne peuvent pas être déchiffrés par EMRFS sur un cluster EMR 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 |
Lorsque la valeur est |
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'URI Amazon S3 où se trouve le fichier JAR contenant le EncryptionMaterialsProvider . Lorsque vous fournissez cet URI, Amazon EMR télécharge automatiquement le fichier 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 l' KeyIdARN ou de l'alias de la clé KMS 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 |