使用ApacheDS对Presto用户进行认证

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: Presto可以对接LDAP,实现用户密码认证。只需要Coordinator节点对接LDAP即可。主要步骤如下: 1.配置ApacheDS,启用LDAPS 2. 在ApacheDS中创建用户信息 3. 配置Presto Coordinator,重启生效 4. 验证配置
Presto可以对接LDAP,实现用户密码认证。只需要Coordinator节点对接LDAP即可。主要步骤如下:
  1. 配置ApacheDS,启用LDAPS
  2. 在ApacheDS中创建用户信息
  3. 配置Presto Coordinator,重启生效
  4. 验证配置
下面详细介绍相关步骤。

启用LDAPs

  1. 创建ApacheDS服务端使用的keystore, 此处密码全部使用'123456':
    ## 创建keystore
    > cd /var/lib/apacheds-2.0.0-M24/default/conf/
    > keytool -genkeypair -alias apacheds -keyalg RSA -validity 7 -keystore ads.keystore
    
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
      [Unknown]:  apacheds
    What is the name of your organizational unit?
      [Unknown]:  apacheds
    What is the name of your organization?
      [Unknown]:  apacheds
    What is the name of your City or Locality?
      [Unknown]:  apacheds
    What is the name of your State or Province?
      [Unknown]:  apacheds
    What is the two-letter country code for this unit?
      [Unknown]:  CN
    Is CN=apacheds, OU=apacheds, O=apacheds, L=apacheds, ST=apacheds, C=CN correct?
      [no]:  yes
    
    Enter key password for <apacheds>
    	(RETURN if same as keystore password):
    Re-enter new password:
    
    Warning:
    The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore ads.keystore -destkeystore ads.keystore -deststoretype pkcs12".
    
    ## 修改文件用户,否则ApacheDS没有权限读取
    > chown apacheds:apacheds ./ads.keystore
    
    ## 导出证书。
    ## 需要输入密码,密码为上一步设置的值,这里为:123456
    > keytool -export -alias apacheds -keystore ads.keystore -rfc -file apacheds.cer
    Enter keystore password:
    Certificate stored in file <apacheds.cer>
    
    Warning:
    The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore ads.keystore -destkeystore ads.keystore -deststoretype pkcs12".
    
    ## 将证书导入系统证书库,实现自认证
    > keytool -import -file apacheds.cer -alias apacheds -keystore /usr/lib/jvm/java-1.8.0/jre/lib/security/cacerts
    
    
  2. 修改配置,启用LDAPs
    打开ApacheDS Studio,链接到集群上到ApacheDS服务:
    • DN设置为:uid=admin,ou=system
    • 密码可以从EMR控制台中获取
    7e17b75198906a501a16cd41fab505b471a63a8e8db6c8545f6279d658d72d36136e6f8fd4dc5ea2

    链接后,打开配置页,启用LDAPs,将第一步创建的keystore设置到相关配置中,保存(ctrl + s)。
    4a463c273eb06e8f8cd94fe5826749909332975b

  3. 重启ApacheDS服务
    登入集群,执行如下命令重启ApacheDS,到此,LDAPs启动, 服务端口是10636。
    ApacheDS Studio有bug,在连接属性页测试LDAPs服务连接时会报握手失败,主要是内部默认的超时时间太短导致的,不会影响实际使用。
    > service apacheds-2.0.0-M24-default restart
    

创建用户信息

