Crittografia lato client Amazon S3 - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crittografia lato client Amazon S3

Con la crittografia lato client di Amazon S3, la crittografia e la decrittografia di Amazon S3 avvengono nel client del cluster. EMRFS Gli oggetti vengono crittografati prima di essere caricati su Amazon S3 e decrittati dopo il loro download. Il provider specificato fornisce la chiave di crittografia utilizzata dal client. Il client può utilizzare le chiavi fornite da AWS KMS (CSE-KMS) o una classe Java personalizzata che fornisce la chiave radice sul lato client (-C). CSE Le specifiche di crittografia sono leggermente diverse tra CSE - KMS e CSE -C, a seconda del provider specificato e dei metadati dell'oggetto da decrittografare o crittografare. Per ulteriori informazioni su queste differenze, consulta Protezione dei dati tramite la crittografia lato client nella Guida per l'utente di Amazon Simple Storage Service.

Nota

Amazon S3 garantisce CSE solo che EMRFS i dati scambiati con Amazon S3 siano crittografati; non tutti i dati sui volumi delle istanze del cluster sono crittografati. Inoltre, poiché Hue non utilizzaEMRFS, gli oggetti che Hue S3 File Browser scrive su Amazon S3 non sono crittografati.

Per specificareCSE: KMS per EMRFS i dati in Amazon S3 utilizzando AWS CLI
  • Digita il seguente comando e sostituiscilo MyKMSKeyID con l'ID della chiave o ARN della KMS chiave da usare:

    aws emr create-cluster --release-label emr-4.7.2 or earlier --emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId

Creazione di un provider di chiavi personalizzato

A seconda del tipo di crittografia utilizzato durante la creazione di un provider di chiavi personalizzato, l'applicazione deve inoltre implementare EncryptionMaterialsProvider interfacce diverse. Entrambe le interfacce sono disponibili nella versione 1.11.0 e successive AWS SDK per Java.

È possibile utilizzare qualsiasi strategia per fornire materiali di crittografia per l'implementazione. Ad esempio, è possibile scegliere di fornire materiali di crittografia statici o integrarli con un sistema di gestione delle chiavi più complesso.

Se utilizzi la crittografia Amazon S3, devi utilizzare gli algoritmi di crittografia AES/GCM/NoPaddingper materiali di crittografia personalizzati.

Se utilizzi la crittografia locale del disco, l'algoritmo di crittografia da utilizzare per i materiali di crittografia personalizzati varia a seconda della versione. EMR Per Amazon EMR 7.0.0 e versioni precedenti, devi usare. AES/GCM/NoPadding Per Amazon EMR 7.1.0 e versioni successive, devi usare AES.

La EncryptionMaterialsProvider classe ottiene materiali di crittografia in base al contesto di crittografia. Amazon EMR inserisce le informazioni relative al contesto di crittografia in fase di esecuzione per aiutare il chiamante a determinare i materiali di crittografia corretti da restituire.

Esempio: utilizzo di un provider di chiavi personalizzate per la crittografia Amazon S3 con EMRFS

Quando Amazon EMR recupera i materiali di crittografia dalla EncryptionMaterialsProvider classe per eseguire la crittografia, EMRFS opzionalmente compila l' materialsDescription argomento con due campi: Amazon S3 URI per l'oggetto e il cluster, che possono essere utilizzati dalla EncryptionMaterialsProvider classe per restituire i materiali JobFlowId di crittografia in modo selettivo.

Ad esempio, il provider può restituire chiavi diverse per prefissi Amazon S3 URI diversi. È la descrizione del materiale di crittografia restituito che alla fine viene archiviato con l'oggetto Amazon S3 anziché il materialsDescription valore generato EMRFS e passato al provider. Durante la decrittografia di un oggetto Amazon S3, la descrizione dei materiali di crittografia viene passata alla EncryptionMaterialsProvider classe, in modo che possa, ancora una volta, restituire selettivamente la chiave corrispondente per decrittografare l'oggetto.

Di seguito viene fornita un'implementazione di riferimento EncryptionMaterialsProvider . Un altro provider personalizzato è disponibile presso 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; } }

Specificare un fornitore di materiali personalizzati utilizzando il AWS CLI

Per utilizzare AWS CLI, passa gli argomenti Encryption, ProviderType, CustomProviderClass e CustomProviderLocation all'opzione 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

Impostato Encryption per ClientSide abilitare la crittografia lato client, CustomProviderClass è il nome dell'EncryptionMaterialsProvideroggetto ed CustomProviderLocation è la posizione locale o Amazon S3 da cui EMR Amazon CustomProviderClass copia in ogni nodo del cluster e lo colloca nel classpath.

