加密HFile和WAL内容 本章主要介绍翼MapReduce的加密HFile和WAL内容功能。 加密HFile和WAL内容 须知 设置HFile和WAL为SMS4加密或AES加密方式对系统的影响较大,一旦操作失误会导致数据丢失。不推荐使用此功能。 使用Bulkload批量导入的数据不支持加密。 缺省情况下,HBase中的HFile和WAL(Write ahead log)内容是不加密的。如果用户需要对其进行加密,可通过如下操作进行配置。 1.在任一安装HBase服务节点,使用omm用户执行如下命令创建密钥。 sh ${BIGDATAHOME}/FusionInsightHD8.1.0.1/install/FusionInsightHBase2.2.3/hbase/bin/hbaseencrypt.sh /hbase.jks / /hbase.jks 表示生成的jks文件存储路径。 表示加密的类型,支持SMS4或AES。 表示密钥的长度,SMS4支持16位长度,AES支持128位长度。 为密钥文件的别名,第一次生成时请使用缺省值“omm”。 例如,生成SMS4加密的密钥执行: sh ${BIGDATAHOME}/FusionInsightHD8.1.0.1/install/FusionInsightHBase2.2.3/hbase/bin/hbaseencrypt.sh /home/hbase/conf/hbase.jks SMS4 16 omm 生成AES加密的密钥执行: sh ${BIGDATAHOME}/FusionInsightHD8.1.0.1/install/FusionInsightHBase2.2.3/hbase/bin/hbaseencrypt.sh /home/hbase/conf/hbase.jks AES 128 omm 说明 集群的操作用户需要有/hbase.jks目录的“rw”权限,且要求目录已存在。 运行命令后需要再输入4遍相同的 。其中3中进行加密的密码与此步骤的密码相同。 2.将生成的密钥文件分发到集群中所有节点的相同目录下,并为omm用户配置该文件的读写权限。 说明 请管理员根据企业安全要求,选择安全的操作步骤分发密钥。 如果在使用过程中,有节点出现密钥文件丢失的情况,请按照此步骤从其他节点拷贝到该节点。 3.在FusionInsight Manager界面中,设置“hbase.crypto.keyprovider.parameters.encryptedtext”参数的值为密文密码,设置“hbase.crypto.keyprovider.parameters.uri”参数的值为密钥路径和名称。 “hbase.crypto.keyprovider.parameters.uri”格式为: jceks:// 。 填写密钥的存储路径,例如“/home/hbase/conf/hbase.jks”则对应参数值为“jceks:///home/hbase/conf/hbase.jks”。 “hbase.crypto.keyprovider.parameters.encryptedtext”格式为: 。 填写创建密钥时的密文密码,参数值显示为密文。使用omm用户在安装HBase服务的节点,执行如下命令获取对应加密后的密码: sh ${BIGDATAHOME}/FusionInsightHD8.1.0.1/install/FusionInsightHBase2.2.3/hbase/bin/hbaseencrypt.sh 说明 运行命令后需要输入。该密码与1中手动输入的密码相同。 4.在FusionInsight Manager界面中,设置“hbase.crypto.key.algorithm”参数值为“SMS4”或“AES”,使HFile的内容采用SMS4或AES的方式加密。 5.在FusionInsight Manager界面中,设置“hbase.crypto.wal.algorithm”参数值为“SMS4”或“AES”,使WAL的内容采用SMS4或AES的方式加密。 6.在FusionInsight Manager界面中,将“hbase.regionserver.wal.encryption”参数值修改为“true”。 7.保存设置,并重启HBase服务使其生效。 8.在创建HBase表时,需要通过设置加密方式,表示加密的类型。 通过命令行创建表时,直接设置加密方式为SMS4或AES。 create ' ', { NAME > 'd' , ENCRYPTION > ' ' } 使用代码创建表时,在代码中添加如下信息设置加密方式为SMS4或AES。 public void testCreateTable() { String tableName "user"; Configuration conf getConfiguration(); HTableDescriptor htd new HTableDescriptor(TableName.valueOf(tableName)); HColumnDescriptor hcd new HColumnDescriptor("info"); //设置加密方式为SMS4或AES。 hcd.setEncryptionType(" "); htd.addFamily(hcd); HBaseAdmin admin null; try { admin new HBaseAdmin(conf); if(!admin.tableExists(tableName)) { admin.createTable(htd); } } catch (IOException e) { e.printStackTrace(); } finally { if(admin ! null) { try { admin.close(); } catch (IOException e) { e.printStackTrace(); } } } } 9.如果用户已按照1到7配置了SMS4或AES加密,但是在执行8创建表时,未设置对应的加密参数,使得插入的数据未经加密。 此时,您可以执行如下步骤对之前插入的数据进行加密。 a.针对表执行flush动作,将内存中的数据导入到HFile中。 flush ' ' b.执行以下步骤修改表属性。 disable ' ' alter ' ', NAME> ' ', ENCRYPTION > ' ' enable ' ' c.插入一条新的数据,然后flush表。 说明 必须要插入一条新的数据,HFile才会生成新的HFile,使得之前插入的未加密数据进行重写加密。 put'','id2','f1:c1','value222222222222222222222222222222222' flush'' 须知 执行此步骤时,HBase表是被禁用的,不能提供表服务。请谨慎使用。