认证

为客户端配置 Kerberos 以访问启用 Kerberos 的 Kyuubi

师成师成· 更新于 2026-09-29· 阅读 12 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

说明

当 Kyuubi 由 Kerberos 保护时,身份验证过程会变得稍微复杂一些。

../../_images/kyuubi_kerberos_authentication.png

上图展示了一个简化的 Kerberos 身份验证过程:

  1. Kerberos 客户端向 KDC 发送用户主体和密钥。密钥可以是密码或 keytab 文件。
  2. KDC 返回一张 票据授予票据(TGT)。
  3. Kerberos 客户端将 TGT 存储到票据缓存中。
  4. JDBC 客户端(例如 beeline 和 BI 工具)从票据缓存中读取 TGT。
  5. JDBC 客户端将 TGT 和服务器主体发送给 KDC。
  6. KDC 返回一张 客户端到服务器票据。
  7. JDBC 客户端将 客户端到服务器票据 发送给 Kyuubi 服务器以证明其身份。

在本页面的后续部分,我们将描述通过该身份验证所需的步骤。

安装 Kerberos 客户端

通常,Kerberos 客户端已默认安装。你可以使用 klist 工具进行验证。

Linux 命令及输出:

$ klist -V
Kerberos 5 version 1.15.1

MacOS 命令与输出:

$ klist --version
klist (Heimdal 1.5.1apple1)
Copyright 1995-2011 Kungliga Tekniska Högskolan
Send bug-reports to heimdal-bugs@h5l.org

Windows 命令及输出:

> klist -V
Kerberos for Windows

如果客户端尚未安装,请根据操作系统平台提前安装。

我们建议你安装 MIT Kerberos 发行版,因为本指南中的所有命令都基于它。

配置 Kerberos 客户端

Kerberos 客户端需要一个配置文件来调整 Kerberos 票据缓存的创建。以下是不同操作系统上该配置文件的默认位置:

操作系统路径
Linux/etc/krb5.conf
MacOS/etc/krb5.conf
Windows%ProgramData%\MIT\Kerberos5\krb5.ini

你可以使用 KRB5_CONFIG 环境变量来覆盖默认位置。

配置文件应配置为指向与 Kyuubi 所指向的相同的 KDC。

获取 Kerberos TGT

执行 kinit 命令从 KDC 获取 TGT。

假设用户主体为 kyuubi_user@KYUUBI.APACHE.ORG,用户 keytab 文件名为 kyuubi_user.keytab,则命令应为:

$ kinit -kt kyuubi_user.keytab kyuubi_user@KYUUBI.APACHE.ORG

(Command is identical on different OS platform)

你也可以使用主体和密码执行 kinit 命令来获取 TGT:

$ kinit kyuubi_user@KYUUBI.APACHE.ORG
Password for kyuubi_user@KYUUBI.APACHE.ORG: password

(Command is identical on different OS platform)

如果命令执行成功,TGT 将被存储到票据缓存中。

使用 klist 命令打印票据缓存中的 TGT 信息:

$ klist

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: kyuubi_user@KYUUBI.APACHE.ORG

Valid starting       Expires              Service principal
2021-12-13T18:44:58  2021-12-14T04:44:58  krbtgt/KYUUBI.APACHE.ORG@KYUUBI.APACHE.ORG
    renew until 2021-12-14T18:44:57

(Command is identical on different OS platform. Ticket cache location may be different.)

票据缓存在不同操作系统平台上可能有不同的存储类型。

例如:

操作系统默认票据缓存类型和位置
LinuxFILE:/tmp/krb5cc_%{uid}
MacOSKCM:%{uid}:%{gid}
WindowsAPI:krb5cc

你可以在 klist 输出的 Ticket cache 部分中找到你的票据缓存类型和位置。

注意:

  • 请确保你的票据缓存类型为 FILE,因为 JVM 只能读取以文件形式存储的票据缓存。
  • 如果你在同一台主机上运行 Kyuubi 并使用相同的 OS 用户执行 kinit,请不要将 TGT 存储到默认票据缓存中。默认票据缓存已被 Kyuubi 服务端使用。

无论是因为默认票据缓存不是文件,还是因为它已被 Kyuubi 服务端占用,你都应该将票据缓存存储到另一个文件位置。可以通过在 kinit 命令中使用 -c 参数指定文件位置来实现。

例如:

$ kinit -c /tmp/krb5cc_beeline -kt kyuubi_user.keytab kyuubi_user@KYUUBI.APACHE.ORG

(Command is identical on different OS platform)

