You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Data Prepper对接Kafka数据源:KeyTab认证配置及SSL错误求助

问题

我们尝试以Kafka为数据源、OpenSearch为输出端(Sink)使用Data Prepper,但目标Kafka集群仅支持KeyTab认证。根据Data Prepper文档,其Kafka的SASL认证仅支持用户名密码方式,而我们仅有KeyTab与krb5.conf文件。

我们已通过Docker运行命令的JAVA_OPTS传递KeyTab、krb5.conf、jaas.conf及JKS文件,且文件已正确挂载至容器,但仍遇到SSL握手失败错误:

Authentication error while doing poll(). Will retry after 10 seconds 2024-07-18 10:17:12 org.apache.kafka.common.errors.SslAuthenticationException: SSL handshake failed 2024-07-18 10:17:12 Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

当前使用的Docker运行命令:

docker run -e JAVA_OPTS="-Djava.security.auth.login.config=/usr/share/data-prepper/jaas.conf -Djava.security.krb5.conf=/usr/share/data-prepper/krb5.conf 
 -Djava.ssl.truststore=/usr/share/data-prepper/Services.jks -Djava.ssl.truststoreType=jks -Djava.ssl.keystore=/usr/share/data-prepper/Services.jks 
 -Djava.ssl.keyStoreType=jks -Djava.ssl.keyStorePassword=passwordtemplate -Djava.ssl.trustStorePassword=passwordtemplate" \
--name data-prepper \
-v /OpenSearch/krb5.conf:/usr/share/data-prepper/krb5.conf \
-v //OpenSearch/TestPipeline-Kafka.yml:/usr/share/data-prepper/pipelines/pipelines.yml \
-v /OpenSearch/CORPDEV_svc_vd_streams.keytab:/usr/share/data-prepper/CORPDEV_svc_vd_streams.keytab \
-v /OpenSearch/jaas.conf:/usr/share/data-prepper/jaas.conf \
-v /OpenSearch:/usr/share/data-prepper/Services.jks \
opensearchproject/data-prepper:latest

当前使用的Pipeline配置:

prepper-pipeline:
  source: 
    kafka:
      bootstrap_servers: 
        - sl73kfkdbq001.testinternal.com:9093
        - sl73kfkdbq002.testinternal.com:9093 
        - sl73kfkdbq003.testinternal.com:9093
      topics: 
        - name: topic_name
          group_id: data-prepper-1
      authentication:
          sasl:
  processor:
    - parse_json:
    - delete_entries:
        with_keys: ["message"]
  sink: 
    - opensearch:
        hosts: ["https://opensearch-np.testinternal.com:9243"]
        username: username
        password: password
        index: vd-payouts-transactions-${/version}-${/transactionType}-{/timestamp}
        document_id: ${/transactionId}
        insecure: false
        max_retries: 2

请问如何通过KeyTab完成Kafka认证,且当前缺失哪些证书导致SSL握手失败?


解决方案

1. 通过KeyTab实现Kafka SASL认证

可以通过JVM层面的JAAS配置绕过Data Prepper文档标注的限制,具体配置步骤:

  • 完善JAAS配置文件:确保jaas.conf包含Kafka客户端的Kerberos认证规则,示例内容:
KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    keyTab="/usr/share/data-prepper/CORPDEV_svc_vd_streams.keytab"
    principal="svc_vd_streams@TESTINTERNAL.COM"
    useTicketCache=false;
};

注意替换principal为你的服务主体名,KeyTab路径要和容器内挂载路径一致。

  • 修正Pipeline的SASL配置:在Kafka source的sasl节点补充认证机制和协议:
authentication:
  sasl:
    mechanism: GSSAPI
    protocol: SASL_SSL

GSSAPI是Kerberos对应的SASL认证机制,SASL_SSL表示同时启用SASL认证和SSL加密。

  • 修复Docker挂载错误:当前命令中-v /OpenSearch:/usr/share/data-prepper/Services.jks是将目录挂载为文件,会导致JKS文件无法读取,修改为:
-v /OpenSearch/Services.jks:/usr/share/data-prepper/Services.jks

2. SSL握手失败的原因及修复

当前错误PKIX path building failed说明JVM信任库中缺少Kafka集群的SSL证书,具体问题和修复:

  • 缺失的证书:Kafka Broker的SSL证书(或其签发CA的根/中间证书)未导入到Services.jks信任库中。
  • 修复步骤:
    1. 导出Kafka Broker的SSL证书:
      openssl s_client -connect sl73kfkdbq001.testinternal.com:9093 < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > kafka-broker.crt
      
    2. 将证书导入到JKS信任库:
      keytool -importcert -file kafka-broker.crt -keystore Services.jks -alias kafka-broker-001 -storepass passwordtemplate
      
    3. 确保更新后的Services.jks正确挂载到容器,且JVM参数中的信任库密码匹配。

内容的提问来源于stack exchange,提问作者Pronoy999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:37:49