在Serverless Spark的Kyuubi Gateway中,通过Kerberos您可以实现安全的身份验证和访问控制。完成配置后,向该工作空间的Kyuubi Gateway提交任务时,客户端需进行Kerberos认证,从而增强任务执行的安全性。
使用限制
集群和Serverless Spark工作空间在同一个地域。
开启Kerberos的工作空间下仅支持创建1个Kyuubi Gateway。
前提条件
已创建开启Kerberos身份认证的EMR on ECS集群,详情请参见创建集群。
已创建开启Kerberos身份认证的Serverless Spark工作空间,详情请参见开启Kerberos身份认证。
打通网络
Kyuubi Gateway使用Kerberos,需要配置私网连接(PrivateLink),打通Serverless Spark和Kerberos集群之间的网络。
创建终端节点
终端节点(Endpoint)由服务使用方创建和维护,可以与终端节点服务相关联,从而建立通过PrivateLink私网访问外部服务的网络连接。详情请参见终端节点概述。
登录终端节点控制台。
在创建终端节点页面,根据以下信息配置终端节点,然后单击确定创建。
配置
说明
所属地域
选择终端节点所属地域。确保与Kerberos集群、Serverless Spark工作空间所在地域保持一致。
节点名称
输入自定义终端节点的名称。
终端节点类型
选择接口终端节点。
终端节点服务
单击选择可用服务,然后选择或输入目标终端节点服务ID。
说明请将以下信息提交至工单系统,获取终端节点服务ID。
Serverless Spark工作空间ID,如
w-f8cfXXXXXX
。访问Kyuubi Gateway的Kerberos集群的VPC ID,该VPC需要在两个可用区具备可用的交换机,如
vpc-bp1tXXXXXX
。提供选择的2个可用区,如
I,J
。地域支持的可用区范围,请咨询工单中的客服获取。
专有网络
选择访问Kyuubi Gateway的Kerberos集群VPC。
安全组
选择要与终端节点网卡关联的安全组。
说明一个终端节点默认最多支持添加9个安全组。
可用区与交换机
选择前述可用区及其对应的交换机。
IP版本
支持的网络类型。
IPv4:支持客户端使用IPv4地址访问。
双栈:支持客户端同时使用IPv4和IPv6地址访问。
说明当服务提供方完成双栈配置后,服务使用方在创建终端节点时方可进行选择。
资源组
选择终端节点所属的资源组。
标签
选择或输入标签键与标签值。
当基本信息页面,状态是可用,即表明创建成功,终端节点服务域名为
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com
。登录Kerberos集群,测试网络连接。
配置域名解析(可选)
默认终端节点服务域名比较长,为方便使用,您可以配置自定义内网权威域名。详情请参见内网权域名。
登录云解析DNS-内网域名解析。在 内网权威 的用户域名页签下,点击添加域名(Zone) 。
输入内网权威域名,选择域名生效范围VPC,然后点击确定。本文示例是
kyuubi-kerberos.abc
。说明如果有域名类型选项,请选择内网权威加速区。如果没有域名类型选项,则无需选择,默认创建的是内网权威加速区域名。
在用户域名页签,点击目标域名操作列的解析设置按钮,点击添加记录,对话框内选择表单填写模式。
记录类型选择CNAME,主机记录按照选择填写(本文示例是
test
),记录值填写终端节点服务域名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com
。单机确定后,即将终端节点服务域名映射到test.kyuubi-kerberos.abc。登录Kerberos集群,测试网络连接。
ping test.kyuubi-kerberos.abc
创建keytab
执行以下命令,进入Kerberos的admin.local工具。
kadmin.local
创建principal,principal的格式为
kyuubi/<fqdn>@<REALM>
,principal的fqdn
部分建议使用终端节点域名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
导出keytab文件,并退出Kerberos的admin.local工具。
xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM quit
将生成的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使用的认证方式。设置为 |
kyuubi.kinit.principal | 指定Kyuubi Gateway用于Kerberos认证的主体(Principal),格式为 |
kyuubi.kinit.keytab | 指定Kyuubi Gateway使用keytab文件。注:路径固定,仅需替换keytab文件名。 |
kyuubi.files | 创建keytab步骤中上传keytab的OSS路径。 |
如果需要连接开启Kerberos的HMS,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作业是否成功。
准备一个有权限的Kerberos用户,并导出keytab文件。
执行以下命令导出keytab文件。
kadmin.local addprinc -randkey hadoop xst -kt /root/hadoop.keytab hadoop quit
使用keytab文件进行Kerberos认证。
kinit -kt hadoop.keytab hadoop
使用如下命令连接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'
连接后执行
show databases
。
如果您的Spark作业需要连接开启Kerberos认证的HMS/HDFS服务,则需要在HMS/HDFS所在集群中修改HADOOP-COMMON或HDFS组件的core-site.xml配置文件。在该文件中添加以下两个配置,以允许kyuubi用户模拟其他用户访问HDFS/HMS服务,否则可能会导致连接失败。
hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *
较新版本的EMR Datalake集群已经默认增加了该参数,参数添加后需重启HDFS/HMS服务。