Crittografia trasparente in HDFS su Amazon EMR - Amazon EMR

Crittografia trasparente in HDFS su Amazon EMR

La crittografia trasparente è implementata attraverso l'utilizzo di zone di crittografia di HDFS, che sono i percorsi HDFS definiti dall'utente. Ogni zona di crittografia ha una propria chiave, che viene memorizzata nel server di chiavi specificato utilizzando la classificazione di configurazione hdfs-site.

A partire dalla versione Amazon EMR 4.8.0, puoi utilizzare le configurazioni di sicurezza di Amazon EMR per configurare più facilmente impostazioni di crittografia di dati per cluster. Le configurazioni di sicurezza offrono impostazioni che assicurano la sicurezza dei dati in transito e a riposo nei volumi di archiviazione di Amazon Elastic Block Store (Amazon EBS) e in EMRFS su Amazon S3. Per ulteriori informazioni, consulta Crittografia dei dati in transito e a riposo nella Guida alla gestione di Amazon EMR.

Amazon EMR usa il KMS Hadoop per impostazione predefinita; tuttavia, è possibile usare un altro KMS che implementa l'operazione API del KeyProvider. Ogni file in una zona di crittografia HDFS ha le proprie chiavi di crittografia dei dati univoche, che sono crittografate in base alla chiave della zona di crittografia. I dati HDFS vengono crittografati da punto a punto (memorizzati e in transito) quando vengono scritti in una zona di crittografia perché le attività di crittografia e decrittografia avvengono solo nel client.

Non è possibile spostare file tra zone di crittografia o da una zona di crittografia a percorsi non crittografati.

Il client NameNode e HDFS interagiscono con il KMS Hadoop (o un KMS alternativo configurato dall'utente) tramite l'operazione API KeyProvider. Il KMS è responsabile della memorizzazione delle chiavi di crittografia nel deposito chiavi di supporto. Inoltre, Amazon EMR include la policy di forza illimitata JCE, in modo da poter creare chiavi della lunghezza desiderata.

Per ulteriori informazioni, consulta Crittografia trasparente in HDFS nella documentazione di Hadoop.

Nota

In Amazon EMR, KMS su HTTPS non è abilitato per impostazione predefinita con Hadoop KMS. Per ulteriori informazioni su come abilitare KMS su HTTPS, consulta la documentazione di KMS Hadoop.

Configurazione della crittografia trasparente HDFS

Puoi configurare la crittografia trasparente in Amazon EMR mediante la creazione di chiavi e aggiungendo zone di crittografia. Ci sono diversi modi per farlo:

  • Utilizzo dell'operazione API di configurazione di Amazon EMR quando si crea un cluster

  • Usare una fase Hadoop JAR con command-runner.jar

  • Accedendo al nodo master del cluster Hadoop e utilizzando i client della riga di comando hadoop key e hdfs crypto

  • Utilizzando l'API REST per Hadoop KMS e HDFS

Per ulteriori informazioni sulle API REST, consulta la relativa documentazione per Hadoop KMS e HDFS.

Per creare zone di crittografia e le relative chiavi durante la creazione di cluster utilizzando la CLI

La classificazione hdfs-encryption-zones nell'operazione API di configurazione consente di specificare un nome di chiave e una zona di crittografia quando si crea un cluster. Amazon EMR crea questa chiave in Hadoop KMS sul cluster e configura l'area di crittografia.

  • Creare un cluster con il seguente comando.

    aws emr create-cluster --release-label emr-5.36.1 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

    myConfig.json:

    [ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
Per creare manualmente le zone di crittografia e le relative chiavi sul nodo master
  1. Avviare il cluster utilizzando una versione di Amazon EMR superiore a 4.1.0.

  2. Connettersi al nodo principale del cluster con SSH.

  3. Creare una chiave all'interno di Hadoop KMS.

    $ hadoop key create path2_key path2_key has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=256, description='null', attributes=null}. KMSClientProvider[http://ip-x-x-x-x.ec2.internal:16000/kms/v1/] has been updated.
    Importante

    Hadoop KMS richiede che i nomi delle chiavi chiave siano minuscoli. Se si utilizza una chiave con caratteri maiuscoli, il cluster fallirà durante l'avvio.

  4. Creare il percorso della zona di crittografia in HDFS.

    $ hadoop fs -mkdir /myHDFSPath2
  5. Rendere il percorso HDFS una zona di crittografia utilizzando la chiave creata.

    $ hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2 Added encryption zone /myHDFSPath2
Per creare manualmente le zone di crittografia e le relative usando la AWS CLI
  • Aggiungere i passaggi per creare manualmente le chiavi KMS e le zone di crittografia con il seguente comando.

    aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Create First Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path1_key\""] \ Type=CUSTOM_JAR,Name="Create First Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create First Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path1_key -path /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path2_key\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath2\""] \ Type=CUSTOM_JAR,Name="Create Second Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2\""]
    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