本用例在DN: dc=hadoop,dc=apache,dc=org下创建相关用户。
  1. 创建dc=hadoop,dc=apache,dc=org分区
    打开配置页,作如下配置,ctrl+s保存。重启ApacheDS服务生效。
    3bbe703c8df02312db9df85dfaa3a9ff379be220
  2. 创建用户
    登入集群,创建如下文件:/tmp/users.ldif
    # Entry for a sample people container
    # Please replace with site specific values
    dn: ou=people,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:organizationalUnit
    ou: people
    
    # Entry for a sample end user
    # Please replace with site specific values
    dn: uid=guest,ou=people,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:person
    objectclass:organizationalPerson
    objectclass:inetOrgPerson
    cn: Guest
    sn: User
    uid: guest
    userPassword:guest-password
    
    # entry for sample user admin
    dn: uid=admin,ou=people,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:person
    objectclass:organizationalPerson
    objectclass:inetOrgPerson
    cn: Admin
    sn: Admin
    uid: admin
    userPassword:admin-password
    
    # entry for sample user sam
    dn: uid=sam,ou=people,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:person
    objectclass:organizationalPerson
    objectclass:inetOrgPerson
    cn: sam
    sn: sam
    uid: sam
    userPassword:sam-password
    
    # entry for sample user tom
    dn: uid=tom,ou=people,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:person
    objectclass:organizationalPerson
    objectclass:inetOrgPerson
    cn: tom
    sn: tom
    uid: tom
    userPassword:tom-password
    
    # create FIRST Level groups branch
    dn: ou=groups,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass:organizationalUnit
    ou: groups
    description: generic groups branch
    
    # create the analyst group under groups
    dn: cn=analyst,ou=groups,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass: groupofnames
    cn: analyst
    description:analyst  group
    member: uid=sam,ou=people,dc=hadoop,dc=apache,dc=org
    member: uid=tom,ou=people,dc=hadoop,dc=apache,dc=org
    
    
    # create the scientist group under groups
    dn: cn=scientist,ou=groups,dc=hadoop,dc=apache,dc=org
    objectclass:top
    objectclass: groupofnames
    cn: scientist
    description: scientist group
    member: uid=sam,ou=people,dc=hadoop,dc=apache,dc=or
    
    执行如下命令,导入用户:
    > ldapmodify -x -h localhost -p 10389 -D "uid=admin,ou=system" -w {密码} -a -f /tmp/users.ldif
    
    执行完成后,可以在ApacheDS Studio上看到相关到用户,如下所示:
    3e12b259a0068318e96eed92eafb54bdb34b57ca

配置Presto

主要分两部分:
  1. 开启Coordinator Https
    1. 创建presto coordinator使用的keystore
      ## 使用EMR自带的脚本生成keystore
      ## keystore地址: /etc/ecm/presto-conf/keystore
      ## keystore密码: ******
      > expect /var/lib/ecm-agent/cache/ecm/service/PRESTO/0.208.0.1.2/package/files/tools/gen-keystore.exp
      
    2. 配置presto coordinator配置
      编辑/etc/ecm/presto-conf/config.properties, 加入如下内容:
      http-server.https.enabled=true
      http-server.https.port=7778
      
      http-server.https.keystore.path=/etc/ecm/presto-conf/keystore
      http-server.https.keystore.key=******
      
  2. 配置认证模式,接入ApacheDS
    1. 编辑/etc/ecm/presto-conf/config.properties, 加入如下内容:
      http-server.authentication.type=PASSWORD
      
    2. 编辑jvm.config, 加入如下内容:
      -Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0/jre/lib/security/cacerts
      -Djavax.net.ssl.trustStorePassword=changeit
      
    3. 创建password-authenticator.properties,加入如下内容:
      password-authenticator.name=ldap
      ldap.url=ldaps://emr-header-1.cluster-84423:10636
      ldap.user-bind-pattern=uid=${USER},ou=people,dc=hadoop,dc=apache,dc=org
      
    4. 创建jndi.properties, 加入如下内容
      java.naming.security.principal=uid=admin,ou=system
      java.naming.security.credentials={密码}
      java.naming.security.authentication=simple
      
    5. 将jndi.properties打包到jar包中,复制到presto库文件目录中
      > jar -cvf jndi-properties.jar jndi.properties
      > cp ./jndi-properties.jar /etc/ecm/presto-current/lib/
      
    • 下列3个参数用于登入LDAP服务。然而,在presto上没地方配这几个参数。分析源码可以线,将这几个参数夹到jvm参数里也没不会生效(会被过滤掉,实际也没用):
    java.naming.security.principal=uid=admin,ou=system
    java.naming.security.credentials={LDAP 密码}
    java.naming.security.authentication=simple
    • 进一步分析代码,发现JNDI库会用classload加载jndi.properties这个资源文件,因此可以将这几个参数放到jndi.properties这个文件里;
    • presto的launcher只会把jar文件加到classpath里,所以还需把这个jndi.properties打成jar包,复制到lib目录中。
  3. 重启presto,自此完成所有配置

