最新消息:天气越来越冷,记得加一件厚衣裳

Kylin启用LDAP和SSO安全认证

Kylin w3sun 2734浏览 0评论

启用LDAP身份验证

Kylin通过Spring Security框架实现了对企业或生产环境下LDAP认证的支持,启用LDAP之前需要联系LDAP管理员以获取相关信息,如LDAP服务器URL,用户名/密码,搜索模式等。

  • 配置LDAP服务器信息
    如果服务器配置了LDAP安全保护,首先请提供LDAP URL以及用户名/密码。 kylin.properties中的密码需要加密,可以通过运行下面的命令来获取加密后的密码:
cd $KYLIN_HOME/tomcat/webapps/kylin/WEB-INF/lib
java -classpath kylin-server-base-1.6.0.jar:spring-beans-3.2.17.RELEASE.jar:spring-core-3.2.17.RELEASE.jar:commons-codec-1.7.jar org.apache.kylin.rest.security.PasswordPlaceholderConfigurer AES <your_password>

运行后一个大大的error非常刺眼:

[hdfs@hostname apache-kylin-2.0.0-bin]# ls
bin  bi-web  calcite  commit_SHA1  conf  ext  hadoop-conf  hcatalog  lib  logs  meta_backups  pid  sample_cube  spark  tomcat  tool
[hdfs@hostname apache-kylin-2.0.0-bin]# cd tomcat/webapps/kylin/WEB-INF/lib/
[hdfs@hostname lib]# java -classpath kylin-server-base-1.6.0.jar:spring-beans-3.2.17.RELEASE.jar:spring-core-3.2.17.RELEASE.jar:commons-codec-1.7.jar org.apache.kylin.rest.security.PasswordPlaceholderConfigurer AES password321
Error: Could not find or load main class org.apache.kylin.rest.security.PasswordPlaceholderConfigurer

这个实际上是因为官方文档没有更新,使用的还是kylin-server-base-1.6.0.jar,替换为本文正在使用中的kylin-server-base-2.0.0.jar执行成功:

[hdfs@hostname lib]# ls
activation-1.1.1.jar           httpcore-4.2.4.jar               slf4j-api-1.7.21.jar
aggdesigner-algorithm-6.0.jar  jackson-annotations-2.6.0.jar    spring-aop-3.2.17.RELEASE.jar
ant-1.9.6.jar                  jackson-core-2.6.3.jar           spring-beans-3.2.17.RELEASE.jar
ant-launcher-1.9.6.jar         jackson-databind-2.6.3.jar       spring-context-3.2.17.RELEASE.jar
aopalliance-1.0.jar            janino-2.7.6.jar                 spring-context-support-3.2.17.RELEASE.jar
asm-5.1.jar                    java-property-utils-1.9.1.jar    spring-core-3.2.17.RELEASE.jar
aspectjrt-1.8.9.jar            javax.mail-1.5.2.jar             spring-expression-3.2.17.RELEASE.jar
aspectjweaver-1.8.9.jar        jcl-over-slf4j-1.7.21.jar        spring-jdbc-3.2.17.RELEASE.jar
atopcalcite-2.0.0.jar          joda-time-2.2.jar                spring-ldap-core-1.3.1.RELEASE.jar
avatica-1.9.0.jar              kylin-core-common-2.0.0.jar      spring-security-acl-3.1.2.RELEASE.jar
bcprov-jdk15on-1.51.jar        kylin-core-cube-2.0.0.jar        spring-security-config-3.1.2.RELEASE.jar
calcite-core-1.12.0.jar        kylin-core-dictionary-2.0.0.jar  spring-security-core-3.1.2.RELEASE.jar
calcite-linq4j-1.12.0.jar      kylin-core-job-2.0.0.jar         spring-security-ldap-3.1.2.RELEASE.jar
cglib-3.2.4.jar                kylin-core-metadata-2.0.0.jar    spring-security-saml2-core-1.0.2.RELEASE.jar
commons-codec-1.7.jar          kylin-core-storage-2.0.0.jar     spring-security-web-3.1.2.RELEASE.jar
commons-collections-3.2.2.jar  kylin-engine-mr-2.0.0.jar        spring-test-3.2.17.RELEASE.jar
commons-compiler-2.7.6.jar     kylin-engine-spark-2.0.0.jar     spring-tx-3.2.17.RELEASE.jar
commons-dbcp-1.4.jar           kylin-query-2.0.0.jar            spring-web-3.2.17.RELEASE.jar
commons-email-1.4.jar          kylin-server-base-2.0.0.jar      spring-webmvc-3.2.17.RELEASE.jar
commons-httpclient-3.1.jar     kylin-source-hive-2.0.0.jar      super-csv-2.4.0.jar
commons-lang3-3.4.jar          kylin-source-kafka-2.0.0.jar     t-digest-3.1.jar
commons-logging-1.1.3.jar      kylin-storage-hbase-2.0.0.jar    velocity-1.7.jar
commons-pool-1.5.4.jar         kylin-tool-2.0.0.jar             xml-apis-1.4.01.jar
cors-filter-2.5.jar            not-yet-commons-ssl-0.3.9.jar    xmlsec-1.5.7.jar
ehcache-2.10.2.2.21.jar        opensaml-2.6.4.jar               xmltooling-1.4.4.jar
esapi-2.0.1.jar                openws-1.5.4.jar
httpclient-4.2.5.jar           RoaringBitmap-0.6.18.jar
[hdfs@hostname lib]# java -classpath kylin-server-base-2.0.0.jar:spring-beans-3.2.17.RELEASE.jar:spring-core-3.2.17.RELEASE.jar:commons-codec-1.7.jar org.apache.kylin.rest.security.PasswordPlaceholderConfigurer AES "password321"
AES encrypted password is: 
2yeDVJghQdjGLQgibBdi5g==