Considerazioni per la crittografia trasparente HDFS

Una best practice è quella di creare una zona di crittografia per ogni applicazione in cui possono scrivere file. Inoltre, è possibile crittografare tutti gli HDFS utilizzando la classificazione delle zone di cifratura hdfs-encryption nell'API di configurazione e specificare il percorso di root (/) come zona di cifratura.

Server di gestione delle chiavi Hadoop

Hadoop KMS è un server di gestione delle chiavi che fornisce la capacità di implementare servizi crittografici per i cluster Hadoop e può servire come fornitore di chiavi per Crittografia trasparente in HDFS su Amazon EMR. Hadoop KMS in Amazon EMR è installato e abilitato per impostazione predefinita quando si seleziona l'applicazione Hadoop durante l'avvio di un cluster EMR. L'Hadoop KMS non memorizza le chiavi da solo, tranne nel caso di memorizzazione nella cache temporanea. Hadoop KMS funge da proxy tra il fornitore della chiave e il trustee del client verso un keystore di supporto: non è un keystore. Il keystore predefinito che viene creato per Hadoop KMS è Java Cryptography Extension KeyStore (JCEKS). È inclusa anche la policy di forza illimitata JCE, in modo da poter creare chiavi con la lunghezza desiderata. Hadoop KMS supporta anche una gamma di ACL che controllano l'accesso ai tasti e le operazioni chiave indipendentemente da altre applicazioni client come HDFS. La lunghezza predefinita della chiave in Amazon EMR è 256 bit.

Per configurare Hadoop KMS, utilizzare la classificazione hadoop-kms-site per modificare le impostazioni. Per configurare ACL, si usa la classificazione kms-acls.

Per ulteriori informazioni, consulta la documentazione di Hadoop KMS. Hadoop KMS è utilizzato nella crittografia trasparente HDFS Hadoop. Per ulteriori informazioni su HDFS, consulta l'argomento HDFS transparent encryption (Crittografia trasparente HDFS) nella documentazione di Apache Hadoop.

Nota

In Amazon EMR, KMS su HTTPS non è abilitato per impostazione predefinita con Hadoop KMS. Per informazioni su come abilitare KMS su HTTPS, consulta la documentazione di KMS Hadoop.

Importante

Hadoop KMS richiede che i nomi delle chiavi chiave siano minuscoli. Se si utilizza una chiave con caratteri maiuscoli, il cluster fallirà durante l'avvio.

Configurazione di Hadoop KMS in Amazon EMR

Utilizzando Amazon EMR versione 4.6.0 o successive, la kms-http-port è 9700 e la kms-admin-port è 9701.

È possibile configurare Hadoop KMS al momento della creazione del cluster utilizzando le API di configurazione per i rilasci di Amazon EMR. Di seguito sono riportate le classificazioni degli oggetti di configurazione disponibili per Hadoop KMS:

Classificazioni di configurazione di Hadoop KMS
Classificazione Nome file
hadoop-kms-site kms-site.xml
hadoop-kms-acls kms-acls.xml
hadoop-kms-env kms-env.sh
hadoop-kms-log4j kms-log4j.properties
Per impostare ACL di Hadoop KMS utilizzando l'interfaccia a riga di comando (CLI)
  • Creare un cluster con Hadoop KMS con ACL utilizzando il seguente comando:

    aws emr create-cluster --release-label emr-5.36.1 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-acls", "Properties": { "hadoop.kms.blacklist.CREATE": "hdfs,foo,myBannedUser", "hadoop.kms.acl.ROLLOVER": "myAllowedUser" } } ]
