目录
启用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服务器。
启用SSO认证
从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安全认证