Hadoop集群安全部署:Kerberos认证与HDFS权限精细化控制

1. Kerberos认证概述

Kerberos是Hadoop集群安全的核心组件,通过票据(Ticket)机制实现双向认证:

  • 三阶段验证
    1. 客户端向KDC(密钥分发中心)请求票据授权票据(TGT)
    2. KDC验证身份后返回加密TGT
    3. 客户端使用TGT申请服务票据(ST)访问集群服务
  • 关键优势
    • 防止中间人攻击
    • 支持票据有效期管理
    • 实现服务间安全通信
2. Kerberos在Hadoop中的配置

核心步骤

# 1. 安装KDC服务(示例:MIT Kerberos)
yum install krb5-server krb5-workstation

# 2. 创建Kerberos数据库
kdb5_util create -s

# 3. 添加Hadoop主体(Principal)
kadmin.local -q "addprinc -randkey hdfs/namenode@EXAMPLE.COM"
kadmin.local -q "addprinc -randkey yarn/resourcemanager@EXAMPLE.COM"

# 4. 生成keytab文件(密钥表)
kadmin.local -q "xst -k hdfs.keytab hdfs/namenode"

配置文件调整

  • krb5.conf:定义KDC地址和域配置
  • core-site.xml:启用Kerberos
    <property>
      <name>hadoop.security.authentication</name>
      <value>kerberos</value>
    </property>
    

3. HDFS权限控制基础

HDFS采用POSIX风格权限模型:

  • 权限三元组
    • 所有者($U$)、所属组($G$)、其他用户($O$)
    • 权限位:$rwx$(读/写/执行)
  • 权限示例
    # 设置目录权限:所有者可读写执行,组可读执行,其他无权限
    hdfs dfs -chmod 750 /secure/data
    

  • 用户映射
    • 通过hadoop-http-authentication实现LDAP/AD集成
4. HDFS ACL精细化控制

启用ACL补充标准权限模型:

# 1. 启用ACL(hdfs-site.xml)
<property>
  <name>dfs.namenode.acls.enabled</name>
  <value>true</value>
</property>

# 2. 添加ACL规则
hdfs dfs -setfacl -m user:audit_team:r-x /finance/reports
hdfs dfs -setfacl -m group:dev_team:rw- /dev/sourcecode

# 3. 查看ACL
hdfs dfs -getfacl /sensitive/data

ACL规则类型

条目类型示例格式作用
用户ACLuser:alice:rw-用户alice的读写权限
组ACLgroup:finance:r--财务组的只读权限
默认ACLdefault:user::r-x新建子项继承的默认权限
5. 最佳实践
  1. 最小权限原则

    • 初始权限设置为$750$(所有者完全控制,组只读)
    • 通过ACL逐步添加例外权限
  2. 审计与监控

    • 定期检查hdfs audit log
    • 使用Ranger/Sentry集中管理策略
  3. 密钥安全管理

    • Keytab文件权限设为$400$
    • 定期轮换密钥(建议每90天)
  4. 灾难恢复

    # 备份Kerberos数据库
    kdb5_util dump kerberos-backup
    

实施建议:先在生产测试环境验证Kerberos配置,再逐步启用ACL。权限变更需通过审批流程,避免服务中断。

更多推荐