Specificare un fornitore di materiali personalizzati utilizzando un SDK

Per utilizzare unSDK, puoi impostare la proprietà fs.s3.cse.encryptionMaterialsProvider.uri per scaricare la EncryptionMaterialsProvider classe personalizzata archiviata in Amazon S3 su ogni nodo del cluster. La configuri in un emrfs-site.xml file insieme alla posizione CSE abilitata e corretta del provider personalizzato.

Ad esempio, durante l' AWS SDK for Java utilizzo RunJobFlowRequest, il codice potrebbe essere simile al seguente:

<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>

Personalizza EncryptionMaterialsProvider con argomenti

È possibile che sia necessario passare degli argomenti direttamente al provider. A questo proposito, puoi utilizzare la classificazione di configurazione emrfs-site con argomenti personalizzati definiti come proprietà. Un esempio di configurazione, salvato come file myConfig.json, è riportato di seguito:

[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]

Utilizzando il create-cluster comando di AWS CLI, è possibile utilizzare l'--configurationsopzione per specificare il file come illustrato di seguito:

aws emr create-cluster --release-label emr-7.3.0 --instance-type m5.xlarge --instance-count 2 --configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar,CustomProviderClass=classname

Configurazione del supporto EMRFS S3EC V2

Le SDK versioni di S3 Java (1.11.837 e successive) supportano il client di crittografia versione 2 (S3EC V2) con vari miglioramenti della sicurezza. Per maggiori informazioni, consulta il post del blog S3 Updates to the Amazon S3 Encryption Client (Aggiornamenti al client di crittografia Amazon S3). Inoltre, consulta la migrazione del client di crittografia Amazon S3 nella AWS SDK for Java Developer Guide.

Il client di crittografia V1 è ancora disponibile in SDK per la compatibilità con le versioni precedenti. Per impostazione predefinita, EMRFS utilizzerà S3EC V1 per crittografare e decrittografare gli oggetti S3, se abilitato. CSE

Gli oggetti S3 crittografati con S3EC V2 non possono essere decrittografati EMRFS su un EMR cluster la cui versione di rilascio è precedente a emr-5.31.0 (emr-5.30.1 e precedenti, emr-6.1.0 e precedenti).

Esempio EMRFSConfigura per utilizzare S3EC V2

Per configurare l'utilizzo EMRFS di S3EC V2, aggiungi la seguente configurazione:

{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }

Proprietà di emrfs-site.xml per la crittografia lato client di Amazon S3

Proprietà Valore predefinito Descrizione
fs.s3.cse.enabled false

Se impostato sutrue, gli EMRFS oggetti archiviati in Amazon S3 vengono crittografati utilizzando la crittografia lato client.

fs.s3.cse.encryptionV2.enabled false

Se impostato sutrue, EMRFS utilizza il client di crittografia S3 versione 2 per crittografare e decrittografare gli oggetti su S3. Disponibile per EMR la versione 5.31.0 e successive.

fs.s3.cse.encryptionMaterialsProvider.uri N/A Si applica quando si utilizzano materiali di crittografia personalizzati. L'Amazon S3 URI in cui si JAR EncryptionMaterialsProvider trova il. Quando lo fornisciURI, Amazon EMR lo scarica automaticamente su tutti JAR i nodi del cluster.
fs.s3.cse.encryptionMaterialsProvider N/A

Il percorso della classe EncryptionMaterialsProvider utilizzato con la crittografia lato client. Quando usi CSE -KMS, specificacom.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider.

fs.s3.cse.materialsDescription.enabled false

Se impostato sutrue, popola gli materialsDescription oggetti crittografati con Amazon URI S3 per l'oggetto e il. JobFlowId Da impostare su true se si utilizzano materiali di crittografia personalizzati.

fs.s3.cse.kms.keyId N/A

Si applica quando si utilizza CSE -. KMS Il valore del KeyIdARN, o alias della KMS chiave utilizzata per la crittografia.

fs.s3.cse.cryptoStorageMode ObjectMetadata

La modalità di archiviazione Amazon S3. Per impostazione predefinita, la descrizione delle informazioni di crittografia è archiviata nei metadati degli oggetti. È anche possibile archiviare la descrizione in un file di istruzioni. I valori validi sono ObjectMetadata e. InstructionFile Per ulteriori informazioni, consulta Crittografia dei dati lato client con Amazon AWS SDK for Java S3.