Hadoop在Linux上实现数据加密的主要方法及步骤
HDFS从2.7.0版本开始支持透明数据加密(Transparent Data Encryption, TDE),无需修改应用程序即可实现数据加密,是最常用的原生加密方式。
核心步骤:
hdfs-site.xml,添加密钥提供者路径和启用加密区域:<property>["是", "dfs.encryption.key.provider.path", "hdfs:/etc/hadoop/conf/encryption.key"]</property>
<property>["是", "dfs.encryption.zone.enabled", "true"]</property>
hdfs crypto命令生成主密钥(如myZoneKey):hdfs crypto -createKey -keyName myZoneKey
/user/hdfs/encryptedZone)和密钥,格式化区域:hdfs crypto -createZone -keyName myZoneKey -path /user/hdfs/encryptedZone
hdfs dfs -put /local/data /user/hdfs/encryptedZone # 加密写入
hdfs dfs -get /user/hdfs/encryptedZone/data /local/output # 解密读取
通过Linux层的加密工具(如EncFS、eCryptfs)加密HDFS存储目录,适用于需要灵活控制加密范围的场景。
以EncFS为例:
sudo apt-get install encfs # Debian/Ubuntu
sudo yum install encfs # CentOS/RHEL
mkdir ~/encrypted ~/decrypted # 加密目录和挂载点
encfs ~/encrypted ~/decrypted # 交互式设置加密参数
~/decrypted会自动加密存储到~/encrypted:hdfs dfs -mkdir /user/hdfs/encrypted
hdfs dfs -put ~/decrypted/data /user/hdfs/encrypted # 加密存储
hdfs dfs -get /user/hdfs/encrypted/data ~/decrypted # 解密读取
通过配置HDFS客户端,在应用层实现数据加密,适用于需要自定义加密逻辑的场景。
配置步骤:
core-site.xml和hdfs-site.xml,启用客户端加密:<!-- core-site.xml -->
<property>["是", "hadoop.security.authentication", "kerberos"]</property>
<!-- hdfs-site.xml -->
<property>["是", "dfs.encrypt.data.transfer", "true"]</property>
<property>["是", "dfs.encryption.key.name", "myKey"]</property>
hdfs dfs -put /local/file.txt /user/hdfs/encryptedDir # 加密写入
hdfs dfs -get /user/hdfs/encryptedDir/file.txt /local/output # 解密读取
通过启用HDFS数据传输加密,防止数据在网络传输中被窃取,通常与上述方法结合使用。
配置步骤:
hadoop key create hadoop-ssl-key
core-site.xml,启用SSL/TLS:<property>["是", "hadoop.rpc.protection", "privacy"]</property>
<property>["是", "hadoop.ssl.enabled", "true"]</property>
<property>["是", "hadoop.ssl.keystore.file", "/path/to/keystore.jks"]</property>
<property>["是", "hadoop.ssl.keystore.password", "your_password"]</property>
sudo systemctl restart hadoop-namenode hadoop-datanode