历史版本24 :数据连接 Kerberos 认证 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1、描述编辑

kerberos认证 是 hadoop 生态的一种通用的认证方式,

  数据库
  Apache Impala注:只能用方式二,不能用方式一
  Hadoop Hive
  Spark
  Transwarp Inceptor(星环)
  Apache Phoenix
  HBase

在 FineBI 连接上面六个数据库时,配置数据连接时均支持 Kerberos 认证,配置该认证的方式有两种:

1)使用数据连接配置界面中的 Kerberos 认证,主要用于 hive、hbase 等驱动的认证连接;

2)配置 jvm 参数进行认证,主要用于按要求填写数据连接配置界面认证成功,创建连接依然抛错的情况,比如 cdh 的 impala 等数据库;

数据连接前的准备工作:

需要下载环境上的配置文件 krb5.conf、XXX.keytab、principal(principal 的格式通常为:用户名/部门@公司,例如:user/bigdata@test.com )文件。

注:其中 XXX.keytab 为密钥表文件,需要在提供 kerberos 服务的应用服务器上对应位置找到该文件。在不同服务器上该 keytab 的文件名称可能不一样,因此在这里用XXX代替。

2. Kerberos认证方法编辑

2.1 方法一:使用数据连接配置界面

这里以 Spark 为例。

配置步骤:

  1. 将 krb5.conf 和 XXX.keytab 放到相同目录下,例如放到%FineBI%\webapps\webroot\WEB-INF\resources目录下。

    注:当有多个 Kerberos 认证的时候,keytab 文件不要都放在 reources 目录下,会冲突。可以在 resources 下新建各自的文件夹放置对应的认证文件。

  2. 配置本地 hosts 文件,例如路径为C:\Windows\System32\drivers\etc\hosts,配置远端的映射,如下图所示:

    1574066211785589.png

  3.  选择数据连接配置面板的认证方式为「Kerberos 认证」,按要求填写客户端 principal 和 keytab 密钥路径,keytab 的名称根据实际情况修改。其他按 配置数据连接 中的说明进行数据连接。

    注:URL 后面需要加上 principal。

    选项
    URL
     jdbc:hive2://192.168.5.127:10000/default;principal=hive/quickstart.cloudera@QUICKSTART.CLOUDERA
    客户端 principal 
    hive/quickstart.cloudera@QUICKSTART.CLOUDERA
    keytab 密钥路径
    %FineBI%\webapps\webroot\WEB-INF\resources\hive.keytab

    如下图所示:

    1574075694248312.png

    注:此处需确保 krb5.conf 和 XXX.keytab 放在相同目录下,目录不需要一定是 \webapps\webroot\WEB-INF\resources,只需相同目录即可。

  4. 点击测试连接,连接成功如下图所示:

    1574064965717624.png

2.2 方法二:配置 JVM 参数

这里以 Apache Impala 为例。

