Kyuubi Gateway使用Kerberos

Serverless SparkKyuubi Gateway中,通过Kerberos您可以实现安全的身份验证和访问控制。完成配置后,向该工作空间的Kyuubi Gateway提交任务时,客户端需进行Kerberos认证,从而增强任务执行的安全性。

使用限制

  • 集群和Serverless Spark工作空间在同一个地域。

  • 开启Kerberos的工作空间下仅支持创建1Kyuubi Gateway。

前提条件

  • 已创建开启Kerberos身份认证的EMR on ECS集群,详情请参见创建集群

  • 已创建开启Kerberos身份认证的Serverless Spark工作空间,详情请参见开启Kerberos身份认证

打通网络

Kyuubi Gateway使用Kerberos,需要配置私网连接(PrivateLink),打通Serverless SparkKerberos集群之间的网络。

创建终端节点

终端节点(Endpoint)由服务使用方创建和维护,可以与终端节点服务相关联,从而建立通过PrivateLink私网访问外部服务的网络连接。详情请参见终端节点概述

  1. 登录终端节点控制台

  2. 创建终端节点页面,根据以下信息配置终端节点,然后单击确定创建image

    配置

    说明

    所属地域

    选择终端节点所属地域。确保与Kerberos集群、Serverless Spark工作空间所在地域保持一致。

    节点名称

    输入自定义终端节点的名称。

    终端节点类型

    选择接口终端节点

    终端节点服务

    单击选择可用服务,然后选择或输入目标终端节点服务ID。

    说明

    请将以下信息提交至工单系统,获取终端节点服务ID。

    • Serverless Spark工作空间ID,如w-f8cfXXXXXX

    • 访问Kyuubi GatewayKerberos集群的VPC ID,该VPC需要在两个可用区具备可用的交换机,如vpc-bp1tXXXXXX

    • 提供选择的2个可用区,如I,J。地域支持的可用区范围,请咨询工单中的客服获取。

    专有网络

    选择访问Kyuubi GatewayKerberos集群VPC。

    安全组

    选择要与终端节点网卡关联的安全组。

    说明

    一个终端节点默认最多支持添加9个安全组。

    可用区与交换机

    选择前述可用区及其对应的交换机。

    IP版本

    支持的网络类型。

    • IPv4:支持客户端使用IPv4地址访问。

    • 双栈:支持客户端同时使用IPv4IPv6地址访问。

    说明

    当服务提供方完成双栈配置后,服务使用方在创建终端节点时方可进行选择。

    资源组

    选择终端节点所属的资源组。

    标签

    选择或输入标签键标签值

  3. 基本信息页面,状态是可用,即表明创建成功,终端节点服务域名为ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com

  4. 登录Kerberos集群,测试网络连接。image

配置域名解析(可选)

默认终端节点服务域名比较长,为方便使用,您可以配置自定义内网权威域名。详情请参见内网权域名

  1. 登录云解析DNS-内网域名解析。在 内网权威 的用户域名页签下,点击添加域名(Zone) 

  2. 输入内网权威域名,选择域名生效范围VPC,然后点击确定。本文示例是kyuubi-kerberos.abc

    说明

    如果有域名类型选项,请选择内网权威加速区。如果没有域名类型选项,则无需选择,默认创建的是内网权威加速区域名。

  3. 用户域名页签,点击目标域名操作列的解析设置按钮,点击添加记录,对话框内选择表单填写模式

  4. 记录类型选择CNAME主机记录按照选择填写(本文示例是test),记录值填写终端节点服务域名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com。单机确定后,即将终端节点服务域名映射到test.kyuubi-kerberos.abc

  5. 登录Kerberos集群,测试网络连接。

    ping test.kyuubi-kerberos.abc

