全部產品
Search
文件中心

E-MapReduce:為Spark Thrift Server配置並啟用Ranger鑒權

更新時間:Apr 19, 2025

Apache Ranger提供了集中式的許可權管理架構。通過與Spark結合使用的Ranger Plugin,可以對Spark SQL訪問資料庫、表和列等進行細粒度的許可權控制,從而增強資料訪問的安全性。Spark Thrift Server會話支援配置Ranger Plugin來啟用資料訪問的許可權控制。

使用限制

僅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.userxasecure.audit.destination.solr.password:若Solr服務開啟了Basic認證,需要填寫對應使用者名稱和密碼資訊。

    若串連的是EMR on ECS中的Ranger,則可以在Ranger-plugin服務的ranger-spark-audit.xml設定檔中尋找xasecure.audit.destination.solr.urlsxasecure.audit.destination.solr.userxasecure.audit.destination.solr.password的配置。

    image

配置成功後,若您在EMR Serverless Spark上提交了任務,則可以訪問Ranger UI,並在Ranger Audit的Access標籤頁查看使用者訪問的審計資訊。訪問Ranger UI詳情,請參見通過控制台訪問開源組件Web介面

說明

僅當審計儲存方式為Solr時,您才能在Ranger UI中查看審計資訊。如果審計儲存方式是HDFS或其他不支援直接通過Ranger UI查看的方式,則無法在Ranger UI中訪問這些審計資訊。

image

步驟四:串連測試

使用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雖執行成功且不報許可權錯誤,但實際上並未生效。