在Serverless Spark的Kyuubi Gateway中,通過Kerberos您可以實現安全的身分識別驗證和存取控制。完成配置後,向該工作空間的Kyuubi Gateway提交任務時,用戶端需進行Kerberos認證,從而增強任務執行的安全性。
使用限制
kdc和Serverless Spark工作空間在同一個地區。
前提條件
已建立開啟Kerberos身份認證的EMR on ECS叢集,詳情請參見建立叢集。
已建立開啟Kerberos身份認證的Serverless Spark工作空間,詳情請參見開啟Kerberos身份認證。
已在Serverless Spark工作空間中建立Kyuubi Gateway(無需啟動,僅建立即可)。
打通網路
Kyuubi Gateway使用Kerberos,需要配置私網串連(PrivateLink),打通Serverless Spark和Kerberos叢集之間的網路。該網路設定目前不支援使用者自行設定,您需提供相關資訊並提交工單,並擷取終端節點服務ID,如:epsrv-bp10******2j5ms。
請將以下資訊提交至工單系統,擷取終端節點服務ID。
Serverless Spark工作空間ID,如
w-f8cfXXXXXX。Kyuubi Gateway ID,如
kb-564e********266f。至少提供用於訪問Kyuubi服務的2個可用性區域,如
cn-hangzhou-j,cn-hangzhou-k。地區支援的可用性區域範圍,請諮詢工單中的客服擷取。
建立終端節點
終端節點(Endpoint)由服務使用方建立和維護,可以與終端節點服務相關聯,從而建立通過PrivateLink私網訪問外部服務的網路連接。詳情請參見終端節點。
登入終端節點控制台。
在建立終端節點頁面,根據以下資訊配置終端節點,然後單擊確定建立。
配置
說明
所屬地區
選擇終端節點所屬地區。確保與Kerberos叢集、Serverless Spark工作空間所在地區保持一致。
節點名稱
輸入自訂終端節點的名稱。
終端節點類型
選擇介面終端節點。
終端節點服務
單擊選擇可用服務,然後選擇或輸入目標終端節點服務ID,即上文擷取的
epsrv-bp10******2j5ms。專用網路
選擇訪問Kyuubi Gateway節點所在VPC。
可用性區域與交換器
選擇前述可用性區域及其對應的交換器,建議至少選擇兩個。
安全性群組
選擇要與終端節點網卡關聯的安全性群組,建議選擇訪問Kyuubi Gateway所在節點的叢集安全性群組,避免串連請求被安全性群組攔截。
IP版本
支援的網路類型,預設IPv4。
資源群組
可選配置終端節點所屬的資源群組。
標籤
可選配置標籤鍵與標籤值。
在終端節點基本資料頁面,狀態為可用時,即表明建立成功,終端節點服務網域名稱為
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com。登入Kerberos叢集,測試網路連接。
在 Kerberos 叢集節點上通過 ping 命令驗證終端節點的私網連通性,確認響應正常,表明網路已經打通:
[root@master-1-1(xxx) ~]# ping ep-bp1ixxx.cn-hangzhou.privatelink.aliyuncs.com PING ep-bp1xxx xxx.cn-hangzhou.privatelink.aliyuncs.com (xxx) 56(84) bytes of data. 64 bytes from xxx (xxx): icmp_seq=1 ttl=102 time=0.989 ms
佈建網域名解析(可選)
預設終端節點服務網域名稱比較長,為方便使用,您可以配置自訂內網權威網域名稱。詳情請參見內網權網域名稱。
登入。在 內網權威 的使用者網域名稱頁簽下,點擊添加網域名稱(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
建立kyuubi.keytab,該keytab僅用於Serverless Spark的Kyuubi Gateway認證服務。
登入Kerberos叢集Kadmin節點,例如EMR on ECS的master-1-1節點。
執行以下命令,進入Kerberos的admin.local工具。
kadmin.local查看已存在的principal:
listprincs建立principal,principal的格式為
kyuubi/<fqdn>@<REALM>,principal的fqdn部分建議使用終端節點網域名稱ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com,若配置了CNAME解析自訂網域名,則使用自訂網域名test.kyuubi-kerberos.abc,principal的<REALM>需要和叢集當前配置保持一致,可參考其他已有principal。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.COMquit將產生的keytab檔案上傳到OSS Bucket中。
hadoop fs -put /root/kyuubi.keytab oss://<bucket_name>.oss-<region-id>-internal.aliyuncs.com/<path>/
配置Kyuubi Gateway
Kyuubi Gateway在使用Kerberos時,需要選擇能訪問KDC叢集的網路連接,還需進行以下Kyuubi 配置。
kyuubi.authentication KERBEROS
kyuubi.kinit.principal kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM
kyuubi.files oss://<bucket_name>/<path>/kyuubi.keytab
kyuubi.kinit.keytab /opt/kyuubi/work-dir/kyuubi.keytab配置項 | 說明 |
kyuubi.authentication | 指定Kyuubi Gateway使用的認證方式。設定為 |
kyuubi.kinit.principal | 指定Kyuubi Gateway用於Kerberos認證的Principal主體,格式為 |
kyuubi.files | 該配置會下載指定檔案至 |
kyuubi.kinit.keytab | 指定Kyuubi Gateway使用keytab檔案。註:路徑固定為 |
如需要串連開啟Kerberos的HMS,且工作空間資料目錄已經配置該HMS資料目錄,Spark 配置如下。
spark.hive.metastore.kerberos.principal hive/_HOST@EMR.C-DFD4*****C204.COM
spark.hive.metastore.sasl.enabled true配置項 | 說明 |
spark.hive.metastore.kerberos.principal | Kerberos環境下HMS對應的認證主體(principal),需填上方步驟listprincs命令擷取的hive principal,其中 |
spark.hive.metastore.sasl.enabled | 是否開啟Kerberos認證,填true。 |
(選填),如需要串連開啟Kerberos的HMS,且工作空間資料目錄沒有配置該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.hadoop.hive.metastore.uris | Hive Metastore(HMS)地址。 |
spark.hadoop.hive.imetastoreclient.factory.class | 固定值。 |
在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。
提交作業
驗證Kerberos叢集串連Kyuubi Gateway啟動執行Spark作業是否成功。
(可選)準備一個有許可權的Kerberos使用者,並匯出keytab檔案。
執行以下命令匯出keytab檔案。
kadmin.local addprinc -randkey emr-user@EMR.C-DFD4*****C204.COM xst -kt /root/emr-user.keytab emr-user@EMR.C-DFD4*****C204.COM quit
使用該keytab檔案進行Kerberos認證。
kinit -kt /root/emr-user.keytab emr-user如步驟1未建立,也可使用已存在的服務keytab,例如EMR on ECS預設存在的hive.keytab。
說明測試情境可直接使用叢集上已存在的keytab,但禁止修改、重新匯出已經存在的服務keytab,否則會導致原有服務不可用。
klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab kinit -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab hive/master-1-1.c-596f1842f3ed8ad0.cn-hangzhou.emr.aliyuncs.com@EMR.C-596F1842F3ED8AD0.COM查看當前Kerberos 票據。
klist使用kyuubi-beeline或spark-beeline串連Kyuubi Gateway啟動執行Spark作業。
kyuubi-beeline -u 'jdbc:hive2://ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com:10009/;principal=kyuubi/_HOST@EMR.C-DFD43*****7C204.COM'說明ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com為建立終端節點章節擷取的服務網域名稱。連接埠號碼預設為10009。
principal為kyuubi服務principal,
<fqdn>可簡化為_HOST,即kyuubi/_HOST@EMR.C-DFD43*****7C204.COM。
串連後執行
show databases。2025-08-21 14:55:18.392 INFO KyuubiSessionManager-exec-pool: Thread-83 org.apache.kyuubi.operation.ExecuteState STATE -> FINISHED_STATE, time taken: 0.301 seconds 2025-08-21 14:55:18.393 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.MessageSender: [KyuubiSqlStateme success! 2025-08-21 14:55:18.418 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.MessageSender: channel listener 2025-08-21 14:55:18.420 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.WebSocketClientHandler: channel: ! +------------+ | namespace | +------------+ | default | +------------+ 1 row selected (0.539 seconds)
常見問題
如何串連開啟Kerberos認證的HDFS服務?
需要在HDFS所在叢集中修改HADOOP-COMMON或HDFS組件的core-site.xml設定檔。在該檔案中添加以下兩個配置,以允許kyuubi使用者類比其他使用者訪問HDFS/HMS服務,否則可能會導致串連失敗,參數添加後需重啟HDFS/HMS服務。新版本的EMR Datalake叢集已經預設增加了該參數。
hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *還需額外添加Spark 配置如下。
spark.kerberos.access.hadoopFileSystems hdfs://hdfs-cluster如何提交作業至Kyuubi時無需Kerberos認證,僅在Spark作業訪問HMS時進行Kerberos認證?
修改Kyuubi配置如下。串連時無需指定principal。
kyuubi.authentication KERBEROS,NONE開啟Kerberos後如何串連Ranger服務?
新增Spark配置如下。
spark.ranger.plugin.enabled true
spark.emr.serverless.user.defined.jars /opt/ranger/ranger-spark.jar
ranger.plugin.spark.policy.rest.url http://master-1-1.c-xxxx.cn-hangzhou.emr.aliyuncs.com:6080
spark.files oss://<bucket_name>/<path>/kyuubi.keytab
ranger.plugin.spark.policy.download.loginKeytab true
ranger.plugin.spark.policy.download.keytab /opt/spark/work-dir/kyuubi.keytab
ranger.plugin.spark.policy.download.principal kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM配置項 | 說明 |
spark.files | 該配置會下載指定檔案至 |
ranger.plugin.spark.policy.download.loginKeytab | 固定值。 |
ranger.plugin.spark.policy.download.keytab | 任意生效的keytab檔案。 |
ranger.plugin.spark.policy.download.principal | keytab中儲存的principal,使用該principal下載Ranger policy,避免請求認證失敗。 |