

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

# Crea chiavi e certificati per la crittografia dei dati con Amazon EMR
<a name="emr-encryption-enable"></a>

Prima di specificare le opzioni di crittografia utilizzando una configurazione di sicurezza, scegli il provider che desideri utilizzare per le chiavi e gli artefatti di crittografia. Ad esempio, puoi utilizzare AWS KMS o un provider personalizzato da te creato. Quindi, crea le chiavi o il provider di chiavi come descritto in questa sezione.

## Fornitura di chiavi per crittografare i dati inattivi
<a name="emr-encryption-create-keys"></a>

Puoi utilizzare AWS Key Management Service (AWS KMS) o un provider di chiavi personalizzate per la crittografia dei dati a riposo in Amazon EMR. Quando si utilizza AWS KMS, vengono addebitati costi per l'archiviazione e l'uso delle chiavi di crittografia. Per ulteriori informazioni, consultare [Prezzi di AWS KMS](https://aws.amazon.com/kms/pricing/). 

Questo argomento fornisce dettagli sulla policy delle chiavi per una chiave KMS da utilizzare con Amazon EMR, nonché linee guida ed esempi di codice per scrivere una classe di provider di chiavi personalizzato per la crittografia di Amazon S3. Per ulteriori informazioni sulla creazione di chiavi, consulta [Creazione di chiavi](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

### Utilizzo AWS KMS keys per la crittografia
<a name="emr-awskms-keys"></a>

La chiave di AWS KMS crittografia deve essere creata nella stessa regione dell'istanza del cluster Amazon EMR e dei bucket Amazon S3 utilizzati con EMRFS. Se la chiave specificata si trova in un account diverso da quello utilizzato per configurare un cluster, è necessario specificare la chiave utilizzando il relativo ARN.

Il ruolo del profilo dell'istanza Amazon EC2 deve disporre delle autorizzazioni per utilizzare la chiave KMS specificata. Il ruolo predefinito per il profilo dell'istanza in Amazon EMR è `EMR_EC2_DefaultRole`. Se utilizzi un ruolo diverso per il profilo dell'istanza o utilizzi ruoli IAM per le richieste EMRFS ad Amazon S3, assicurati che ogni ruolo venga aggiunto come utente chiave a seconda dei casi. Ciò concede al ruolo l'autorizzazione a utilizzare la chiave KMS. Per ulteriori informazioni, consulta [Utilizzo di policy delle chiavi](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users) nella *Guida per gli sviluppatori di AWS Key Management Service * e [Configurazione dei ruoli IAM per richieste EMRFS ad Amazon S3](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html).

Puoi usare il Console di gestione AWS per aggiungere il tuo profilo di istanza o il tuo profilo di istanza EC2 all'elenco degli utenti chiave per la chiave KMS specificata, oppure puoi utilizzare il AWS CLI o un AWS SDK per allegare una policy di chiave appropriata.

Nota che Amazon EMR supporta solo [Chiavi KMS simmetriche](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). Non è possibile utilizzare una [chiave KMS asimmetrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks) per crittografare i dati a riposo in un cluster Amazon EMR. Per informazioni su come determinare se una chiave KMS è simmetrica o asimmetrica, consulta [ Identificazione di chiavi KMS simmetriche e asimmetriche](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html).

La procedura seguente descrive come aggiungere il profilo dell'istanza Amazon EMR predefinito, `EMR_EC2_DefaultRole` come *utente di chiavi* utilizzando la Console di gestione AWS. Presuppone che tu abbia già creato una chiave KMS. Per creare una nuova chiave KMS, consulta [Creazione di chiavi](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

**Aggiunta del profilo dell'istanza EC2 per Amazon EMR all'elenco degli utenti della chiave di crittografia**

1. [Accedi Console di gestione AWS e apri la console AWS Key Management Service (AWS KMS) su /kms. https://console.aws.amazon.com](https://console.aws.amazon.com/kms)

1. Per modificare il Regione AWS, usa il selettore della regione nell'angolo in alto a destra della pagina.

1. Seleziona l'alias della chiave KMS da modificare.

1. Nella pagina dei dettagli della chiave, in **Key Users** (Utenti di chiavi), scegli **Add** (Aggiungi).

1. Nella finestra di dialogo **Add key users** (Aggiungi utenti chiave) selezionare il ruolo appropriato. Il nome del ruolo di default è `EMR_EC2_DefaultRole`.

1. Scegliere **Add** (Aggiungi).

### Abilitazione della crittografia EBS fornendo autorizzazioni aggiuntive per le chiavi KMS
<a name="emr-awskms-ebs-encryption"></a>

A partire da Amazon EMR versione 5.24.0, puoi crittografare il dispositivo di root EBS e i volumi di archiviazione utilizzando un'opzione di configurazione di sicurezza. Per abilitare tale opzione, è necessario specificare AWS KMS come fornitore di chiavi. Inoltre, è necessario concedere al ruolo `EMR_DefaultRole` di servizio le autorizzazioni per utilizzare AWS KMS key quanto specificato.

È possibile utilizzare il Console di gestione AWS per aggiungere il ruolo di servizio all'elenco degli utenti chiave per la chiave KMS specificata oppure utilizzare il AWS CLI o un AWS SDK per allegare una politica di chiave appropriata.

La procedura seguente descrive come utilizzare per Console di gestione AWS aggiungere il ruolo di servizio Amazon EMR predefinito `EMR_DefaultRole` come utente *chiave*. Presuppone che tu abbia già creato una chiave KMS. Per creare una nuova chiave KMS, consulta [Creazione di chiavi](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

**Per aggiungere il ruolo del servizio Amazon EMR all'elenco degli utenti delle chiavi di crittografia**

1. Accedi a Console di gestione AWS e apri la console AWS Key Management Service (AWS KMS) su [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Per modificare il Regione AWS, usa il selettore della regione nell'angolo in alto a destra della pagina.

1. Nella barra laterale sinistra, scegli **Customer managed keys (Chiavi gestite dal cliente)**.

1. Seleziona l'alias della chiave KMS da modificare.

1. Nella pagina dei dettagli della chiave, in **Key Users** (Utenti di chiavi), scegli **Add** (Aggiungi).

1. Nella sezione **Aggiungi utenti chiave**, seleziona il ruolo appropriato. Il nome del ruolo di servizio predefinito per Amazon EMR è. `EMR_DefaultRole`

1. Scegliere **Aggiungi**.

### Creazione di un provider di chiavi personalizzato
<a name="emr-custom-keys"></a>

Quando utilizzi una configurazione di sicurezza, devi specificare un nome di classe di provider differente per la crittografia per dischi locali e la crittografia di Amazon S3. I requisiti per il fornitore di chiavi personalizzate dipendono dall'utilizzo della crittografia locale del disco e della crittografia Amazon S3, nonché della versione di rilascio di Amazon EMR.

A seconda del tipo di crittografia utilizzato per la creazione di un provider di chiavi personalizzate, l'applicazione deve inoltre implementare interfacce diverse EncryptionMaterialsProvider . Entrambe le interfacce sono disponibili nella versione AWS SDK for Java 1.11.0 e successive.
+ [Per implementare la crittografia Amazon S3, usa com.amazonaws.services.s3.model. EncryptionMaterialsProvider interfaccia.](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/EncryptionMaterialsProvider.html)
+ Per implementare la crittografia locale del disco, utilizza [com.amazonaws.services.elasticmapreduce.spi.security. EncryptionMaterialsProvider interfaccia.](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/EncryptionMaterialsProvider.html)

È 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/NoPadding**per 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.

**Example 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](https://github.com/awslabs/emr-sample-apps/tree/master/emrfs-plugins/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;
  }
}
```

## Fornitura di certificati per la crittografia di dati in transito con Amazon EMR
<a name="emr-encryption-certificates"></a>

Con Amazon EMR versione 4.8.0 o successive, sono disponibili due opzioni per specificare artifact di crittografia dei dati in transito utilizzando una configurazione di sicurezza: 
+ Puoi creare manualmente certificati PEM, includerli in un file .zip e quindi fare riferimento al file .zip in Amazon S3.
+ Puoi implementare un provider di certificati personalizzato come classe Java, specificare il file JAR dell'applicazione in Amazon S3 e infine fornire il nome di classe completo del provider come dichiarato nell'applicazione. La classe deve implementare l'interfaccia [TLSArtifactsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/TLSArtifactsProvider.html) disponibile a partire dalla AWS SDK per Java versione 1.11.0.

Amazon EMR scarica automaticamente artifact in ogni nodo nel cluster e successivamente li utilizza per implementare le funzionalità di crittografia in transito open source. Per ulteriori informazioni sulle opzioni disponibili, consulta [Crittografia dei dati in transito](emr-data-encryption-options.md#emr-encryption-intransit).

### Utilizzo di certificati PEM
<a name="emr-encryption-pem-certificate"></a>

Quando specifichi un file ZIP per la crittografia in transito, per la configurazione di sicurezza i file PEM nel file ZIP devono essere denominati esattamente come illustrato di seguito:


**Certificati di crittografia in transito**  

| Nome file | Obbligatorio/facoltativo | Informazioni | 
| --- | --- | --- | 
| privateKey.pem | Richiesto | Chiave privata | 
| certificateChain.pem | Richiesto | Catena di certificati | 
| trustedCertificates.pem | Facoltativo | Si consiglia di fornire un certificato non firmato dalla Trusted Root Certification Authority (CA) predefinita di Java o da una CA intermedia che possa collegarsi alla CA root affidabile predefinita di Java. Non è consigliabile utilizzare il formato public CAs quando si utilizzano certificati wildcard o quando si disabilita la verifica del nome host. | 

È probabile che tu intenda configurare il file PEM della chiave privata affinché sia un certificato generico che consente l'accesso al dominio Amazon VPC in cui si trovano le istanze di cluster. Ad esempio, se il cluster risiede in us-east-1 (Virginia settentrionale), puoi scegliere di specificare un nome comune nella configurazione del certificato che autorizza l'accesso al cluster specificando `CN=*.ec2.internal` nella definizione di oggetto del certificato. Se il cluster risiede in us-west-2 (Oregon), puoi specificare `CN=*.us-west-2.compute.internal`.

Se il file PEM fornito nell'elemento di crittografia non contiene un carattere jolly per il dominio nel nome comune, devi modificare il valore di to. `hadoop.ssl.hostname.verifier` `ALLOW_ALL` Per farlo nelle versioni 7.3.0 e successive di Amazon EMR, aggiungi la `core-site` classificazione quando invii le configurazioni a un cluster. Nelle versioni precedenti alla 7.3.0, aggiungi la configurazione `"hadoop.ssl.hostname.verifier": "ALLOW_ALL"` direttamente nel file. `core-site.xml` Questa modifica è necessaria perché il verificatore del nome host predefinito richiede un nome host senza il carattere jolly perché tutti gli host del cluster lo utilizzano. Per ulteriori informazioni sulla configurazione di cluster EMR in Amazon VPC, consulta [Configurazione della rete in un VPC per Amazon EMR](emr-plan-vpc-subnet.md).

L'esempio seguente dimostra come utilizzare [OpenSSL](https://www.openssl.org/) per generare un certificato X.509 autofirmato con una chiave privata RSA a 2048 bit. La chiave consente di accedere alle istanze del cluster Amazon EMR dell'emittente nella Regione `us-west-2` (Oregon) come specificato dal nome di dominio `*.us-west-2.compute.internal` come nome comune.

Sono specificati altri elementi di oggetto facoltativi, come paese (C), stato (S) e lingua (L). Poiché viene generato un certificato autofirmato, il secondo comando dell'esempio copia il file `certificateChain.pem` nel file `trustedCertificates.pem`. Il terzo comando usa `zip` per creare il file `my-certs.zip` che contiene i certificati.



**Importante**  
Questo esempio è solo una proof-of-concept dimostrazione. L'utilizzo di certificati autofirmati non è consigliato e presenta un potenziale rischio per la sicurezza. Per i sistemi di produzione, utilizza un'autorità di certificazione attendibile per emettere certificati.

```
$ openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal'
$ cp certificateChain.pem trustedCertificates.pem
$ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem
```