Per disabilitare la cache di Hadoop KMS utilizzando l'interfaccia a riga di comando (CLI)
  • Creare un cluster con Hadoop KMS hadoop.kms.cache.enable impostato su false utilizzando il seguente comando:

    aws emr create-cluster --release-label emr-5.36.1 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.cache.enable": "false" } } ]
Per impostare le variabili di ambiente nello script kms-env.sh utilizzando l'interfaccia a riga di comando (CLI)
  • Modificare le impostazioni in kms-env.sh tramite la configurazione hadoop-kms-env. Creare un cluster con Hadoop KMS utilizzando il seguente comando:

    aws emr create-cluster --release-label emr-5.36.1 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_LIBRARY_PATH": "/path/to/files", "KMS_SSL_KEYSTORE_FILE": "/non/Default/Path/.keystore", "KMS_SSL_KEYSTORE_PASS": "myPass" }, "Configurations": [ ] } ] } ]

Per ulteriori informazioni sulla configurazione di Hadoop KMS, consulta la documentazione di Hadoop KMS.

Crittografia trasparente HDFS su cluster EMR con più nodi master

Apache Ranger KMS viene utilizzato in un cluster Amazon EMR con più nodi primari per la crittografia trasparente in HDFS.

Apache Ranger KMS archivia la chiave root e le chiavi Encryption Zone (EZ) nel tuo Amazon RDS per un cluster Amazon EMR con più nodi primari. Per abilitare la crittografia trasparente in HDFS su un cluster Amazon EMR con più nodi primari, devi fornire le seguenti configurazioni.

  • Amazon RDS o il tuo URL di connessione al server MySQL per archiviare la chiave root Ranger KMS e la chiave EZ

  • Nome utente e password per MySQL

  • Password per la chiave root Ranger KMS

  • File PEM dell'autorità di certificazione (CA) per la connessione SSL al server MySQL

Puoi fornire queste configurazioni utilizzando la classificazione ranger-kms-dbks-site e la classificazione ranger-kms-db-ca, come indicato nell'esempio seguente.

[ { "Classification": "ranger-kms-dbks-site", "Properties": { "ranger.ks.jpa.jdbc.url": "jdbc:log4jdbc:mysql://mysql-host-url.xx-xxx-1.xxx.amazonaws.com:3306/rangerkms", "ranger.ks.jpa.jdbc.user": "mysql-user-name", "ranger.ks.jpa.jdbc.password": "mysql-password", "ranger.db.encrypt.key.password": "password-for-encrypting-a-master-key" } }, { "Classification": "ranger-kms-db-ca", "Properties": { "ranger.kms.trust.ca.file.s3.url": "s3://rds-downloads/rds-ca-2019-root.pem" } } ]

Di seguito sono riportate le classificazioni degli oggetti di configurazione per Apache Ranger KMS.

Classificazioni di configurazione di Hadoop KMS
Classificazione Descrizione
ranger-kms-dbks-site Modifica i valori nel file dbks-site.xml di Ranger KMS.
ranger-kms-site Modifica i valori nel file ranger-kms-site.xml di Ranger KMS.
ranger-kms-env Modifica i valori nell'ambiente Ranger KMS.
ranger-kms-log4j Modifica i valori nel file kms-log4j.properties di Ranger KMS.
ranger-kms-db-ca Modifica i valori per il file CA su S3 per la connessione SSL di MySQL con Ranger KMS.

Considerazioni

  • Si consiglia di crittografare l'istanza Amazon RDS per una maggiore sicurezza. Per ulteriori informazioni, consulta la Panoramica della crittografia delle risorse Amazon RDS.

  • Si consiglia di utilizzare database MySQL separati in ogni cluster Amazon EMR con più nodi primari per un maggiore livello di sicurezza.

  • Per configurare la crittografia trasparente in HDFS su un cluster Amazon EMR con più nodi primari, devi specificare la classificazione hdfs-encryption-zones durante la creazione del cluster. In caso contrario, Ranger KMS non verrà configurato o avviato. La riconfigurazione della classificazione hdfs-encryption-zones o di una qualsiasi classificazione di configurazione Hadoop KMS su un cluster in esecuzione non è supportata su cluster Amazon EMR con più nodi primari.