全部產品
Search
文件中心

E-MapReduce:通過Kyuubi Token實現EMR Serverless Spark對DLF資料的許可權管控

更新時間:Jan 09, 2026

本文旨在闡述如何為EMR Serverless Spark的Kyuubi Gateway配置基於Token的身份認證。該方案通過與RAM使用者綁定的Token,實現了對資料湖構建(DLF)中Paimon Catalog資料的精細化存取控制。最終效果為,不同用戶端可通過各自的身份憑證訪問同一Kyuubi網關,但僅限於查詢其被授權的資料。

業務情境

在企業級資料分析平台中,多個使用者或應用需要通過統一的SQL網關(如Kyuubi Gateway)訪問資料。為保障資料安全,必須隔離不同身份的訪問,確保每個使用者只能訪問其許可權範圍內的資料。例如,分析師A只能查詢業務報表,而資料工程師B可以訪問底層的未經處理資料集。此方案解決多租戶環境下的資料許可權隔離問題,實現端到端的身份認證與許可權管控。

image

實施步驟

步驟一:準備環境與RAM使用者權限

  1. 準備基礎資源

  2. 配置RAM使用者及許可權。 準備一個RAM使用者,並為其授予必要的許可權。

    • EMR Serverless Spark許可權:為RAM使用者授予訪問EMR Serverless Spark的基本操作許可權,詳情請參見RAM使用者授權

    • 工作空間許可權:為RAM使用者加入工作空間並按照職能為該使用者指派空間角色,詳情請參見系統管理使用者和角色

步驟二:在DLF中為RAM使用者授予表許可權

在DLF中為RAM使用者授予對特定表的存取權限。為保證Kyuubi Gateway能夠成功初始化Spark會話,還必須為該RAM使用者授予對DLF中default資料庫的Describe許可權。

  1. 登入

  2. 導航至目標Catalog下的資料庫和表。

  3. 選中需要授權的表,進入許可權頁簽。

  4. 單擊授權

    1. 使用者/角色:選擇RAM 使用者/RAM 角色

    2. 選擇授權對象:選擇目標RAM使用者。

    3. 許可權:選擇相應的許可權。

  5. 單擊確定,授權完成。

    說明

    EMR Serverless Spark預設啟用對DLF中繼資料和資料的緩衝功能。如果對某張表進行重新授權,預設情況下需要等待10分鐘才會生效。

    若希望修改許可權後立即生效,可以在Kyuubi Gateway中的Spark配置中添加spark.sql.catalog.lakehouse.cache-enabled false配置。

步驟三:為RAM使用者產生Kyuubi Token。

  1. Kyuubi Gateway頁面,單擊目標Gateway操作列的Token管理

  2. 單擊建立Token。在對話方塊中,配置以下資訊,單擊確定

    參數

    說明

    名稱

    建立Token的名稱。

    到期時間

    設定該Token的到期時間。設定的天數應大於或等於1。預設情況下為開啟狀態,365天后到期。

    指派至

    在下拉框中,選擇目標RAM使用者。

  3. 複製Token資訊。

    重要

    Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。

步驟四:使用Beeline串連並驗證許可權

  1. 構建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.com

    • RAM角色:AliyunServiceRoleForDataworksEngine

    <Token>

    在步驟二中為該RAM使用者產生的Token。

    image

  2. 驗證許可權控制效果。

    • 查詢已授權的表

      SELECT * FROM <database_name>.<authorized_table_name> LIMIT 10;

      成功返回查詢資料。image

    • 查詢未授權的表

      SELECT * FROM <database_name>.<unauthorized_table_name> LIMIT 10;

      查詢失敗,並收到許可權相關的錯誤提示,例如 emr_test doesn't have privilege SELECT on TABLEimage

常見問題

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的查詢流程中。

工作流程說明如下:

  1. 令牌產生:為指定的RAM使用者在Kyuubi Gateway中產生一個有時效性的令牌。此令牌與該RAM使用者的身份唯一綁定。

  2. 用戶端認證:用戶端(例如Beeline)在構建JDBC串連時,攜帶此Token及對應的RAM使用者名稱,向Kyuubi Gateway發起串連請求。

  3. 身份代理:Kyuubi Gateway驗證Token的有效性。在Spark SQL查詢中,EMR Serverless Spark引擎將代理(Impersonate)該RAM使用者的身份。

  4. DLF鑒權:當Spark引擎訪問DLF中的中繼資料或資料時,會以代理的RAM使用者身份向DLF發起請求。

  5. 許可權執行:DLF根據為該RAM使用者配置的權限原則,對請求進行鑒權並返回結果。