Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Cifrado del cliente de Amazon S3
Con el cifrado del cliente de Amazon S3, el proceso de cifrado y descifrado de Amazon S3 se produce en el cliente de EMRFS en su clúster. Los objetos se cifran antes de cargarlos en Amazon S3 y se descifran después de que se descarguen. El proveedor que especifique proporciona la clave de cifrado que utiliza el cliente. El cliente puede usar claves proporcionadas por AWS KMS (CSE-KMS) o una clase de Java personalizada que proporciona la clave raíz del cliente (CSE-C). Los detalles de cifrado son ligeramente diferentes entre CSE-KMS y CSE-C, en función del proveedor especificado y de los metadatos del objeto que se descifra o se cifra. Para obtener más información sobre estas diferencias, consulte Protección de los datos con el cifrado del cliente en la Guía del usuario de Amazon Simple Storage Service.
nota
El CSE de Amazon S3 solo garantiza que los datos de EMRFS intercambiados con Amazon S3 se cifren; no se cifran todos los datos en volúmenes de instancias de clúster. Además, ya que Hue no utiliza EMRFS, los objetos que Hue S3 File Browser escribe en Amazon S3 no se cifran.
Para especificar el CSE-KMS para los datos de EMRFS en Amazon S3 mediante el AWS CLI
-
Escriba el siguiente comando y
MyKMSKeyID
sustitúyalo por el ID de clave o ARN de la clave KMS que se va a utilizar:aws emr create-cluster --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
Creación de un proveedor de claves personalizadas
Según el tipo de cifrado que utilice al crear un proveedor de claves personalizado, la aplicación también debe implementar diferentes EncryptionMaterialsProvider interfaces. Ambas interfaces están disponibles en la versión 1.11.0 y posteriores del AWS SDK for Java.
-
Para implementar el cifrado de Amazon S3, utilice com.amazonaws.services.s3.model. EncryptionMaterialsProvider interfaz.
-
Para implementar el cifrado del disco local, usa com.amazonaws.services.elasticmapreduce.spi.security. EncryptionMaterialsProvider interfaz.
Puede utilizar cualquier estrategia para proporcionar materiales de cifrado para la implementación. Por ejemplo, podría elegir proporcionar materiales de cifrado estáticos o integrar con un sistema de administración de claves más complejo.
Si utiliza el cifrado de Amazon S3, debe utilizar los algoritmos de cifrado AES/GCM/NoPaddingpara los materiales de cifrado personalizados.
Si utiliza el cifrado de disco local, el algoritmo de cifrado que se utilizará para los materiales de cifrado personalizados varía según la versión del EMR. Para Amazon EMR 7.0.0 y versiones anteriores, debe usar. AES/GCM/NoPadding Para Amazon EMR 7.1.0 y versiones posteriores, debe usar AES.
La EncryptionMaterialsProvider clase obtiene los materiales de cifrado por contexto de cifrado. Amazon EMR rellena el contexto de cifrado en tiempo de ejecución para ayudar al intermediario a determinar qué materiales de cifrado debe devolver.
ejemplo Ejemplo: uso de un proveedor de claves de cifrado personalizadas para el cifrado de Amazon S3 con EMRFS
Cuando Amazon EMR obtiene los materiales de cifrado de la EncryptionMaterialsProvider clase para realizar el cifrado, EMRFS rellena opcionalmente el argumento MaterialsDescription con dos campos: el URI de Amazon S3 del objeto y JobFlowId el del clúster, que la clase puede utilizar para devolver materiales de cifrado de forma selectiva. EncryptionMaterialsProvider
Por ejemplo, el proveedor podría devolver claves distintas para diferentes prefijos URI de Amazon S3. Se trata de la descripción de los materiales de cifrado devuelta que se almacena finalmente con el objeto de Amazon S3 en lugar del valor materialsDescription que genera EMRFS y se transfiere al proveedor. Al descifrar un objeto de Amazon S3, la descripción del material de cifrado se pasa a la EncryptionMaterialsProvider clase para que, una vez más, devuelva de forma selectiva la clave correspondiente para descifrar el objeto.
A continuación se EncryptionMaterialsProvider proporciona una implementación de referencia. Otro proveedor personalizado, 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;
}
}
Especificar un proveedor de materiales personalizados mediante el AWS CLI
Para usar la AWS CLI, transfiera los argumentos Encryption
, ProviderType
, CustomProviderClass
y CustomProviderLocation
a la opción 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
Al definir Encryption
en ClientSide
, se habilita el cifrado del cliente, CustomProviderClass
es el nombre del objeto EncryptionMaterialsProvider
y CustomProviderLocation
es la ubicación local o de Amazon S3 desde la que Amazon EMR copia CustomProviderClass
en cada nodo del clúster y lo coloca en el classpath.
Especificación de un proveedor de materiales personalizado mediante un SDK
Para utilizar un SDK, puede establecer la propiedad fs.s3.cse.encryptionMaterialsProvider.uri
para descargar en cada nodo del clúster la clase EncryptionMaterialsProvider
personalizada que se almacena en Amazon S3. Esto se configura en el archivo emrfs-site.xml
junto con CSE habilitado y la ubicación correcta del proveedor personalizado.
Por ejemplo, al AWS SDK for Java usarlo RunJobFlowRequest, el código podría tener el siguiente aspecto:
<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.7.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>
Personalizada EncryptionMaterialsProvider con argumentos
Es posible que necesite transferir argumentos directamente al proveedor. Para ello, puede utilizar la clasificación de configuración emrfs-site
con argumentos personalizadas definidos como propiedades. A continuación se muestra un ejemplo de configuración que se guarda como un archivo, myConfig.json
:
[
{
"Classification": "emrfs-site",
"Properties": {
"myProvider.arg1":"value1",
"myProvider.arg2":"value2"
}
}
]
Con el create-cluster
comando de AWS CLI, puede usar la --configurations
opción para especificar el archivo como se muestra a continuación:
aws emr create-cluster --release-label
--instance-type
emr-7.7.0
m5.xlarge
--instance-count2
--configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar
,CustomProviderClass=classname
Configuración del soporte para la versión 2 de EMRFS S3EC
Las versiones 1.11.837 y posteriores del SDK para Java de S3, se ha introducido la versión de soporte 2 del cliente de cifrado (S3EC V2) con varias mejoras de seguridad. Para obtener más información, consulte la publicación en el blog de S3: Updates to the Amazon S3 encryption client
La versión 1 del cliente de cifrado todavía está disponible en el SDK por motivos de compatibilidad con versiones anteriores. De forma predeterminada, EMRFS utilizará la versión 1 de S3EC para cifrar y descifrar los objetos de S3 si CSE está habilitado.
EMRFS no puede descifrar los objetos de S3 cifrados con la versión 2 de S3EC en un clúster de EMR cuya versión de lanzamiento sea anterior a emr-5.31.0 (emr-5.30.1 y anteriores, emr-6.1.0 y anteriores).
ejemplo Configuración de EMRFS para usar la versión 2 de S3EC
A fin de configurar EMRFS para que utilice la versión 2 de S3EC, agregue la siguiente configuración:
{
"Classification": "emrfs-site",
"Properties": {
"fs.s3.cse.encryptionV2.enabled": "true"
}
}
emrfs-site.xml
Propiedades para el cifrado del cliente de Amazon S3
Propiedad | Valor predeterminado | Descripción |
---|---|---|
fs.s3.cse.enabled |
false |
Cuando se establece en |
fs.s3.cse.encryptionV2.enabled |
false |
Cuando se establece en |
fs.s3.cse.encryptionMaterialsProvider.uri |
N/A |
Se aplica cuando se utilizan materiales de cifrado personalizados. URI de Amazon S3 en el que se encuentra el JAR con EncryptionMaterialsProvider . Al proporcionar este URI, Amazon EMR descarga automáticamente el JAR a todos los nodos del clúster. |
fs.s3.cse.encryptionMaterialsProvider |
N/A |
La ruta de clases |
fs.s3.cse.materialsDescription.enabled |
false |
Cuando se establece en |
fs.s3.cse.kms.keyId |
N/A |
Se aplica cuando se utiliza CSE-KMS. El valor del ARN KeyId o el alias de la clave KMS utilizada para el cifrado. |
fs.s3.cse.cryptoStorageMode |
ObjectMetadata |
Modo de almacenamiento de Amazon S3. De forma predeterminada, la descripción de la información de cifrado se almacena en los metadatos de objetos. También puede almacenar la descripción en un archivo de instrucciones. Los valores válidos son ObjectMetadata y. InstructionFile Para obtener más información, consulte Cifrado de datos del lado del cliente con Amazon S3 AWS SDK for Java y Amazon S3 |