连接到 impala 和 hbase 的 Kerberos 错误

Kerberos error connecting to impala and hbase

我们正在开发一个与 hadoop 组件(如 HDFS、HBase 和 Impala 交互的 Web 应用程序。 集群是 Kerberized 的,我们正在使用 JAAS 配置进行身份验证。 我们正在 VM 参数中配置 JAAS,如下所示

-Djava.security.auth.login.config=/user/gss-jaas.conf
-Djava.security.krb5.conf=/user/krb5.ini
-Djavax.security.auth.useSubjectCredsOnly=false 

我们的 JAAS 配置如下

com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy.keytab"
  principal="dummy@SOME.REALM"
  debug=false;
};

连接hbase和hdfs时正常。但是在连接 Impala 时,我们遇到了问题。 当我们将 com.sun.security.jgss.initiate 更改为 Client 时,我们可以连接 Impala 但是我们不想在 Jaas 配置之间更改或切换。

有什么方法可以让所有服务使用相同的 JAAS 配置文件吗?我们不想使用 System.setProperties 来执行此操作。并且在 JAAS 配置之间切换时,我们也会遇到异常。所以使用相同的配置文件会更好。

有什么帮助吗?

您不必切换。两者都用!

您是否想知道为什么有两个强制性 ; -- 一个在最后一个参数之后,一个在大括号之后?那是因为你可以在节内定义多个机制(从第一个尝试到最后一个),并且在同一节中多个节(具有不同的名称)配置文件。

查看 Kafka 文档,例如,他们如何在同一文件中为代理和客户端应用程序设置 JAAS 配置:http://docs.confluent.io/current/kafka/sasl.html

如果您对多种机制感到好奇,请查看 Java 文档 (但要小心,调整和调试这些东西是一场噩梦...)https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html

仅以 Samson Scharfrichter 为例,

我在 mongodb 个连接上遇到了同样的问题。

我们可以为您的用例做到这一点,

com.sun.security.jgss.initiate {
  // first connection details
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy.keytab"
  principal="dummy@SOME.REALM"
  debug=false;

  // second connection details
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy2.keytab"
  principal="dummy2@SOME.REALM"
  debug=false;
};

如果您想混合使用多种不同的服务,

// First component details HBASE / IMPALA / MongoDb with two diff kerberos connection details
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy.keytab"
  principal="dummy@SOME.REALM"
  debug=false;

  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy2.keytab"
  principal="dummy2@SOME.REALM"
  debug=false;
};

// Kafka with two diff kerberos connection details
SimpleClient {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy.keytab"
  principal="dummy@SOME.REALM"
  debug=false;

  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:C:/blah/blah/dummy2.keytab"
  principal="dummy2@SOME.REALM"
  debug=false;
};