订阅更新

Kerberos认证把新人搞崩了——Hadoop安全机制全解析

Hadoop手册 第 17 题 约 8 分钟读完

本文目录
  1. 先说结论
  2. Kerberos认证——Hadoop安全的基石
  3. Apache Ranger——统一的授权管理
  4. 数据加密——传输加密和存储加密
  5. 实战踩坑:Kerberos认证导致的作业失败
  6. 云上Hadoop的安全方案
  7. 面试高频追问
  8. 总结

先说结论

Hadoop安全有三层:认证(Kerberos,你是谁)、授权(Ranger/Sentry,你能干什么)、加密(传输加密+存储加密)。认证用Kerberos是Hadoop的标准方案;授权推荐Apache Ranger(统一管理HDFS/Hive/Kafka等全生态的权限);加密按需开启。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

Hadoop安全是很多开发者的噩梦——不是因为它复杂,而是因为大部分人平时不接触。在某短视频平台入行时,第一次遇到Kerberos认证的集群,提交Spark作业报了一堆'GSS initiate failed'的错误,排查了半天才发现是keytab文件路径写错了。大厂面试越来越关注数据安全,Hadoop安全机制虽然不是每天都用,但面试必须知道。

Kerberos认证——Hadoop安全的基石

# Kerberos的核心概念
#
# KDC (Key Distribution Center):认证中心,管理所有用户/服务的密钥
# Principal:身份标识,格式:user/host@REALM
#   例:hdfs/namenode.example.com@EXAMPLE.COM
# Keytab:密钥文件,相当于'密码文件'
# Ticket:临时凭证(TGT),有过期时间
#
# 认证流程(简化版):
# 1. 用户用keytab向KDC请求TGT(Ticket Granting Ticket)
# 2. KDC验证keytab有效,颁发TGT(有效期通常24小时)
# 3. 用户用TGT向KDC请求访问HDFS的Service Ticket
# 4. 用Service Ticket访问HDFS NameNode
# 5. NameNode验证Ticket有效,允许访问
#
# 每个Hadoop服务(NN/DN/RM/NM)都有自己的Principal和Keytab
# 服务之间的通信也要互相认证
# Kerberos实操命令
 
# 用密码获取Ticket
kinit username@EXAMPLE.COM
# 输入密码后获得TGT
 
# 用keytab获取Ticket(无需密码,适合脚本和服务)
kinit -kt /path/to/user.keytab username@EXAMPLE.COM
 
# 查看当前Ticket
klist
# 显示:Principal, 有效期, 剩余时间
 
# 销毁Ticket
kdestroy
 
# Spark作业提交时指定keytab(Kerberos集群)
spark-submit \
  --principal user@EXAMPLE.COM \
  --keytab /path/to/user.keytab \
  --master yarn \
  my_job.py

Apache Ranger——统一的授权管理

Ranger是Apache的统一权限管理框架,可以管理Hadoop全生态的权限:

服务Ranger管的权限示例
HDFS目录/文件的读写执行权限分析师只能读/warehouse/ads/目录
Hive库/表/列级别的SELECT/INSERT等分析师只能SELECT脱敏后的视图
KafkaTopic的生产/消费权限ETL账号只能写特定Topic
HBase表/列族/列的读写权限只能读取非敏感列族
YARN队列的提交权限算法组只能提交到algo队列

Ranger的优势:统一管理所有组件的权限,一个Web UI搞定。不需要在HDFS配一套权限、Hive配一套、Kafka配一套。而且支持审计日志——谁在什么时候访问了什么数据都有记录。

数据加密——传输加密和存储加密

加密层方案保护什么性能影响
传输加密RPC加密(SASL)+ HTTPS防止网络窃听5-10% CPU开销
HDFS数据加密HDFS Encryption Zone防止物理磁盘被盗后泄露5-15% IO开销
Hive数据脱敏Ranger Column Masking防止敏感字段泄露几乎无开销
# HDFS加密区域(Encryption Zone)
# 指定目录下的所有文件自动加密存储
 
