本文旨在闡述如何為EMR Serverless Spark的Kyuubi Gateway配置基於Token的身份認證。該方案通過與RAM使用者綁定的Token,實現了對資料湖構建(DLF)中Paimon Catalog資料的精細化存取控制。最終效果為,不同用戶端可通過各自的身份憑證訪問同一Kyuubi網關,但僅限於查詢其被授權的資料。
業務情境
在企業級資料分析平台中,多個使用者或應用需要通過統一的SQL網關(如Kyuubi Gateway)訪問資料。為保障資料安全,必須隔離不同身份的訪問,確保每個使用者只能訪問其許可權範圍內的資料。例如,分析師A只能查詢業務報表,而資料工程師B可以訪問底層的未經處理資料集。此方案解決多租戶環境下的資料許可權隔離問題,實現端到端的身份認證與許可權管控。
實施步驟
步驟一:準備環境與RAM使用者權限
準備基礎資源。
已建立工作空間,詳情請參見管理工作空間。
已在上述工作空間中建立並啟動一個Kyuubi Gateway,詳情請參見管理Kyuubi Gateway。
已在DLF中建立資料目錄,並準備相應資料庫和表。
配置RAM使用者及許可權。 準備一個RAM使用者,並為其授予必要的許可權。
EMR Serverless Spark許可權:為RAM使用者授予訪問EMR Serverless Spark的基本操作許可權,詳情請參見RAM使用者授權。
工作空間許可權:為RAM使用者加入工作空間並按照職能為該使用者指派空間角色,詳情請參見系統管理使用者和角色。
步驟二:在DLF中為RAM使用者授予表許可權
在DLF中為RAM使用者授予對特定表的存取權限。為保證Kyuubi Gateway能夠成功初始化Spark會話,還必須為該RAM使用者授予對DLF中default資料庫的Describe許可權。
登入。
導航至目標Catalog下的資料庫和表。
選中需要授權的表,進入許可權頁簽。
單擊授權:
使用者/角色:選擇RAM 使用者/RAM 角色。
選擇授權對象:選擇目標RAM使用者。
許可權:選擇相應的許可權。
單擊確定,授權完成。
說明EMR Serverless Spark預設啟用對DLF中繼資料和資料的緩衝功能。如果對某張表進行重新授權,預設情況下需要等待10分鐘才會生效。
若希望修改許可權後立即生效,可以在Kyuubi Gateway中的Spark配置中添加
spark.sql.catalog.lakehouse.cache-enabled false配置。
步驟三:為RAM使用者產生Kyuubi Token。
在Kyuubi Gateway頁面,單擊目標Gateway操作列的Token管理。
單擊建立Token。在對話方塊中,配置以下資訊,單擊確定。
參數
說明
名稱
建立Token的名稱。
到期時間
設定該Token的到期時間。設定的天數應大於或等於1。預設情況下為開啟狀態,365天后到期。
指派至
在下拉框中,選擇目標RAM使用者。
複製Token資訊。
重要Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。
步驟四:使用Beeline串連並驗證許可權
構建JDBC串連命令。
beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<UserName或RoleName>;httpPath=cliservice/token/<Token>"參數說明:
參數
說明
<endpoint>Kyuubi Gateway的Endpoint。
<port>訪問連接埠。外網Endpoint對應連接埠為
443,內網Endpoint對應連接埠為80。<UserName或RoleName>RAM使用者或者RAM角色。支援簡寫或全稱,例如:
RAM使用者:
agent或agent@xxxx05398154xxxx.onaliyun.comRAM角色:
AliyunServiceRoleForDataworksEngine
<Token>在步驟二中為該RAM使用者產生的Token。

驗證許可權控制效果。
查詢已授權的表:
SELECT * FROM <database_name>.<authorized_table_name> LIMIT 10;成功返回查詢資料。

查詢未授權的表:
SELECT * FROM <database_name>.<unauthorized_table_name> LIMIT 10;查詢失敗,並收到許可權相關的錯誤提示,例如
emr_test doesn't have privilege SELECT on TABLE。
常見問題
Q1: 授權後查詢未授權表仍能返回結果,是否許可權未生效?
可能原因如下:
DLF中繼資料快取:Spark 引擎內部緩衝了表結構資訊,導致鑒權繞過。
解決方案:在 Spark 配置中添加spark.sql.catalog.lakehouse.cache-enabled false,禁用中繼資料快取。許可權延遲:極少數情況下 DLF 許可權同步存在短暫延遲(通常不超過 10 秒)。
建議:等待片刻後重試,或通過 DLF 控制台確認許可權已正確綁定。
Q2: Token 建立後無法查看,丟失了怎麼辦?
Token 明文僅在建立成功後的彈窗中顯示一次,系統不儲存原始值。若 Token 丟失或泄露,應立即採取以下措施:
在“Token管理”頁面選擇對應條目,點擊 重設 Token。
舊 Token 將被自動失效,產生新的憑證。
使用新 Token 更新所有用戶端配置。
Q3: 為什麼串連 Kyuubi Gateway 時必須為 RAM 使用者授予 default 資料庫的 Describe 許可權?
Kyuubi Gateway 在建立 Spark 會話時,預設嘗試載入 default 資料庫作為初始上下文。若當前身份無權訪問該資料庫,會話初始化將失敗並中斷串連。即使業務表位於其他資料庫,此檢查仍不可跳過。因此,所有需串連網關的 RAM 使用者都必須預先獲得對 default 資料庫的 DescribeDatabase 許可權。
Q4:如何在DataWorks中通過Kyuubi Token實現EMR Serverless對DLF資料的許可權管控?
在使用DataWorks Serverless Kyuubi節點提交任務時,DataWorks將自動在JDBC串連中傳入計算資源中設定的預設訪問身份。關於在DataWorks中綁定Serverless Spark計算資源與Kyuubi的配置操作,請參見綁定EMR Serverless Spark計算資源。有關Serverless Kyuubi節點的使用詳情,請參見Serverless Kyuubi節點。
附錄:身份代理與許可權執行流程
本方案的核心是利用Kyuubi Gateway的令牌(Token)作為身份憑證,將訪問請求代理為Token所有者(RAM使用者)的身份,從而把資料湖構建(DLF)的許可權體系整合到EMR Serverless Spark的查詢流程中。
工作流程說明如下:
令牌產生:為指定的RAM使用者在Kyuubi Gateway中產生一個有時效性的令牌。此令牌與該RAM使用者的身份唯一綁定。
用戶端認證:用戶端(例如Beeline)在構建JDBC串連時,攜帶此Token及對應的RAM使用者名稱,向Kyuubi Gateway發起串連請求。
身份代理:Kyuubi Gateway驗證Token的有效性。在Spark SQL查詢中,EMR Serverless Spark引擎將代理(Impersonate)該RAM使用者的身份。
DLF鑒權:當Spark引擎訪問DLF中的中繼資料或資料時,會以代理的RAM使用者身份向DLF發起請求。
許可權執行:DLF根據為該RAM使用者配置的權限原則,對請求進行鑒權並返回結果。