为Spark批任务配置并启用Ranger鉴权

Apache Ranger提供了集中式的权限管理框架。通过与Spark结合使用的Ranger Plugin,可以对Spark SQL访问数据库、表和列等进行细粒度的权限控制,从而增强数据访问的安全性。Serverless Spark批任务支持配置Ranger Plugin来启用数据访问的权限控制。

使用限制

Serverless Spark以下引擎版本支持本文操作:

  • esr-4.x:esr-4.3.0及之后版本。

  • esr-3.x:esr-3.3.0及之后版本。

  • esr-2.x:esr-2.7.0及之后版本。

操作流程

步骤一:网络准备

在开始配置之前,必须先设置好网络,确保Serverless Spark可以与您的虚拟私有云(VPC)之间网络互通,使得Ranger Plugin能够顺利连接到您的Ranger Admin服务并获取权限信息。具体操作,请参见EMR Serverless Spark与其他VPC间网络互通

步骤二:配置Ranger Plugin

对于希望开启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://<ranger_admin_ip>:<ranger_admin_port>

涉及参数如下所示。

参数

说明

spark.ranger.plugin.enabled

设置为true表示开启Ranger鉴权。

spark.emr.serverless.user.defined.jars

自定义JAR包路径。

配置为/opt/ranger/ranger-spark.jar,表示使用Serverless Spark中内置的Ranger Plugin。

ranger.plugin.spark.policy.rest.url

Ranger Admin服务的地址。格式为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。

方式二:通过spark-submit等工具提交任务

通过spark-submit工具提交任务时,如果需要开启Ranger鉴权功能并配置相关参数,则需要在命令行中显式指定以下参数。

该方式相比于方式一,需要额外配置网络连接名称参数spark.emr.serverless.network.service.name。有关更多参数的含义,请参见Spark Conf自定义参数列表

spark.ranger.plugin.enabled                true
spark.emr.serverless.user.defined.jars     /opt/ranger/ranger-spark.jar
ranger.plugin.spark.policy.rest.url        http://<ranger_admin_ip>:<ranger_admin_port>
spark.emr.serverless.network.service.name  <network_service_name>

步骤三:(可选)配置Ranger Audit

Ranger支持配置Audit的存储方式,例如Solr、HDFS等。Serverless Spark默认未开启Ranger Audit功能,若您有对应需求可以自行在Spark配置中增加Ranger Audit相关参数。

例如,配置连接EMRSolr可以在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 AuditAccess标签页查看用户访问的审计信息。访问Ranger UI详情,请参见通过控制台访问开源组件Web界面

说明

仅当审计存储方式为Solr时,您才能在Ranger UI中查看审计信息。如果审计存储方式是HDFS或其他不支持直接通过Ranger UI查看的方式,则无法在Ranger UI中访问这些审计信息。

image

步骤四:配置认证身份

在使用Serverless Spark批任务环境中,支持Kerberos认证和proxy-user认证两种用户身份认证方式,以便与Apache Ranger集成进行权限管理和鉴权。

  • Kerberos认证:基于Kerberos协议的身份认证,适用于高安全性环境。

  • proxy-user认证:通过代理用户的方式指定身份,适用于简单场景或特定需求。

方式一:Kerberos认证

工作空间需开启Kerberos身份认证,详情请参见开启Kerberos身份认证。启用Kerberos认证后,批任务默认使用Kerberos身份进行鉴权。

默认情况下,Kerberos环境下的Ranger Admin不允许下载策略文件(policy)。如果需要支持此功能:

  • 如果您在EMR on ECS中的集群版本为EMR-5.19.0及以上,或EMR-3.53.0及以上,可以在Ranger UI页面,通过新增配置emr-hive服务policy.download.allowed=true来允许所有用户下载策略。

    image

  • 如果EMR集群低于上述版本,则需要提交工单联系Serverless Spark团队提供升级脚本。

方式二:proxy-user认证

可通过添加配置spark.proxy.user=<user_name>指定身份。如果使用spark-submit工具提交任务,也可以通过--proxy-user参数指定身份,详情可参见通过spark-submit提交任务

说明

通过proxy-user方式提交任务时,用户需自行在平台上实现身份认证,以避免发生越权行为。

步骤五:鉴权测试

在提交SQL类型批任务时,如果访问没有权限的数据库、表或其他资源,系统会返回权限不足的错误提示。

image

说明
  • 在进行权限测试时,请特别注意Ranger默认添加的一些权限策略,例如,所有用户均可切换数据库、创建数据库,以及数据库和表的拥有者对其资源享有所有权限等。建议由用户A创建相关资源(如数据库、表),随后使用用户B进行权限验证。如果仅使用同一用户进行测试,可能会由于拥有者权限策略的影响,而错误地认为某些权限设置未生效。

  • 如果Ranger Admin服务的配置存在错误,可能会导致SQL虽执行成功且不报权限错误,但实际上并未生效。