保护对 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 使用带有 Strimzi 的 REST API 和种类:KafkaConnector
移动应用程序 + REST 后端中的 OpenID Connect 身份验证流程(使用 KeyCloak)