配置步骤:

  1. 下载环境上的配置文件 krb5.conf 和 impala.keytab 放到%FineBI%\webapps\webroot\WEB-INF\resources目录下;

    注:当有多个 Kerberos 认证的时候,keytab 文件不要都放在 reources 目录下,会冲突。可以在 resources 下新建各自的文件夹放置对应的认证文件。

  2. 准备 krb5.ini 文件,内容如下所示:

    Client {
        com.sun.security.auth.module.Krb5LoginModule required doNotPrompt = true 
        useKeyTab = true 
        keyTab = "%FineBI%\webapps\webroot\WEB-INF\resources\XXX.keytab"
        principal = "dummy@SOME.REALM"
        debug = true;
    };

    将该 krb5.ini 文件放到%FineBI%\webapps\webroot\WEB-INF\resources目录下。

  3. 在 FineBI 安装目录 bin 下找到 finebi.vmoptions 文件,编辑该文件,增加下面 2 个 jvm 参数(两个参数的值为 krb5.conf 和krb5.ini 文件的绝对路径),如下所示:

    -Djava.security.krb5.conf=%FineBI%\webapps\webroot\WEB-INF\resources\krb5.conf
    -Djava.security.auth.login.config=%FineBI%\webapps\webroot\WEB-INF\resources\krb5.ini

    编辑完成的 FineBI.vmoptions 文件示例如下:

    -Djava.security.krb5.conf=%FineBI%\webapps\webroot\WEB-INF\resources\krb5.conf 
    -Djava.security.auth.login.config=%FineBI%\webapps\webroot\WEB-INF\resources\krb5.ini 
    -Xmx4018m 
    -Dfile.encoding=UTF-8 
    -Djava.io.tmpdir=.\temp

    注:此处若使用的不是单机版,而是 Spider 分布式引擎,则需要在该文件中再添加一个参数:-Dzookeeper.sasl.client=false,因为zookeeper 默认认证模式会受到 kerberos 配置的影响而导致BI启动不了。

    -Dzookeeper.sasl.client=false
  4. 此时同样也需要配置远端的映射,与方法一一致。

  5. 选择数据连接配置面板的认证方式为「Kerberos 认证」,按要求填写客户端 principal 和 keytab 密钥路径,keytab 的名称根据实际情况修改。其他按 配置数据连接 中的说明进行数据连接,注意 URL 后面需要加上 AuthMech、KrbHostFQDN、KrbServiceName 三个参数,如下所示:

    选项
    含义
    URL jdbc:impala://192.168.5.127:21050/default;AuthMech=1;KrbHostFQDN=quickstart.cloudera;KrbServiceName=impala
     AuthMech=1 表示使用 kerberos 认证;
    KrbHostFQDN 为 impala server,为 krb5.conf 文件中 admin_server 的值;
    KrbServiceName为对应的服务名,详细解释 点击
      客户端 principal
    impala/quickstart.cloudera@QUICKSTART.CLOUDERA

    keytab 密钥路径
     %FineBI%\webapps\webroot\WEB-INF\resources\impala.keytab
      存放 impala.keytab 的路径

    1574074668886319.png

  6. 点击测试连接成功即可。如下图所示:

    1574075131333712.png

    注:若为部署在 Tomcat 下的工程,则配置步骤与上述一致,对应地址修改为 Tomcat 下的对应地址。比如:

    步骤1:准备 krb5.ini 文件中 ketTab 路径为%Tomcat%\webapps\webroot\WEB-INF\resources\xxx.keytab

    步骤2:在 Tomcat 下为编辑%Tomcat%/bin/catalina.bat(Windows)或者%Tomcat%/bin/catalina.sh(Linux),增加对应的参数和文件绝对路径地址。

    步骤3:数据连接时,keytab 密钥路径也要填写为对应放置文件的位置。 

4、注意事项编辑

  1. FineBI 自带的 zookeeper 包与数据库服务端的 zookeeper 版本需要匹配(华为 HD 平台连接可能会出现此类报错);

  2. principal 名称写错或者没对应上。principal 的格式前面提到了,通常为用户名/部门@公司,例如:user/bigdata@test.com。确认 principal 是否正确的方式是在数据库服务端 shell 执行klist或者kinit -k -t /path/to/keytab name_of_principal测试;

    或者直接通过 beeline、impala-shell 等工具连接一下开启认证的服务,并查看对应的principal信息。

    比如:hive 服务对应 principal 为 hive /bigdata@XXX.COM,而 impala 服务对应的 principal为impala/bigdata@XXX.COM;

  3. 检查 FineBI 服务器所在机器和数据库服务器的系统时间差,通常要求时间差小于5分钟;

  4. 配置 FineBI 服务器所在机器的 host 文件(要保证能通过主机名/域名ping通数据库服务器);

  5. cdh 连接抛错 Unable to obtain Principal Name for authentication 可能要更新一下 jre 的 JCE 扩展包(因为 jdk 默认安装的JCE 不能处理超过 128 位的对称密钥,扩展包安装连接见备注);

    注:JCE安装:https://sourceforge.net/p/skcc/wiki/Install%20JDK8%20and%20JCE%20on%20Windows/通常直接到第4步即可,下载解压得到JCE扩展jar包,然后到jre的指定目录替换文件。

  6. 特殊情况下,如果 Windows 系统下无法连接,可以把 FineBI 测试服务器部署在 Linux 系统上(需保证该服务器能通过相关 shell 工具连上数据库,通过 klist 能看到已缓存的 kgt 信息);

  7. 如果尝试了上面的方法还是连接失败,请与平台数据库管理员确认,相关服务的安全认证配置是否正确,并请联系帆软技术支持并提供相关报错日志(提添加 jvm 安全调试参数,见下面备注),数据平台数据库版本、对应驱动 jar 包、相关连接信息、Java 认证连接测试代码或者能连接认证数据库的 shell 工具等。

    备注:

    jvm 安全调试日志参数:

    -Djava.security.debug=gssloginconfig,configfile,configparser,logincontext

    -Djava.security.krb5.debug=true

  8. FineBI 工程路径不要带有空格(如 tomcat 9),kerberos 认证不支持。