使用限制
僅Serverless Spark以下引擎版本支援本文操作:
esr-4.x:esr-4.2.0及之後版本。
esr-3.x:esr-3.0.1及之後版本。
esr-2.x:esr-2.4.1及之後版本。
注意事項
Ranger主要負責鑒權服務,而使用者身分識別驗證則需藉助如LDAP等認證服務來完成,詳情請參見為Spark Thrift Server配置並啟用LDAP認證。
前提條件
已建立Spark Thrift Server會話,具體請參見管理Spark Thrift Server會話。
操作流程
步驟一:網路準備
在開始配置之前,必須先設定好網路,確保Serverless Spark可以與您的虛擬私人雲端(VPC)之間網路互連,使得Ranger Plugin能夠順利串連到您的Ranger Admin服務並擷取許可權資訊。具體操作,請參見EMR Serverless Spark與其他VPC間網路互連。
步驟二:配置Ranger Plugin
對於希望開啟Ranger鑒權功能的Spark Thrift Server會話,需首先停止該會話。在網路連接下拉式清單中選擇已建立的串連名稱,在Spark配置中添加以下配置項。編輯完成後,請務必重新啟動會話,以確保配置更改生效。
方式一:使用內建的Ranger Plugin
spark.ranger.plugin.enabled true
spark.jars /opt/ranger/ranger-spark.jar
ranger.plugin.spark.policy.rest.url http://<ranger_admin_ip>:<ranger_admin_port>請根據您的實際情況替換<ranger_admin_ip>和<ranger_admin_port>,填寫為Ranger Admin服務的內網IP地址和連接埠。如果您串連的是阿里雲EMR on ECS叢集的Ranger服務,<ranger_admin_ip>可填寫為Master節點的內網IP地址,<ranger_admin_port>為6080。
方式二:使用自訂的Ranger Plugin
若您需要自訂Ranger Plugin,可以將自訂的Ranger Plugin上傳至OSS,並使用以下參數指定自訂JAR和Class名稱。
spark.jars oss://<bucket>/path/to/user-ranger-spark.jar
spark.ranger.plugin.class <class_name>
spark.ranger.plugin.enabled true
ranger.plugin.spark.policy.rest.url http://<ranger_admin_ip>:<ranger_admin_port>請根據您的實際情況替換以下資訊:
spark.jars:填寫自訂JAR的OSS路徑。spark.ranger.plugin.class:填寫自訂Ranger Plugin的Spark擴充類名。<ranger_admin_ip>和<ranger_admin_port>:填寫為Ranger Admin服務的內網IP地址和連接埠。如果您串連的是阿里雲EMR on ECS叢集的Ranger服務,<ranger_admin_ip>可填寫為Master節點的內網IP地址,<ranger_admin_port>為6080。
步驟三:(可選)配置Ranger Audit
Ranger支援配置Audit的儲存方式,例如Solr、HDFS等。Serverless Spark預設未開啟Ranger Audit功能,若您有對應需求可以自行在Spark配置中增加Ranger Audit相關參數。
例如,配置串連EMR的Solr可以在Spark配置中增加以下配置資訊。
xasecure.audit.is.enabled true
xasecure.audit.destination.solr true
xasecure.audit.destination.solr.urls http://<solr_ip>:<solr_port>/solr/ranger_audits
xasecure.audit.destination.solr.user <user>
xasecure.audit.destination.solr.password <password>參數說明如下:
xasecure.audit.is.enabled:是否開啟Ranger Audit。xasecure.audit.destination.solr:是否將Audit儲存到Solr服務當中。xasecure.audit.destination.solr.urls:Solr服務的URL資訊。其中<solr_ip>和<solr_port>需要配置Solr服務的IP地址和連接埠資訊,其他URL資訊應根據實際需求填寫。xasecure.audit.destination.solr.user和xasecure.audit.destination.solr.password:若Solr服務開啟了Basic認證,需要填寫對應使用者名稱和密碼資訊。若串連的是EMR on ECS中的Ranger,則可以在Ranger-plugin服務的ranger-spark-audit.xml設定檔中尋找
xasecure.audit.destination.solr.urls、xasecure.audit.destination.solr.user和xasecure.audit.destination.solr.password的配置。
配置成功後,若您在EMR Serverless Spark上提交了任務,則可以訪問Ranger UI,並在Ranger Audit的Access標籤頁查看使用者訪問的審計資訊。訪問Ranger UI詳情,請參見通過控制台訪問開源組件Web介面。
僅當審計儲存方式為Solr時,您才能在Ranger UI中查看審計資訊。如果審計儲存方式是HDFS或其他不支援直接通過Ranger UI查看的方式,則無法在Ranger UI中訪問這些審計資訊。

步驟四:串連測試
使用Spark Beeline進行串連時,如果訪問沒有許可權的資料庫、表等資源,將會出現許可權失敗的錯誤提示。
0: jdbc:hive2://pre-emr-spark-gateway-cn-hang> create table test(id int);
Error: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.kyuubi.plugin.spark.authz.AccessControlException: Permission denied: user [test] does not have [create] privilege on [database=testdb/table=test]
at org.apache.spark.sql.hive.thriftserver.HiveThriftServerErrors$.runningQueryError(HiveThriftServerErrors.scala:44)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.org$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$execute(SparkExecuteStatementOperation.scala:325)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.$anonfun$run$2(SparkExecuteStatementOperation.scala:230)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties(SparkOperation.scala:79)
at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties$(SparkOperation.scala:63)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.withLocalProperties(SparkExecuteStatementOperation.scala:43)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:230)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:225)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2.run(SparkExecuteStatementOperation.scala:239)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)在進行許可權測試時,請特別注意Ranger預設添加的一些權限原則,例如,所有使用者均可切換資料庫、建立資料庫,以及資料庫和表的擁有者對其資源享有所有許可權等。建議由使用者A建立相關資源(如資料庫、表),隨後使用使用者B進行許可權驗證。如果僅使用同一使用者進行測試,可能會由於擁有者權限原則的影響,而錯誤地認為某些使用權限設定未生效。
如果Ranger Admin服務的配置存在錯誤,可能會導致SQL雖執行成功且不報許可權錯誤,但實際上並未生效。