As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criptografia do lado do cliente do Amazon S3
Com a criptografia do lado do cliente do Amazon S3, a criptografia e a descriptografia do Amazon S3 ocorrem no cliente do EMRFS em seu cluster. Os objetos são criptografados antes de serem carregados no Amazon S3 e descriptografados após serem baixados. O provedor especificado por você fornece a chave de criptografia que o cliente usa. O cliente pode usar chaves fornecidas pelo AWS KMS (CSE-KMS) ou uma classe Java personalizada que fornece a chave raiz do lado do cliente (CSE-C). As especificações de criptografia são ligeiramente diferentes entre a CSE-KMS e a CSE-C, dependendo do provedor especificado e dos metadados do objeto que está sendo descriptografado ou criptografado. Para obter mais informações sobre essas diferenças, consulte Proteger dados usando a criptografia do lado do cliente no Guia do usuário do Amazon Simple Storage Service.
nota
A CSE do Amazon S3 garante somente que os dados do EMRFS trocados com o Amazon S3 sejam criptografados. Não são todos os dados nos volumes de instâncias do cluster que são criptografados. Além disso, como o Hue não usa o EMRFS, os objetos que o navegador de arquivos do S3 para Hue grava no Amazon S3 não são criptografados.
Para especificar o CSE-KMS para dados do EMRFS no Amazon S3 usando o AWS CLI
-
Digite o comando a seguir e
MyKMSKeyID
substitua pelo ID da chave ou ARN da chave KMS a ser usada:aws emr create-cluster --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
Criar um provedor de chaves personalizado
Dependendo do tipo de criptografia que você usa ao criar um provedor de chave personalizado, o aplicativo também deve implementar EncryptionMaterialsProvider interfaces diferentes. Ambas as interfaces estão disponíveis no AWS SDK for Java versão 1.11.0 e posterior.
-
Para implementar a criptografia de disco local, use com.amazonaws.services.elasticmapreduce.spi.security. EncryptionMaterialsProvider interface.
Você pode usar qualquer estratégia para fornecer materiais de criptografia para a implementação. Por exemplo, você pode optar por fornecer materiais de criptografia estáticos ou fazer uma integração com um sistema de gerenciamento de chaves mais complexo.
Se você estiver usando a criptografia do Amazon S3, deverá usar os algoritmos de criptografia AES/GCM/NoPaddingpara materiais de criptografia personalizados.
Se estiver usando criptografia de disco local, o algoritmo de criptografia a ser utilizado para materiais de criptografia personalizados varia de acordo com a versão do EMR. Para o Amazon EMR 7.0.0 e versões anteriores, você deve usar. AES/GCM/NoPadding No Amazon EMR 7.1.0 e versões posteriores, você deve usar AES.
A EncryptionMaterialsProvider classe obtém materiais de criptografia por contexto de criptografia. O Amazon EMR popula informações de contexto de criptografia em runtime para ajudar o chamador a determinar os materiais de criptografia corretos a serem retornados.
exemplo Exemplo: usar um provedor de chaves personalizado para a criptografia do Amazon S3 com o EMRFS
Quando o Amazon EMR busca os materiais de criptografia da EncryptionMaterialsProvider classe para realizar a criptografia, o EMRFS opcionalmente preenche o argumento MaterialsDescription com dois campos: o URI do Amazon S3 para o objeto JobFlowId e o do cluster, que pode ser usado pela classe para retornar materiais de criptografia seletivamente. EncryptionMaterialsProvider
Por exemplo, o provedor pode retornar diferentes chaves para diferentes prefixos de URI do Amazon S3. É a descrição dos materiais de criptografia retornados que acaba sendo armazenada com o objeto do Amazon S3 no lugar do valor de materialsDescription que é gerado pelo EMRFS e transmitido ao provedor. Ao descriptografar um objeto do Amazon S3, a descrição do material de criptografia é passada para a EncryptionMaterialsProvider classe, para que ela possa, novamente, retornar seletivamente a chave correspondente para descriptografar o objeto.
Uma implementação de EncryptionMaterialsProvider referência é fornecida abaixo. Outro provedor 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; } }
Especificando um fornecedor de materiais personalizados usando o AWS CLI
Para usar a AWS CLI, transmita os argumentos Encryption
, ProviderType
, CustomProviderClass
e CustomProviderLocation
para a opção 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
Configurar Encryption
como ClientSide
permite a criptografia do lado do cliente, CustomProviderClass
é o nome do seu objeto EncryptionMaterialsProvider
e CustomProviderLocation
é o local ou a localização no Amazon S3 de onde o Amazon EMR copia CustomProviderClass
para cada nó do cluster e o coloca no caminho de classe.
Especificar um provedor de materiais personalizado usando um SDK
Para usar um SDK, primeiro você pode definir a propriedade fs.s3.cse.encryptionMaterialsProvider.uri
para baixar a classe personalizada EncryptionMaterialsProvider
que é armazenada no Amazon S3 em cada nó do cluster. Isso pode ser configurado no arquivo emrfs-site.xml
, juntamente com a CSE habilitada e a localização apropriada do provedor personalizado.
Por exemplo, no AWS SDK for Java uso RunJobFlowRequest, seu código pode ter a seguinte aparência:
<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>
Personalizado EncryptionMaterialsProvider com argumentos
Pode ser necessário passar argumentos diretamente para o provedor. Para fazer isso, você pode usar a classificação de configuração emrfs-site
com argumentos personalizados definidos como propriedades. Uma configuração de exemplo é mostrada a seguir, que é salva como um arquivo, myConfig.json
:
[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]
Usando o create-cluster
comando do AWS CLI, você pode usar a --configurations
opção para especificar o arquivo conforme mostrado abaixo:
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
Configurar o suporte ao EMRFS S3EC V2
As versões do SDK para Java no S3 (1.11.837 e posteriores) têm suporte para cliente de criptografia versão 2 (S3EC V2) com vários aprimoramentos de segurança. Para obter mais informações, consulte a publicação no blog do S3 Updates to the Amazon S3 encryption client
O Encryption Client V1 ainda está disponível no SDK para compatibilidade retroativa. Por padrão, o EMRFS usará o S3EC V1 para criptografar e descriptografar objetos do S3 quando o CSE estiver habilitado.
Não é possível descriptografar objetos do S3 criptografados com o S3EC V2 pelo EMRFS em um cluster do EMR cuja versão seja anterior ao emr-5.31.0 (emr-5.30.1 e anteriores, emr-6.1.0 e anteriores).
exemplo Configurar o EMRFS para usar o S3EC V2
Para configurar o EMRFS para usar o S3EC V2, adicione esta configuração:
{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }
Propriedades emrfs-site.xml
para criptografia do lado do cliente do Amazon S3
Propriedade | Valor padrão | Descrição |
---|---|---|
fs.s3.cse.enabled |
false |
Quando definido como |
fs.s3.cse.encryptionV2.enabled |
false |
Quando estiver definido como |
fs.s3.cse.encryptionMaterialsProvider.uri |
N/A |
Aplica-se ao usar materiais de criptografia personalizada. O URI do Amazon S3 em que o JAR com EncryptionMaterialsProvider está localizado. Quando você fornecer esse URI, o Amazon EMR baixará o JAR automaticamente em todos os nós do cluster. |
fs.s3.cse.encryptionMaterialsProvider |
N/A |
O caminho da classe |
fs.s3.cse.materialsDescription.enabled |
false |
Quando definido como |
fs.s3.cse.kms.keyId |
N/A |
Aplica-se ao usar a CSE-KMS. O valor do KeyId, ARN ou alias da chave KMS usada para criptografia. |
fs.s3.cse.cryptoStorageMode |
ObjectMetadata |
O modo de armazenamento do Amazon S3. Por padrão, a descrição das informações de criptografia é armazenada nos metadados do objeto. Você também pode armazenar a descrição em um arquivo de instruções. Os valores válidos são ObjectMetadata InstructionFile e. Para obter mais informações, consulte Criptografia de dados do lado do cliente com o AWS SDK for Java e o Amazon S3 |