Hadoop HDFS-认证(Kerberos) 简介及入门

53 阅读2分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS(本章节)

前面我们介绍了HDFS的用户概念,很多的时候就是为了权限控制,但是HDFS超级管理员的本质由配置决定,而非用户本身。手动创建 hdfs 用户不会自动获得超管权限,需同时满足以下条件:

进程启动身份:NameNode 必须由 hdfs 用户启动(关键!)

超级组声明:在 hdfs-site.xml 声明超级组

用户组归属:hdfs用户需在 supergroup 组中

上面的虽然有涉及到多个用户,但是这里的用户简单理解都是匿名的,也就是我可以很容易实现权限替换,在实际比较注重安全的环境中必然是不行的,所以我们今天就来介绍这个更安全的认证方式:Kerberos。

1.Kerberos 简介

Kerberos 是一种网络认证协议,用于在非安全网络中安全地验证用户和服务身份。Hadoop 集群使用 Kerberos 提供强身份认证,防止未授权访问。

核心概念

  • KDC (Key Distribution Center):包含 AS (认证服务) 和 TGS (票据授予服务)

  • Principal:用户或服务的唯一标识(格式:primary/instance@REALM

  • Keytab:存储服务 principal 密钥的文件,用于非交互式认证

2.Kerberos 认证流程

  1. 2.1 用户登录
  • 用户向 AS 请求 TGT,提供密码(或 Keytab)。

  • AS 验证身份后返回加密的 TGT(用用户密钥加密)。

  1. 2.2 获取服务票据
  • 用户向 TGS 发送 TGT 和要访问的服务 Principal(如 hdfs/node1)。

  • TGS 验证 TGT 后返回服务票据(用服务密钥加密)。

  1. 2.3 访问服务
  • 用户向服务(如 HDFS)提交服务票据。

  • 服务用自身密钥解密票据,验证用户身份。

3.Hadoop 集成 Kerberos

3.1 服务 Principal 注册

  • 每个 Hadoop 组件(NameNode, YARN, HBase 等)需在 KDC 注册服务 Principal

    #当然这里仅作演示 kadmin -q "addprinc -randkey nn/node1.example.com@HADOOP.COM" kadmin -q "addprinc -randkey yarn/node2.example.com@HADOOP.COM"

3.2 Keytab 分发

为每个服务生成 Keytab 并安全分发到对应主机:

kadmin -q "ktadd -k /etc/security/keytabs/nn.service.keytab nn/node1.example.com@HADOOP.COM"

3.3 配置文件启用 Kerberos

core-site.xml

<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value> <!-- 开启Kerberos -->
</property>

hdfs-site.xml

<property>
  <name>dfs.namenode.kerberos.principal</name>
  <value>nn/_HOST@HADOOP.COM</value> <!-- 使用_HOST自动匹配主机名 -->
</property>

4.用户认证

用户需先通过 kinit 获取 TG

kinit alice@HADOOP.COM  # 交互式输入密码
kinit -kt alice.keytab alice@HADOOP.COM  # 非交互式
  • 执行 Hadoop 命令(如 hdfs dfs -ls /)时自动使用票据。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。