保护对 Kafka Connect 的 REST API 的访问

Posted

技术标签:

【中文标题】保护对 Kafka Connect 的 REST API 的访问【英文标题】:Securing access to REST API of Kafka Connect 【发布时间】:2017-12-28 06:25:40 【问题描述】:

Kafka Connect 的 REST API 没有得到保护和验证。 由于未经过身份验证,因此任何人都可以轻松访问连接器或任务的配置。由于这些配置可能包含如何访问源系统[在 SourceConnector 的情况下]和目标系统[在 SinkConnector 的情况下],是否有标准方法来限制对这些 API 的访问?

【问题讨论】:

既然 kafka 已为 Kafka Connect REST API 添加了身份验证和安全性,您能否更新您的答案? 【参考方案1】:

在 Kafka 2.1.0 中,可以为 Kafka Connect 的 REST 接口配置 http 基本身份验证,而无需编写任何自定义代码。

由于 REST 扩展机制的实施,这成为现实(请参阅 KIP-285)。

简单来说,配置过程如下:

    在工作配置文件中添加扩展类:
rest.extension.classes = org.apache.kafka.connect.rest.basic.auth.extension.BasicAuthSecurityRestExtension
    为应用程序名称“KafkaConnect”创建 JAAS 配置文件(即connect_jaas.conf):
KafkaConnect 
   org.apache.kafka.connect.rest.basic.auth.extension.PropertyFileLoginModule required
             file="/your/path/rest-credentials.properties";
;
    在上述目录下创建rest-credentials.properties文件:
user=password
    最后,通知 java JAAS 配置文件,例如,通过向 java 添加命令行属性:
-Djava.security.auth.login.config=/your/path/connect_jaas.conf 

重启 Kafka Connect 后,如果没有基本身份验证,您将无法使用 REST API。

请记住,使用的类只是示例而不是生产就绪功能。

链接:

Connect configuratin BasicAuthSecurityRestExtension JaasBasicAuthFilter PropertyFileLoginModule

【讨论】:

Eugene 如果将 Kafka Connect 作为容器运行,我不清楚这些说明。如何将 JAAS 配置文件和命令行属性(2 和 4)构建到 docker-compose 中? 自 Kafka 2.0.0 起支持此基本身份验证,请参阅 issues.apache.org/jira/browse/KAFKA-6776 第4步具体怎么做?在某些来源中,他们将其用作“export KAFKA_OPTS=”,其中一些没有“export”。【参考方案2】:

这是一个未来需要改进的已知领域,但现在您应该在 Kafka Connect 机器上使用防火墙以及 API 管理工具(Apigee 等)或反向代理(haproxy、nginx 等)。 ) 以确保 HTTPS 在您可以配置访问控制规则的端点处终止,然后让防火墙仅接受来自安全代理的连接。对于某些产品,防火墙、访问控制和 SSL/TLS 终止功能都可以在较少数量的产品中完成。

【讨论】:

【参考方案3】:

从 Kafka 1.1.0 开始,您可以为 Kafka Connect REST API 设置 SSL 和 SSL 客户端身份验证。详情请见KIP-208。

【讨论】:

请查看我的问题***.com/q/55220602/2056178 吗?不能在 Connect REST API 上配置 SSL 是正确的【参考方案4】:

现在您可以启用基于证书的身份验证,以便客户端访问 Kafka Connect 的 REST API。 这里有一个例子https://github.com/sudar-path/kc-rest-mtls

【讨论】:

以上是关于保护对 Kafka Connect 的 REST API 的访问的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Connect REST Interface

Kafka Connect 使用带有 Strimzi 的 REST API 和种类:KafkaConnector

移动应用程序 + REST 后端中的 OpenID Connect 身份验证流程(使用 KeyCloak)

Kafka-connect,Bootstrap 代理断开连接

Kafka Connect 访问模式注册表的基本身份验证

Kafka-Connect:启动 S3 Sink 连接器时出现无法识别的错误