配置conf/kylin.properties中LDAP选项

ldap.server=ldap://192.168.1.1:389       #根据实际地址配置
ldap.username=w3sun                      #根据实际用户名配置
ldap.password=2yeDVJghQdjGLQgibBdi5g==   #根据上步生成的加密密码配置

其次,为用户提供LDAP预设的搜索模式,以下为一个配置示例:

ldap.user.searchBase=OU=UserAccounts,DC=mycompany,DC=com
ldap.user.searchPattern=(&(cn={0})(memberOf=CN=MYCOMPANY-USERS,DC=mycompany,DC=com))
ldap.user.groupSearchBase=OU=Group,DC=mycompany,DC=com

如果有服务账户也需要进行身份验证(例如,系统内置账户),可以对ldap.service.*属性值进行设置,否则留空即可。

  • 配置管理员组,默认角色

LDAP组映射到Kylin中的管理组,需要将“acl.adminRole”设置为“ROLE_”+ GROUP_NAME。例如在LDAP中,组“KYLIN-ADMIN-GROUP”是管理员列表,配置文件中需要将其设置为:

acl.adminRole=ROLE_KYLIN-ADMIN-GROUP
acl.defaultRole=ROLE_ANALYST,ROLE_MODELER

“acl.defaultRole”是一个授予所有人默认角色的列表,保持默认即可。

  • 启用LDAP

在conf /kylin.properties中设置“kylin.security.profile = ldap”然后重启Kylin服务器。

启用S​​SO认证

从v1.5开始,Kylin通过 SAML提供SSO认证功能。该实现基于Spring Security 的SAML扩展。详情可以参考[kbd]本文[/kbd]来获取整体理解。进行相关配置以前请确保已经成功启用了LDAP认证并实现了用户管理,SSO服务器只能进行身份验证,而Kylin需要搜索LDAP来获取该用户的详细信息。

  • 生成IDP metadata配置文件

联系相关IDP(ID provider),提供以下三类信息以向其索要SSO metadata文件:

1.Partner entity ID, which is an unique ID of your app, e.g,: https://host-name/kylin/saml/metadata

2.App callback endpoint, to which the SAML assertion be posted, it need be: https://host-name/kylin/saml/SSO

3.Kylin server公钥, SSO server 将用它加密消息。

  • 生成JKS keystore

Kylin发送加密消息(使用Kylin的私钥签名)到SSO服务器时需要提供一个密钥库(JKS),以下将介绍生成密钥库生成中一种常用方法:

$ openssl pkcs12 -export -in kylin.crt -inkey kylin.key -out kylin.p12
Enter Export Password: <export_pwd>
Verifying - Enter Export Password: <export_pwd>


$ keytool -importkeystore -srckeystore kylin.p12 -srcstoretype PKCS12 -srcstorepass <export_pwd> -alias 1 -destkeystore samlKeystore.jks -destalias kylin -destkeypass changeit

Enter destination keystore password:  changeit
Re-enter new password: changeit

以上操作会将密钥放在别名为“kylin”的“samlKeystore.jks”秘钥库中。

  • 启用更高强度密码

确保当前环境为处理更高级别的加密密钥配置妥当,除此之外还可能需要下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files,(设置Java的安全策略),并将local_policy.jar和US_export_policy.jar拷贝到 $JAVA_HOME/jre/lib/security目录下。

  • 部署IDP xml文件和keystore密钥库

IDP metadata和keystore文件需要部署在Kylin web应用程序的classpath路径下:$ KYLIN_HOME/tomcat/webapps/kylin/WEB-INF/classes。

1.将IDP文件命名为sso_metadata.xml并复制到Kylin的classpath下;

2.将keystore 密钥库命名为“samlKeystore.jks”并复制到Kylin的classpath下;

3. 如果有使用其他别名或密码情况,请相应更新kylinSecurity.xml中的设置。

<!-- Central storage of cryptographic keys -->
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
    <constructor-arg value="classpath:samlKeystore.jks"/>
    <constructor-arg type="java.lang.String" value="changeit"/>
    <constructor-arg>
        <map>
            <entry key="kylin" value="changeit"/>
        </map>
    </constructor-arg>
    <constructor-arg type="java.lang.String" value="kylin"/>
</bean>

其他配置

将以下属性添加到Kylin Server的conf/kylin.properties配置文件中:

saml.metadata.entityBaseURL=https://host-name/kylin
saml.context.scheme=https
saml.context.serverName=host-name
saml.context.serverPort=443
saml.context.contextPath=/kylin

需要注意的是,Kylin在SAML消息中会用一个“email”属性来代表登录用户,它会截取@之前的名称来搜索、匹配LDAP用户。

  • 启用SSO认证

conf/kylin.properties中设置“kylin.security.profile = saml”并重启Kylin服务器,在URL之后输入“/kylin”或“/ kylin/cubes”时会被重定向到SSO登录页面,授权后才能成功登陆。 此时,LDAP登录方式仍然可用,可以键入“/kylin/login”以原始方式登陆。 Rest API(/ kylin / api / *)不受影响,仍然采用LDAP + basic authentication方式认证。

转载请注明:雪后西塘 » Kylin启用LDAP和SSO安全认证

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址