Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
¿Cómo uso AES para cifrar una tabla de Apache HBase en Amazon EMR?
Quiero usar el estándar de cifrado avanzado (AES) para cifrar una tabla de Apache HBase en Amazon EMR.
Solución
Nota: Si utiliza Amazon Simple Storage Service (Amazon S3) como origen de datos en lugar del Sistema de archivos distribuido de Hadoop (HDFS), utilice el cifrado en el cliente y en el servidor para proteger los datos.
Cifrado de una nueva tabla de Apache HBase
Siga estos pasos:
-
Abre la consola de Amazon EMR.
-
Elija un clúster que ya tenga HBase. O bien, cree un clúster nuevo con HBase.
-
Utilice SSH para conectarse al nodo principal del clúster de Amazon EMR.
-
Ejecute el comando keytool para crear una clave secreta para el cifrado AES:
sudo keytool -keystore /etc/hbase/conf/hbase.jks -storetype jceks -storepass:file mysecurefile -genseckey -keyalg AES -keysize 128 -alias example-aliasNota: Sustituya example-alias por su alias.
Resultado de ejemplo:Output:Enter key password for example-key-store (RETURN if same as keystore password): Warning:The JCEKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /etc/hbase/conf/hbase.jks -destkeystore /etc/hbase/conf/hbase.jks -deststoretype pkcs12". -
Agregue las siguientes propiedades al archivo hbase-site.xml para cada nodo del clúster de Amazon EMR. Proporcione la ruta de hbase.jks y la contraseña para el parámetro hbase.crypto.keyprovider. Además, especifique su alias en el parámetro hbase.crypto.master.key.name:
<property> <name>hbase.crypto.keyprovider.parameters</name> <value>jceks:///etc/hbase/conf/hbase.jks?password=your_password</value> </property> <property> <name>hbase.crypto.master.key.name</name> <value>example-alias</value> </property> <property> <name>hbase.regionserver.hlog.reader.impl</name> <value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader</value> </property> <property> <name>hbase.regionserver.hlog.writer.impl</name> <value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter</value> </property> <property> <name>hfile.format.version</name> <value>3</value> </property> <property> <name>hbase.regionserver.wal.encryption</name> <value>true</value> </property> <property> <name>hbase.crypto.keyprovider</name> <value>org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</value> </property>Nota: En lugar del algoritmo MD5 predeterminado, puede usar un algoritmo hash de clave de cifrado personalizado, como HBase-25181. Para obtener más información, consulte Agregar opciones para deshabilitar el cifrado de familias de columnas y elegir un algoritmo hash para las claves de cifrado empaquetadas en el sitio web de Apache. Para establecer el hash, utilice la opción de configuración hbase.crypto.key.hash.algorithm. El siguiente ejemplo utiliza el algoritmo SHA-512:
<property> <name>hbase.crypto.key.hash.algorithm</name> <value>SHA-512</value></property> -
Copie el archivo hbase.jks en todos los nodos del clúster en la ubicación especificada en el parámetro hbase.crypto.keyprovider:
cd /etc/hbase/conf scp hbase.jks example-host-to-copy:/tmp ssh example-to-hostsudo cp /tmp/hbase.jks /etc/hbase/conf/Nota: Sustituya example-host-to-copy y example-to-host por los nombres DNS públicos de los nodos.
-
Reinicie todos los servicios de HBase en los nodos centrales y principales. A continuación, repita los comandos hbase-regionserver de detención e inicio en cada nodo central.
Nota: Al detener e iniciar los servidores de la región de AWS, es posible que afecte a las lecturas y escrituras en curso de las tablas de HBase del clúster. Detenga e inicie los daemons de HBase solo durante el tiempo de inactividad. Se recomienda detener e iniciar un clúster de prueba antes de detener e iniciar un clúster de producción.Amazon EMR 5.30.0 y versiones posteriores:
sudo systemctl stop hbase-mastersudo systemctl stop hbase-regionserver sudo systemctl start hbase-mastersudo systemctl start hbase-regionserverVersiones de Amazon EMR 4x a Amazon EMR 5.29.0:
sudo initctl stop hbase-master sudo initctl stop hbase-regionserver sudo initctl start hbase-master sudo initctl start hbase-regionserver -
Inicie sesión en el shell de HBase:
# hbase shell -
Cree una tabla con cifrado AES:
create 'example-table',{NAME=>'columnfamily',ENCRYPTION=>'AES'}Nota: Sustituya example-table por el nombre de su tabla.
Resultado de ejemplo:0 row(s) in 1.6760 seconds=> Hbase::Table - example-table1 -
Confirme que el cifrado AES esté activado:
describe 'example-table'
Nota: Sustituya example-table por el nombre de su tabla.
Resultado de ejemplo:
Table example-table is ENABLED table1 COLUMN FAMILIES DESCRIPTION {NAME => 'columnfamily', BLOOMFILTER => 'ROW', ENCRYPTION => 'AES', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.0320 seconds
Cifrado de una tabla Apache HBase existente
Siga estos pasos:
-
Describa la tabla sin cifrar:
describe 'example-table'Nota: Sustituya example-table por la tabla que desea describir.
Resultado de ejemplo:Table example-table is ENABLED table2 COLUMN FAMILIES DESCRIPTION {NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6 5536', REPLICATION_SCOPE => '0'}1 row(s) in 0.0140 seconds2 -
Active el cifrado AES:
alter 'example-table',{NAME=>'columnfamily2',ENCRYPTION=>'AES'}Nota: Sustituya example-table por su tabla.
Resultado de ejemplo:Updating all regions with the new schema... 1/1 regions updated. Done.0 row(s) in 1.9000 seconds3. -
Confirme que la tabla está cifrada:
describe 'example-table'Nota: Sustituya example-table por su tabla.
Resultado de ejemplo:Table example-table is ENABLED table2 COLUMN FAMILIES DESCRIPTION {NAME => 'columnfamily2', BLOOMFILTER => 'ROW', ENCRYPTION => 'AES', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}1 row(s) in 0.0120 secondsNota: Si crea un índice secundario en la tabla, es posible que el cifrado WAL no funcione y se produzca una respuesta java.lang.NullPointerException. Para resolver este problema, defina hbase.regionserver.wal.encryption como false en el archivo hbase-site.xml:
<property> <name>hbase.regionserver.wal.encryption</name> <value>false</value> </property>
Información relacionada
- Temas
- Analytics
- Etiquetas
- Amazon EMR
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 3 meses
- preguntada hace 10 meses
- Respuesta aceptadapreguntada hace 6 meses