大数据集群安全
概述
大数据集群承载企业核心数据资产,安全建设涵盖四大层面:认证(谁)、授权(能做什么)、加密(传输与存储)、审计(留痕)。本文以 Kerberos 认证为主线,拆解 Ranger/Sentry 权限模型、HDFS 透明加密与传输加密,以及审计日志体系,最后给出落地清单。
一、安全威胁与防护框架
| 威胁 | 防护手段 |
|---|---|
| 未授权访问 | 认证:Kerberos / LDAP / 用户名密码 |
| 越权操作 | 授权:Ranger / Sentry 细粒度权限 |
| 网络窃听 | 传输加密:TLS / SASL |
| 存储泄露 | 静态加密:HDFS 透明加密 / KMS |
| 操作无痕 | 审计:审计日志 + 集中收集 |
认证 Kerberos → 授权 Ranger → 传输 TLS → 静态加密 KMS → 审计日志二、Kerberos 认证
2.1 原理
Kerberos 是基于**票据(Ticket)**的第三方认证协议,三个核心角色:
| 角色 | 职责 |
|---|---|
| KDC(Key Distribution Center) | 认证中心,保存所有 principal 的密钥 |
| AS(Authentication Service) | 用户首次登录,颁发 TGT |
| TGS(Ticket Granting Service) | 用 TGT 换访问具体服务的票据 |
1. 客户端 → KDC(AS):我是 user,密码密钥加密请求
2. AS 校验后返回 TGT(Ticket Granting Ticket)
3. 客户端 → KDC(TGS):用 TGT 请求访问 hadoop 服务的票据
4. 返回服务票据 ST
5. 客户端 → 服务端:出示 ST,服务端与 KDC 校验后放行2.2 Hadoop 中的 principal 与 keytab
- principal:身份标识,格式如
hdfs/nn1@REALM.COM、user/zhangsan@REALM.COM。 - keytab:存放密钥的文件,服务与脚本任务用 keytab 免交互认证。
- 服务端认证:各组件(NameNode/DataNode/RegionServer)启动时以自身 principal 登录。
- 客户端认证:
kinit user或指定 keytab,令牌有效期默认 24 小时。
bash
# 创建服务 principal 并导出 keytab
kadmin.local -q "addprinc -randkey hdfs/nn1@REALM.COM"
kadmin.local -q "ktadd -k /etc/security/keytabs/hdfs.keytab hdfs/nn1@REALM.COM"
# 客户端登录
kinit -kt user.keytab zhangsan
klist # 查看当前票据2.3 与 Hadoop 集成要点
| 配置 | 说明 |
|---|---|
core-site.xml | hadoop.security.authentication=kerberos |
hdfs-site.xml | dfs.namenode.kerberos.principal 等 |
yarn-site.xml | yarn.resourcemanager.principal 等 |
dfs.data.transfer.protection | 数据传输加 SASL/TLS 保护 |
开启 Kerberos 后,普通用户需要先 kinit,未认证访问直接抛认证失败。
2.4 代理用户与令牌
- ProxyUser:服务端以已认证身份代理普通用户执行(如 Oozie 替用户提交作业)。
- Delegation Token:客户端拿到的短期令牌,跨节点传递避免密钥泄露。
三、授权:Ranger 与 Sentry
3.1 Sentry(旧方案,HDP 体系)
Sentry 提供基于角色的访问控制(RBAC),规则存在数据库:
| 概念 | 说明 |
|---|---|
| Role | 角色,绑定一组权限 |
| Privilege | 对对象(库/表/目录)的授权动作(SELECT/INSERT/ALL) |
| Group | 用户组 → 角色映射 |
授权粒度到表/列,但对 HDFS 文件级权限支持有限,且无统一审计面板。
3.2 Ranger(现主流,CDP/CDH)
Ranger 是 Apache 中央权限管理平台,统一管理 HDFS、Hive、HBase、Kafka、YARN 的授权与审计:
Ranger Admin(策略中心)── 策略下发 ──> 各组件 Ranger Plugin(嵌入服务端)| 能力 | 说明 |
|---|---|
| 统一策略 | 一处配置,多组件生效 |
| 行级/列级 | Hive/Spark 支持行过滤、列掩码(脱敏) |
| 审计面板 | 集中查看各组件访问日志 |
| Tag 策略 | 基于数据标签(如敏感)动态授权 |
行级与列掩码示例(Ranger Hive 策略):
| 策略项 | 示例 |
|---|---|
| 列掩码 | phone 列对普通组返回 138****5678 |
| 行过滤 | WHERE dept = 'finance' 只允许财务组看本部门 |
3.3 对比表
| 维度 | Sentry | Ranger |
|---|---|---|
| 授权模型 | RBAC(角色) | RBAC + Tag 策略 |
| 组件覆盖 | Hive/Solr/Impala 为主 | HDFS/Hive/HBase/Kafka/YARN 全栈 |
| 数据脱敏 | 弱 | 列掩码/行过滤原生支持 |
| 审计 | 基本 | 集中审计面板 |
| 现状 | 逐步退役 | CDP 默认,社区主流 |
新集群直接选 Ranger;存量 Sentry 集群规划迁移。
四、数据加密
4.1 传输加密
- HDFS RPC:
hadoop.rpc.protection=privacy启用 SASL 加密。 - HDFS 数据块:
dfs.data.transfer.protection=privacy。 - HTTP 访问:启用 HTTPS(ssl-server.xml)。
- HiveServer2/Kafka:启用 TLS。
传输加密有 CPU 开销,通常在跨机房、公网链路启用,内网按风险等级评估。
4.2 静态加密:HDFS 透明加密
HDFS 透明加密(Transparent Encryption)在**加密区(Encryption Zone)**内自动加密文件,业务无感:
| 组件 | 角色 |
|---|---|
| KMS(Key Management Server) | 集中管理加密密钥(DEK/KEK) |
| Zone 密钥 | 每个加密区一个区密钥,加密区内所有文件用它派生 DEK |
| NameNode | 管理加密区元数据,缓存 DEK |
写数据:客户端向 KMS 申请 DEK → 用 DEK 加密数据块 → 存 HDFS
读数据:NameNode 授权 → KMS 返回 DEK → 客户端解密启用方式:
bash
# 创建加密区
hdfs crypto -createZone -path /data/secure -keyName mykey4.3 加密选型
| 层级 | 方案 | 成本 |
|---|---|---|
| 文件级 | HDFS 透明加密 | 中(KMS 引入) |
| 卷级 | Linux dm-crypt / 磁盘加密 | 低,但全盘加密性能损耗 |
| 数据库级 | Hive 加密 + Ranger 脱敏 | 中 |
| 网络级 | 传输加密 | 低 |
敏感数据(身份证、手机号、支付数据)建议静态加密 + 列级脱敏双保险。
五、审计日志
5.1 审计内容
| 审计源 | 记录内容 |
|---|---|
| HDFS | 文件增删改、ACL 变更、加密区操作 |
| Hive/Spark | SQL 查询、表/库操作(谁在什么时间查了什么) |
| HBase | 表操作、权限变更 |
| YARN | 作业提交者、队列、资源使用 |
| Ranger | 策略变更、被拒绝的访问尝试 |
5.2 收集方案
各组件审计日志(JSON/文本)→ Flume/Filebeat → Kafka → Elasticsearch → Kibana 检索Ranger Admin 自带审计面板,适合集中查权限相关事件;全量审计建议入 ES 做长期检索。
5.3 审计最佳实践
- 审计日志独立存储,设置只追加权限,防篡改。
- 保留周期按合规要求(如 6 个月~1 年)。
- 对敏感操作(drop 表、权限变更、批量导出)配置实时告警。
六、安全落地清单
| 阶段 | 动作 |
|---|---|
| 基线 | 关闭默认口令、最小化开放端口、统一 NTP |
| 认证 | 部署 Kerberos,服务 principal + keytab 管理 |
| 授权 | 部署 Ranger,按业务组划分策略,最小权限原则 |
| 加密 | 敏感目录建加密区,公网链路启用 TLS |
| 审计 | 集中审计 + 敏感操作告警 |
| 持续 | 补丁更新、定期权限复审、账号回收 |
常见问题速查
| 问题 | 原因与处理 |
|---|---|
| 认证过期 | keytab 到期或主机时间偏差,检查 NTP 与票据有效期 |
| 客户端无法访问 | 未 kinit 或 principal 不匹配,klist -e 排查 |
| Ranger 策略不生效 | 插件未下发或缓存,检查插件状态并刷新策略 |
| 加密区写入慢 | KMS 高可用不足或 DEK 缓存命中低,扩容 KMS |
| 审计漏日志 | 组件审计开关未开启,核对各服务审计配置 |