创建keytab

  1. 登录Kerberos集群

  2. 执行以下命令,进入Kerberosadmin.local工具。

    kadmin.local
  3. 创建principal,principal的格式为kyuubi/<fqdn>@<REALM>,principalfqdn部分建议使用终端节点域名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com,若配置了CNAME解析自定义域名,则使用自定义域名test.kyuubi-kerberos.abc

    addprinc -randkey kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM
  4. 导出keytab文件,并退出Kerberosadmin.local工具。

    xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM
    quit
  5. 将生成的keytab文件上传到OSS Bucket中。

    hadoop fs -put /root/kyuubi.keytab oss://<YOUR_BUCKET>.<region>.oss-dls.aliyuncs.com/

配置Kyuubi Gateway

Kyuubi Gateway在使用Kerberos时,还需进行以下Kyuubi 配置

kyuubi.authentication              KERBEROS
kyuubi.kinit.principal             kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM
kyuubi.kinit.keytab                /opt/kyuubi/work-dir/kyuubi.keytab
kyuubi.files                       oss://bucket/path/to/kyuubi.keytab

配置项

说明

kyuubi.authentication

指定Kyuubi Gateway使用的认证方式。设置为 KERBEROS 。

kyuubi.kinit.principal

指定Kyuubi Gateway用于Kerberos认证的主体(Principal),格式为 <user>/<host>@<realm>

kyuubi.kinit.keytab

指定Kyuubi Gateway使用keytab文件。注:路径固定,仅需替换keytab文件名。

kyuubi.files

创建keytab步骤中上传keytabOSS路径。

如果需要连接开启KerberosHMS,Spark 配置如下。

spark.hadoop.hive.metastore.uris                    thrift://master-1-1.c-1d36*****e840c.cn-hangzhou.emr.aliyuncs.com:9083
spark.hadoop.hive.imetastoreclient.factory.class    org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory
spark.hive.metastore.kerberos.principal             hive/_HOST@EMR.C-DFD4*****C204.COM
spark.hive.metastore.sasl.enabled                   true
spark.emr.serverless.network.service.name           <network_name>

配置项

说明

spark.hadoop.hive.metastore.uris

Hive Metastore(HMS)地址。

spark.hadoop.hive.imetastoreclient.factory.class

指定创建HMS Client的工厂类。

spark.hive.metastore.kerberos.principal

Kerberos环境下HMS对应的认证主体(principal)。

spark.hive.metastore.sasl.enabled

是否开启Kerberos认证。

spark.emr.serverless.network.service.name

网络连接的连接名称。

说明
  • HA集群环境中,metastore.uris可以配置多个thrift地址,地址之间用逗号分隔,且必须使用hostname,不能使用IP地址。

  • metastore.uris仅填写一个thrift地址,可以使用IP地址,但metastore.kerberos.principal必须采用hive/<hostname of HMS>@<REALM>的格式。

  • 仅当metastore.uris使用主机名时,metastore.kerberos.principal才能简化为hive/_HOST@<REALM>的格式。

保存以上配置后即可启动Kyuubi Gateway。

提交作业

通过一个show databases,验证Kerberos集群连接Kyuubi Gateway启动执行Spark作业是否成功。

  1. 准备一个有权限的Kerberos用户,并导出keytab文件。

    1. 登录Kerberos集群

    2. 执行以下命令导出keytab文件。

      kadmin.local
      addprinc -randkey hadoop
      xst -kt /root/hadoop.keytab hadoop
      quit
  2. 使用keytab文件进行Kerberos认证。

    kinit -kt hadoop.keytab hadoop
  3. 使用如下命令连接Kyuubi Gateway启动执行Spark作业。

    /opt/apps/KYUUBI/kyuubi-1.9.2-1.0.0/bin/kyuubi-beeline -u 'jdbc:hive2://ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com:10009/;principal=kyuubi/_HOST@EMR.C-DFD43*****7C204.COM'
  4. 连接后执行show databasesimage

如果您的Spark作业需要连接开启Kerberos认证的HMS/HDFS服务,则需要在HMS/HDFS所在集群中修改HADOOP-COMMONHDFS组件的core-site.xml配置文件。在该文件中添加以下两个配置,以允许kyuubi用户模拟其他用户访问HDFS/HMS服务,否则可能会导致连接失败。

hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *

较新版本的EMR Datalake集群已经默认增加了该参数,参数添加后需重启HDFS/HMS服务。