Kafka SASL_PLAINTEXT和用于Gerberos的GSSAPI

时间:2018-10-03 10:45:50

标签: apache-kafka kerberos sasl gssapi

我正在尝试使用带有纯文本的SASL和GSSAPI运行单个kafka服务器,但出现以下错误。

  

[2018-10-03 16:08:54,220]错误[Controller id = 0,targetBrokerId = 0]   由于以下原因,连接到节点0的身份验证失败:   (java.security.PrivilegedActionException:   javax.security.sasl.SaslException:GSS启动失败[由引起   GSSException:没有提供有效的凭证])评估时发生   从Kafka经纪人处收到的SASL令牌。 Kafka Client将转到   AUTHENTICATION_FAILED状态。 (org.apache.kafka.clients.NetworkClient)

server.properties中的更改是:

listeners=SASL_PLAINTEXT://kafka.example.com:9095
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
advertised.listeners=SASL_PLAINTEXT://kafka.example.com:9095
sasl.enabled.mechanism=GSSAPI
sasl.kerberos.service.name=HTTP

这是我的Jaas配置:

KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    useTicketCache=true
    storeKey=true
    keyTab="/home/kafka/kafka_server.keytab"
    principal="HTTP/kafka.example.com@UNIX.EXAMPLE.COM";
};

有人领导如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

首先, 使用KeyTab(useKeyTab = true)或使用TicketCache(useTicketCache = true)。请勿一次使用两者。这可能会导致冲突。

如果您有自己的Kerb,请为kafka创建一个原则

sudo /usr/sbin/kadmin.local -q 'addprinc -randkey kafka/{hostname}@{REALM}' sudo /usr/sbin/kadmin.local -q "ktadd -k /etc/security/keytabs/{keytabname}.keytab kafka/{hostname}@{REALM}"

使用

sasl.kerberos.service.name="kafka"

设置JVM参数

export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"

希望这会有所帮助。