fluentd / kafka:SASL身份验证要求配置SSL

时间:2019-04-30 09:11:53

标签: security networking apache-kafka fluentd sasl

我正计划将日志发送到我们的合作弹性搜索集群。

我正在使用td-agent将日志转发到Kafka端点,该端点已连接以配合弹性搜索集群。我已经安装了带有td-agent的fluent-plugin-kafka插件,以将日志发送到连接以配合弹性搜索集群的Kafka端点

插件网址:https://github.com/fluent/fluent-plugin-kafka

记录发送路径如下:

logs --> td-agent+fluent-plugin-kafka --> kafka cluster --> elasticsearch --> kibana

问题是,配置Kafka端点以不支持SSL的方式支持SASL AUTHENTICATION,由于日志仅通过合作网络进行路由,因此我认为不需要SSL支持。

我遇到以下错误:

  2019-04-30 17:46:39 +0900 [error]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.3.3/bin/fluentd:8:in `<top (required)>'
  2019-04-30 17:46:39 +0900 [error]: #0 /opt/td-agent/embedded/bin/fluentd:23:in `load'
  2019-04-30 17:46:39 +0900 [error]: #0 /opt/td-agent/embedded/bin/fluentd:23:in `<main>'
2019-04-30 17:46:39 +0900 [error]: #0 unexpected error error_class=ArgumentError error="SASL authentication requires that SSL is configured"
  2019-04-30 17:46:39 +0900 [error]: #0 suppressed same stacktrace
2019-04-30 17:46:39 +0900 [info]: Worker 0 finished unexpectedly with status 1
^C

我的td-agent配置为:

#
<source>
  @type dummy
  dummy {"hello":"world"}
  tag test
</source>

<match test>
  @type kafka2
  brokers               stg-ageapdsk101.stg.hnd2.bdd.local:9002,stg-ageapdsk102.stg.hnd2.bdd.local:9002,stg-ageapdsk103.stg.hnd2.bdd.local:9002
  principal             'appuser@STGKAFKA100.GEAP.XXX.COM'
  keytab                'appuser.keytab'
  client_id             'kafka'
  sasl_over_ssl         false
  get_kafka_client_log  true
  <format>
    @type json
  </format>
  topic_key             'stg_esd_app_elk_1'
  get_kafka_client_log  true

  <buffer topic>
    flush_interval 10s
  </buffer>
</match>

请帮助我解决此问题。

2 个答案:

答案 0 :(得分:0)

在具有Kerberos身份验证(GSSAPI)的cloudera 6.3环境中,fluentd v1.9.2插件fluent-plugin-kafkav0.13.0不能使用out_kafka2。作为同一个插件中的替代模块,我尝试了rdkafka2,现在可以使用了。

详细信息;

主要和密钥表与kafka2相同

rdkafka2特有的参数 service_name'kafka'

您可以检查the code,因为它填写了GSSAPI,SASL_PAINTEXT方案的所有必要参数。

if @principal
sasl = true
config[:"sasl.mechanisms"] = "GSSAPI"
config[:"sasl.kerberos.principal"] = @principal
config[:"sasl.kerberos.service.name"] = @service_name if @service_name
config[:"sasl.kerberos.keytab"] = @keytab if @keytab
end

  if ssl && sasl
    security_protocol = "SASL_SSL"
  elsif ssl && !sasl
    security_protocol = "SSL"
  elsif !ssl && sasl
    security_protocol = "SASL_PLAINTEXT"
  else
    security_protocol = "PLAINTEXT"
  end
  config[:"security.protocol"] = security_protocol

添加到此,不要忘记添加环境变量-Djava.security.auth.login.config = / home / user / jaas.conf 有关jaas conf this link的详细信息。

答案 1 :(得分:-1)

使用没有值的ssl_ca_cert代替sasl_over_ssl false
例如
client_id'kafka'
ssl_ca_cert
keytab'appuser.keytab

谢谢