为Livy Gateway配置并启用LDAP认证

通过启用LDAP认证,可以增强Livy的安全性,确保只有提供正确的用户名和密码后,客户端才能成功连接到Livy Gateway执行相应的操作,有效防止未授权访问敏感数据和功能的风险。

前提条件

  • 已创建Livy GatewayToken,具体请参见管理Livy Gateway

  • 可选:如果您需要使用阿里云EMR on ECS集群的OpenLDAP服务,则需创建选择了OpenLDAP服务的集群并添加了用户,详情请参见创建集群OpenLDAP用户管理

操作流程

步骤一:网络准备

在开始配置之前,必须先设置好网络,确保Serverless Spark可以与您的虚拟私有云(VPC)之间网络互通,使得Livy Gateway能够顺利连接到LDAP服务进行认证。具体操作,请参见EMR Serverless Spark与其他VPC间网络互通

步骤二:配置Livy Gateway

对于希望开启LDAP认证功能的Livy Gateway,需先停止该会话。然后编辑Livy Gateway,在网络连接下拉列表中选择已创建的连接名称,在livy.conf中添加以下配置项。编辑完成后,请务必重新启动Livy Gateway,以确保所做更改生效。

livy.server.auth.type ldap
livy.server.auth.ldap.url ldap://<ldap_url>:<ldap_port>
livy.server.auth.ldap.base-dn <ldap_base_dn>

参数说明如下,其中部分参数请根据您的实际情况替换。

参数

说明

livy.server.auth.type

固定为ldap,表示启用LDAP认证。

livy.server.auth.ldap.url

LDAP服务的连接地址,填写格式为ldap://<ldap_url>:<ldap_port>

如果您连接的是阿里云EMR on ECS集群的OpenLDAP服务,则<ldap_url>填写为Master节点的内网IP地址或域名,<ldap_port>默认为10389,例如 ldap://master-1-1.c-xxxxxxxxxx.cn-hangzhou.emr.aliyuncs.com:10389

livy.server.auth.ldap.base-dn

用于LDAP服务认证的基础DN。

如果您连接的是阿里云EMR on ECS集群的OpenLDAP服务,通常为ou=people,o=emr

更多关于Livy配置文件及其参数的详情信息,请参见Livy配置文件示例

步骤三:连接开启LDAP认证的Livy Gateway

本文提供了以下两种方式来连接启用了LDAP认证的Livy Gateway:

  • Jupyter Notebook的方式适合需要动态调整参数或通过代码自动化操作的场景。该方式使用复杂度略高,需要熟悉Sparkmagic插件的使用。

  • Zeppelin的方式更适合数据分析和可视化场景。该方式使用简单,只需修改配置文件即可。

方式一:使用Jupyter Notebook

基本使用方法请参见通过Jupyter NotebookServerless Spark进行交互

本文以方式二为例,演示如何连接开启LDAP认证的Livy Gateway。

  1. 导入sparkmagic插件。

    %load_ext sparkmagic.magics
  2. 设置默认超时时间。 调整Livy Session的启动超时时间(单位:秒),避免因网络或资源问题导致的连接失败。

    import sparkmagic.utils.configuration as conf
    conf.override("livy_session_startup_timeout_seconds", 1000)
  3. 配置Livy GatewayToken。 开启LDAP认证后,请求中的Authorization字段将被LDAP用户名和密码填充。为确保正常通信,需手动设置Livy Gateway的自定义Token。

    conf.override("custom_headers", {"x-acs-spark-livy-token": "<token>"})
    说明:将<token>替换为实际的Livy Token。
  4. (可选)设置Spark参数。

    根据实际需求配置Spark相关参数(如资源配置、环境变量等)。

  5. 启动Livy Session。 使用以下命令创建并启动一个Livy Session,同时通过LDAP用户名和密码进行身份验证。

    %spark add -s test -l python -u https://<endpoint> -a <ldapusername> -p <ldappassword>

    涉及参数如下:

    • <ldapusername>:替换为您的LDAP用户名。

    • <ldappassword>:替换为您的LDAP密码。

    • <endpoint>:替换为实际的Livy GatewayEndpoint,可以在Livy Gateway页签获取。例如,emr-spark-livy-gateway-cn-hangzhou.data.aliyun.com/api/v1/workspace/w-xxxxxx/livycompute/lc-xxxxxx

方式二:使用Zeppelin

基本使用方法请参见通过Zeppelin Livy Interpreter连接EMR Serverless Spark

Zeppelin的开源Livy Interpreter本身不支持直接配置LDAP的用户名和密码。但可以通过添加自定义的HTTP Header实现LDAP认证。

  1. 生成Base64编码的认证信息。 将LDAP用户名和密码按以下格式拼接为<username>:<password>字符串,然后对该字符串进行Base64编码,生成编码后的字符串(例如:dXNlcm5hbWU6cGFzc3dvc*****)。将该编码结果记为<token>

  2. 配置Livy InterpreterHTTP Headers。 在ZeppelinLivy Interpreter配置中,添加以下自定义Header。

    zeppelin.livy.http.headers = x-acs-spark-livy-token:<token>;Authorization:Basic <token>

    涉及以下参数:

    • <token>:替换为上一步生成的Base64编码字符串。

    • x-acs-spark-livy-token:是用于Livy GatewayToken,确保其值与实际配置一致。

    • Authorization:Basic <token>:用于传递LDAP的认证信息。

  3. 保存并重启Interpreter。 完成配置后,保存更改并重启ZeppelinLivy Interpreter,使配置生效。