要检查票据缓存,请在 klist 命令中使用 -c 参数指定文件位置。

例如,

$ klist -c /tmp/krb5cc_beeline

(Command is identical on different OS platform)

将 Kerberos 客户端配置文件加入 JVM 搜索路径

运行 JDBC 客户端的 JVM 同样需要读取 Kerberos 客户端配置文件。不过,JVM 使用的默认位置与 Kerberos 客户端不同,并且不读取 KRB5_CONFIG 环境变量。

操作系统JVM 搜索路径
Linux系统级:/etc/krb5.conf
MacOS用户级:$HOME/Library/Preferences/edu.mit.Kerberos
系统级:/etc/krb5.conf
Windows用户级:%USERPROFILE%\krb5.ini
系统级:%windir%\krb5.ini

你可以使用 JVM 系统属性 java.security.krb5.conf 来覆盖默认位置。

将 Kerberos 票据缓存加入 JVM 搜索路径

JVM 按以下顺序确定票据缓存的位置:

  1. KRB5CCNAME 环境变量指定的路径。该路径必须以 UNIX 开头…… 不对,必须以 FILE: 开头。
  2. 类 Unix 操作系统(例如 Linux、MacOS)上的 /tmp/krb5cc_%{uid}
  3. 若 ${user.name} 不为空,则为 ${user.home}/krb5cc_${user.name}
  4. 若 ${user.name} 为空,则为 ${user.home}/krb5cc

注意:

  • ${user.home} 和 ${user.name} 是 JVM 系统属性。
  • 若 ${user.home} 为空,则应以 ${user.dir} 替代 ${user.home}。

请确保你的票据缓存以文件形式存储,并将其放置在上述位置之一。

确保 classpath 中存在 core-site.xml

与 Hadoop 客户端一样,应在 core-site.xml 中将 hadoop.security.authentication 设置为 KERBEROS,以便 Hive JDBC 驱动使用 Kerberos 认证。core-site.xml 应放置在 beeline 的 classpath 或 BI 工具的 classpath 中。

Beeline

以下是不同 beeline 发行版中 core-site.xml 应存在的常见位置:

客户端位置说明
Hive beeline$HADOOP_HOME/etc/hadoopHive 会解析 $HADOOP_HOME,并使用 $HADOOP_HOME/bin/hadoop 命令来启动 beeline。$HADOOP_HOME/etc/hadoop 在 hadoop 命令的 classpath 中。
Spark beeline$HADOOP_CONF_DIR在 $SPARK_HOME/conf/spark-env.sh 中,$HADOOP_CONF_DIR 通常被设置为包含 hadoop 客户端配置文件的目录。
Kyuubi beeline$HADOOP_CONF_DIR在 $KYUUBI_HOME/conf/kyuubi-env.sh 中,$HADOOP_CONF_DIR 通常被设置为包含 hadoop 客户端配置文件的目录。

如果在上述位置未找到 core-site.xml,请创建一个包含以下内容的文件:

<configuration>
  <property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
  </property>
</configuration>

BI 工具

对于 BI 工具,添加 core-site.xml 的方式各不相同。
以 DBeaver 为例,我们可以通过它的 Global libraries(全局库)首选项将文件添加到 DBeaver 的 classpath 中。
由于 Global libraries 只接受 jar 文件,你需要将 core-site.xml 打包进一个 jar 文件中。

$ jar -c -f core-site.jar core-site.xml

(Command is identical on different OS platform)

通过 JDBC URL 连接

最后一步是使用正确的 JDBC URL 连接到 Kyuubi。
JDBC URL 的格式应为:

jdbc:hive2://<kyuubi_server_address>:<kyuubi_server_port>/<db>;principal=<kyuubi_server_principal>

或

jdbc:hive2://<kyuubi_server_address>:<kyuubi_server_port>/<db>;kyuubiServerPrincipal=<kyuubi_server_principal>

注意:

  • principal 继承自 Hive JDBC Driver,含义有些模糊,我们可以使用 kyuubiServerPrincipal 作为它的别名。
  • kyuubi_server_principal 是 kyuubi-defaults.conf 中设置的 kyuubi.kinit.principal 的值。
  • 作为命令行参数时,JDBC URL 应加引号,以避免被 “;” 拆分为两条命令。
  • 对于 DBeaver,应将 <db>;principal=<kyuubi_server_principal> 或 <db>;kyuubiServerPrincipal=<kyuubi_server_principal> 设置为 Database/Schema 参数。

评论

登录后参与评论

正在加载评论…