# 创建加密密钥
hadoop key create mykey
 
# 创建加密区域
hdfs crypto -createZone -keyName mykey -path /warehouse/sensitive
 
# 之后写入/warehouse/sensitive/的文件自动加密
# 读取时自动解密,对应用透明
# 即使有人直接读磁盘上的数据文件,也是密文

实战踩坑:Kerberos认证导致的作业失败

在某短视频平台,新入职的同事第一次在Kerberos集群上提交Spark作业,遇到了一堆问题:

问题一:'GSS initiate failed'。原因:keytab文件路径写错了。spark-submit的--keytab参数要用绝对路径,不能用~或相对路径。

问题二:作业跑了2小时后突然失败。原因:Kerberos Ticket过期了(默认24小时,但有时候设短了只有几小时)。Spark的长作业需要配置自动续期:spark.yarn.principal + spark.yarn.keytab,Spark会在Ticket过期前自动续期。

问题三:Executor无法读取HDFS。原因:Executor运行在YARN的Container里,需要Delegation Token才能访问HDFS。Spark会自动获取Token但有时候会失败。检查spark.yarn.access.hadoopFileSystems配置是否包含了所有需要访问的HDFS namespace。

云上Hadoop的安全方案

云上Hadoop(EMR/MaxCompute等)的安全比自建简单得多:

安全层自建Hadoop云服务(EMR/MaxCompute)
认证Kerberos(运维复杂)IAM(云平台统一管理)
授权Ranger(需要部署维护)IAM Policy + Ranger或内置授权
加密手动配置加密区域默认加密(S3 SSE/OSS加密)
审计Ranger审计日志CloudTrail/日志服务
运维成本高(Kerberos是噩梦)低(云平台托管)

实战经验:在某知名出海硬件品牌用EMR时,安全完全靠AWS IAM——每个用户/服务有独立的IAM Role,通过Policy控制能访问哪些S3路径和EMR集群。不需要配Kerberos,运维成本大幅降低。这也是很多公司选择云服务的原因之一。

面试高频追问

追问一:不配安全有什么风险?

没有认证意味着任何人只要知道NameNode地址就能读写所有数据——用户隐私、交易数据、商业机密全暴露。没有授权意味着无法控制不同角色的数据访问范围。在GDPR/个人信息保护法越来越严的今天,不配安全在很多行业是违规的。

追问二:Kerberos为什么被认为是'噩梦'?

几个原因:① 概念复杂——KDC、Realm、Principal、Keytab、TGT一大堆术语;② 运维繁琐——每个服务都要配Principal和Keytab,Keytab过期要续期;③ 排查困难——Kerberos的错误信息非常晦涩,'GSS initiate failed'可能是十几种原因导致的;④ 和所有组件都有关——HDFS、YARN、Hive、Kafka都要配Kerberos,任何一个配错整个链路就断了。

追问三:Hadoop的安全和Doris/Kafka的安全有什么异同?

原理类似——都是认证+授权+加密三层。Kafka用SASL认证(类似Kerberos但更轻量)+ACL授权,Doris用MySQL协议的用户密码+角色权限。Hadoop最复杂因为它的组件最多,每个组件都要单独配安全。

总结

Hadoop安全面试讲三层:① 认证(Kerberos——KDC颁发Ticket,Principal+Keytab验证身份);② 授权(Ranger统一管理HDFS/Hive/Kafka的权限);③ 加密(传输SASL+存储HDFS Encryption Zone)。Kerberos是最大的运维痛点,云服务用IAM替代Kerberos是大趋势。能讲出Kerberos踩坑经历(keytab路径、Ticket过期、Delegation Token),面试官会觉得你在Kerberos集群上实际工作过。

下一篇聊ZooKeeper在Hadoop中的角色:ZK挂了半个集群不工作了——它到底管了什么?

你们的Hadoop集群配了Kerberos吗?用Ranger管权限吗?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器