验证配置

使用presto cli验证配置是否生效。
## 使用用户sam,输入正确的密码
> presto  --server https://emr-header-1:7778  --keystore-path /etc/ecm/presto-conf/keystore --keystore-password ****** --catalog hive --schema default --user sam --password
Password: <输入了正确的密码>
presto:default> show schemas;
              Schema
----------------------------------
 tpcds_bin_partitioned_orc_5
 tpcds_oss_bin_partitioned_orc_10
 tpcds_oss_text_10
 tpcds_text_5
 tst
(5 rows)

Query 20181115_030713_00002_kp5ih, FINISHED, 3 nodes
Splits: 36 total, 36 done (100.00%)
0:00 [20 rows, 331B] [41 rows/s, 694B/s]

## 使用用户sam,输入错误的密码
> presto  --server https://emr-header-1:7778  --keystore-path /etc/ecm/presto-conf/keystore --keystore-password ****** --catalog hive --schema default --user sam --password
Password: <输入了错误的密码>
presto:default> show schemas;
Error running command: Authentication failed: Access Denied: Invalid credentials


相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
目录
相关文章
|
SQL 分布式计算 Java
Hive教程(07)- Hive自定义用户名密码验证(已开源)
Hive教程(07)- Hive自定义用户名密码验证(已开源)
318 0
|
SQL 分布式计算 资源调度
在CDH7.1.1上为Ranger集成OpenLDAP认证
在CDH7.1.1上为Ranger集成OpenLDAP认证
248 0
|
SQL 安全 Java
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何使用Flink SQL连接带有Kerberos认证的Hive
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11月前
|
消息中间件 分布式计算 资源调度
深度解读flink kerberos认证(含流程图及源码)
深度解读flink kerberos认证(含流程图及源码)
136 0
|
数据库 数据安全/隐私保护
阿里云E-MapReduce集群-开源Ldap密码不安全问题解决方案
社区开源Ldap密码不安全问题解决方案
|
分布式计算 Hadoop 大数据
Hadoop生态系统中的安全性与权限管理:Kerberos和Apache Ranger的应用
Hadoop生态系统中的安全性与权限管理:Kerberos和Apache Ranger的应用
|
SQL JSON 分布式计算
提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路
在企业级应用中,数据的安全性和隐私保护是极其重要的,为了实现Spark SQL 对数据的精细化管理及提高数据的安全性和可控性,数栈基于 Apache Ranger 实现了 Spark SQL 对数据处理的权限控制,本文将重点描述数栈如何基于 Ranger 赋予了 Spark SQL 在权限管控方面,更强的管控力度、更丰富的能力。
246 0
|
SQL 分布式计算 运维
在Dataphin中怎么配置Hadoop数据源的kerberos信息
目前Dataphin数据集成或数据服务支持Hadoop生态四种数据源类型:Hive,HDFS,Hbase,Impala。Kerberos认证是Hadoop生态使用较多一种安全认证协议,本文将说明如何在Dataphin中配置上述数据源的kerberos信息。
404 0
在Dataphin中怎么配置Hadoop数据源的kerberos信息
|
消息中间件 SQL 分布式计算
EMR集群安全认证和授权管理
介绍EMR高安全集群如何使用Kerberos和Apache Ranger进行鉴权和访问授权管理
EMR集群安全认证和授权管理