File crittografato 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à.

File crittografato lato client Amazon S3

Con la crittografia lato client di Amazon S3, la crittografia e la decrittografia Amazon S3 avvengono nel client EMRFS nel tuo cluster. 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 principale lato client (CSE-C). Le specifiche di crittografia sono leggermente diverse tra CSE-KMS e CSE-C, a seconda del provider specificato e dei metadati dell'oggetto da decrittare 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 CSE garantisce solo che i dati EMRFS scambiati con Amazon S3 siano crittografati; non tutti i dati sui volumi delle istanze del cluster sono crittografati. Inoltre, poiché Hue non utilizza EMRFS, gli oggetti che il browser di file Hue S3 scrive su Amazon S3 non vengono crittografati.

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

    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 per la creazione di un provider di chiavi personalizzato, l'applicazione deve inoltre implementare interfacce diverse EncryptionMaterialsProvider . Entrambe le interfacce sono disponibili nella versione AWS SDK for Java 1.11.0 e successive.

È 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 del disco locale, l'algoritmo di crittografia da utilizzare per i materiali di crittografia personalizzati varia in base alla versione EMR. Per Amazon EMR 7.0.0 e versioni precedenti, è necessario utilizzare. AES/GCM/NoPadding Per Amazon EMR 7.1.0 e versioni successive, devi utilizzare AES.

La EncryptionMaterialsProvider classe ottiene materiali di crittografia in base al contesto di crittografia. Amazon EMR popola le informazioni sul contesto di crittografia al runtime per aiutare il chiamante a determinare i materiali di crittografia corretti da restituire.

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

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

Ad esempio, il provider potrebbe restituire chiavi diverse per diversi prefissi URI di Amazon S3. Sarà la descrizione dei materiali di crittografia restituiti a essere memorizzata con l'oggetto Amazon S3 anziché il valore materialsDescription generato da 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

Con l'impostazione di Encryption su ClientSide, si attiva la crittografia lato client, CustomProviderClass è il nome dell'oggetto EncryptionMaterialsProvider e CustomProviderLocation è la posizione locale o Amazon S3 da cui Amazon EMR copia CustomProviderClass in ogni nodo nel cluster e lo inserisce nel classpath.

Configurazione di un provider di materiali personalizzato mediante un kit SDK

Per utilizzare un SDK, puoi impostare la proprietà fs.s3.cse.encryptionMaterialsProvider.uri per scaricare la classe EncryptionMaterialsProvider personalizzata che memorizzi in Amazon S3 in ogni nodo del cluster. Questa configurazione viene eseguita nel file emrfs-site.xml con la CSE abilitata e la corretta posizione 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.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>

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

Per i rilasci S3 Java SDK (1.11.837 e versioni successive), è stato introdotto il client di crittografia versione 2 (S3EC V2) con vari miglioramenti alla 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 nell'SDK per la compatibilità con le versioni precedenti. Per impostazione predefinita, EMRFS utilizzerà S3EC V1 per crittografare e decrittare gli oggetti S3 se CSE è abilitato.

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

Esempio Configurazione di EMRFS per l'utilizzo di S3EC V2

Per configurare EMRFS per l'utilizzo 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

Quando impostata su true, gli oggetti EMRFS archiviati in Amazon S3 vengono crittografati con la crittografia lato client.

fs.s3.cse.encryptionV2.enabled false

Se impostato su true, EMRFS utilizza il client di crittografia S3 versione 2 per crittografare e decrittare gli oggetti su S3. Disponibile solo in EMR 5.31.0 e versioni successive.

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

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

fs.s3.cse.materialsDescription.enabled false

Se impostato sutrue, compila il MaterialsDescription degli oggetti crittografati con l'URI Amazon 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 dell' KeyIdARN o dell'alias della chiave KMS 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 e. ObjectMetadata InstructionFile Per ulteriori informazioni, consulta Crittografia dei dati lato client con Amazon AWS SDK for Java S3.