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.
Specifica di CSE-KMS per i dati di EMRFS in Amazon S3 mediante la AWS CLI
-
Digitare il comando seguente e sostituire
MyKMSKeyID
con l'ID di 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
Quando si crea un provider di chiavi personalizzato, l'applicazione dovrebbe implementare l'interfaccia EncryptionMaterialsProvider, che è disponibile in AWS SDK for Java 1.11.0 e versioni successive. L'implementazione può utilizzare qualsiasi strategia per fornire materiali di crittografia. È possibile, ad esempio, scegliere di fornire materiali di crittografia statici o di integrare un sistema di gestione delle chiavi più complesso.
L'algoritmo di crittografia utilizzato per i materiali di crittografia personalizzati deve essere AES/GCM/NoPadding.
La classe EncryptionMaterialsProvider ottiene materiali di crittografia suddivisi in base al contesto. 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 classe EncryptionMaterialsProvider per eseguire la crittografia, EMRFS inserisce facoltativamente l'argomento materialsDescription con due campi: l'URI Amazon S3 per l'oggetto e il JobFlowId del cluster, che può essere utilizzato dalla classe EncryptionMaterialsProvider per restituire i materiali di crittografia in modo selettivo.
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 classe EncryptionMaterialsProvider in modo che possa, ancora una volta, restituire selettivamente la chiave corrispondente per decrittare l'oggetto.
Di seguito viene fornita un'implementazione di riferimento di EncryptionMaterialsProvider. Un altro provider personalizzato, 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; } }
Configurazione di un provider di materiali personalizzato mediante la 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://mybucket/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, nel kit AWS SDK for Java che utilizza RunJobFlowRequest, il codice potrebbe essere simile a quanto segue:
<snip> Map<String,String> emrfsProperties = new HashMap<String,String>(); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider.uri","s3://mybucket/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-5.36.1
") .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>
EncryptionMaterialsProvider personalizzato 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 comando create-cluster
da AWS CLI, puoi utilizzare l'opzione --configurations
per specificare il file come mostrato di seguito:
aws emr create-cluster --release-label
--instance-type
emr-5.36.1
m5.xlarge
--instance-count2
--configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://mybucket/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)
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 |
fs.s3.cse.encryptionV2.enabled |
false |
Se impostato su |
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 |
fs.s3.cse.materialsDescription.enabled |
false |
Quando impostata su |
fs.s3.cse.kms.keyId |
N/A |
Si applica quando si utilizza CSE-KMS. Il valore KeyId, ARN o 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 ObjectMetadata e InstructionFile. Per ulteriori informazioni, consulta Crittografia di dati lato client con la AWS SDK for Java e Amazon S3 |