Ubuntu Hadoop 数据加密实现指南
一、加密范围与方案选型
- 传输加密:保障数据在客户端与 DataNode/NameNode、以及组件间通信(如 RPC、HTTP/HTTPS、SASL)过程中的机密性与完整性,常用 TLS/SSL 与 SASL 机制。
- 静态加密:保障落盘数据机密性,优先采用 HDFS 透明加密(TDE),由 KMS(Key Management Server) 集中管理密钥,写入自动加密、读取自动解密,对应用透明。
- 主机/磁盘层加密:在操作系统或磁盘层做兜底,如 eCryptfs 对本地数据目录加密,适合特定目录或节点级加固。
- 日志与敏感信息:从源头做脱敏,并对日志目录启用 HDFS TDE + ACL/RBAC,防止敏感信息泄露。
上述方案可组合使用,形成“传输 + 静态 + 主机/磁盘 + 脱敏”的多层防护。
二、HDFS 透明加密 TDE 与 KMS 配置步骤(Ubuntu)
- 前提准备
- 集群启用 Kerberos 认证(Hadoop 安全模式),并规划好 KMS 服务地址与高可用。
- 在所有节点安装 Hadoop 客户端与 KMS 组件,统一 JDK 与 Hadoop 版本。
- 配置 KMS(示例单节点)
- 在 Hadoop 配置目录(如 $HADOOP_HOME/etc/hadoop)中设置 KMS 地址:
- core-site.xml
- 名称:hadoop.security.key.provider.path
- 值:kms://http@:16000/kms
- hdfs-site.xml
- 名称:dfs.encryption.key.provider.uri
- 值:kms://http@:16000/kms
- 配置 KMS 内置 Tomcat 的密钥库口令文件(示例口令为 123456,生产请使用强口令并妥善保护):
- 文件路径:$HADOOP_HOME/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/classes/kms.keystore.password
- 写入口令:
echo '123456' > $HADOOP_HOME/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/classes/kms.keystore.password
- 可选安全加固:启用 HTTPS/SPNEGO Kerberos 保护 KMS 通信与接口。
- 启动 KMS:执行
kms.sh start,并用 jps 确认进程就绪。
- 创建密钥与加密区
- 创建密钥:
hadoop key create <key-name>(如:log-key)
- 查看密钥:
hadoop key list
- 创建加密区:
hdfs crypto -createZone -keyName <key-name> -path <hdfs-path>(如:/secure/logs)
- 验证加密区:
hdfs crypto -listZones
- 验证与权限控制
- 写入文件:
hdfs dfs -put local.log <hdfs-path>(写入即加密,读取即解密)
- 细粒度访问:对加密目录设置 HDFS ACL 或 Ranger/Sentry RBAC,仅授权用户/角色可读。
- 审计:开启 HDFS 审计日志,追踪访问行为。
以上步骤完成后,HDFS 的透明加密即生效,应用无需改造。
三、传输加密配置要点
- 启用 RPC/HTTP 加密:在 core-site.xml / hdfs-site.xml 中开启 SASL 与 HTTPS,为 NameNode/DataNode/ResourceManager 等配置 TLS 证书与信任链。
- 组件间通道:确保 HDFS、YARN、HiveServer2、Oozie 等组件间使用 SASL/TLS 通信。
- 客户端访问:客户端配置 Hadoop SSL 与 Kerberos 凭据,保证端到端加密与强认证。
- 日志链路:采集/传输链路(如 Flume)启用 SASL/TLS,避免明文传输。
这些配置与 TDE 互补,覆盖数据在网络中的安全。
四、主机与磁盘层加密兜底
- eCryptfs 方案(Ubuntu 常用)
- 安装工具:
sudo apt-get install ecryptfs-utils
- 对本地数据目录建立加密挂载(示例):
- 挂载:
sudo mount -t ecryptfs /data /data
- 按向导设置加密选项与口令,后续写入 /data 的数据将自动加密。
- 适用场景:节点本地盘、临时目录、或无法使用 HDFS TDE 的特定场景。
- 注意:需妥善管理挂载口令/恢复密钥,并做好备份与演练。
该方案为操作系统层加密,适合作为 HDFS TDE 的补充。
五、验证与运维注意事项
- 验证方法
- 传输加密:抓包或组件日志确认 TLS/SASL 已启用;
- 静态加密:向加密区写入文件后,使用未授权用户尝试读取应失败;检查 HDFS 审计日志 与 KMS 访问日志;
- 主机层加密:确认 eCryptfs 挂载状态与挂载选项。
- 运维要点
- 密钥全生命周期管理:定期轮换密钥、离线备份、最小权限访问 KMS;
- 性能影响:TDE/TLS 会引入 CPU 与 IO 开销,建议在测试环境评估并合理规划资源;
- 合规与审计:开启 HDFS 审计日志,对加密区与日志目录实施 ACL/RBAC 与访问审计;
- 高可用:为 KMS 与 NameNode/JournalNode 配置 HA,避免单点故障。
以上措施可确保加密体系稳定、可审计、可恢复。