在融合的Kafka中使用基本身份验证实现架构注册表

时间:2019-10-15 09:28:23

标签: apache-kafka confluent-schema-registry confluent-platform

我对Confluent Kafka并不陌生,并且能够与Avro一起经营Confluent kafka及其生产者和消费者。我已经在this guide的帮助下使用这些命令注册了新模式。

D:\ApachKafka\confluent>python register_Scehma.py http://localhost:8081 playerTopic messageFormat.avsc

这是我用于注册表的python代码:

import os
import sys

import requests

schema_registry_url = sys.argv[1]
topic = sys.argv[2]
schema_file = sys.argv[3]

aboslute_path_to_schema = os.path.join(os.getcwd(), schema_file)

print("Schema Registry URL: " + schema_registry_url)
print("Topic: " + topic)
print("Schema file: " + schema_file)
print

with open(aboslute_path_to_schema, 'r') as content_file:
    schema = content_file.read()

payload = "{ \"schema\": \"" \
          + schema.replace("\"", "\\\"").replace("\t", "").replace("\n", "") \
          + "\" }"

url = schema_registry_url + "/subjects/" + topic + "-value/versions"
headers = {"Content-Type": "application/vnd.schemaregistry.v1+json"}

r = requests.post(url, headers=headers, data=payload)
if r.status_code == requests.codes.ok:
    print("Success")
else:
    r.raise_for_status()

一切正常,我的生产者发送了avro数据,我正在使用C#在我的客户端上将其接收。但是,现在我想使用基本身份验证凭据来实现架构注册表。因此,我在Google上搜索并发现this link,这对我来说非常令人困惑。例如,它声明使用以下设置将架构注册表配置为要求身份验证:

authentication.method=BASIC
authentication.roles=<user-role1>,<user-role2>,...
authentication.realm=<section-in-jaas_config.file>

我应该在哪里添加这些行?该文档令人困惑,所以我正在寻找一种使用基本auth实现架构注册表的方法?

1 个答案:

答案 0 :(得分:0)

我认为基本身份验证仅在将例如nginx放在其前面并将请求代理到架构注册表时才起作用。然后使用nginx设置基本身份验证。

您提到的页面上有 Authentication 一章,但这只是从架构注册表到代理。

为保护架构注册表端点,Confluent提供了付费插件:

  

架构注册表安全插件
  这是Confluent Platform的商业组件。

我也在寻找解决方案,因此着陆于您的问题。 您还可以使用防火墙来限制可以访问架构注册表端口的IP。此外,您的生产者和消费者需要能够处理基本的身份验证机制,总之,这并不完美。例如,不确定为什么模式注册表不能使用zookeeper SCRAM用户,这将是最简单的方法。

编辑: 此外,您还可以使用如下网址:

https://username:password@registry.example.com/

不理想,但是我想它能起作用...