kafka身份验证和授权

时间:2018-06-01 10:44:47

标签: python apache-kafka

我读过卡夫卡的文件

但我不明白。我可以为Python Producers使用用户名和密码吗?

可以指定任何Producer只能生成一个Topic,如MySQL。(生成器用Python编写)

3 个答案:

答案 0 :(得分:1)

是的,您可以为每个主题设置用户/通行证。请参阅official documentation 授权和ACL

您可以使用SSL或SASL,Kafka的SASL支持来启用安全性:

  • SASL / GSSAPI(Kerberos) - 从版本0.9.0.0开始
  • SASL / PLAIN - 从版本0.10.0.0开始
  • SASL / SCRAM-SHA-256和SASL / SCRAM-SHA-512 - 从版本0.10.2.0开始

从文档中添加Acls的示例:

假设您要添加acl" Principals User:Bob和User:Alice可以从IP 198.51.100.0和IP 198.51.100.1"执行主题测试主题的操作读取和写入。您可以通过以下选项执行CLI来执行此操作: 1

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic

同样在此Blog post中,您可以找到一些信息

我不确定您使用的是哪个库,但它应该只是将适当的属性传递给生产者/客户端; kafka-python 有支持:

答案 1 :(得分:1)

如果要使用username + password进行身份验证,则需要使用群集上的Plain机制启用SASL身份验证。有关完整说明,请参阅Kafka网站上的Authentication using SASL部分。

请注意,您可能还希望启用SSL(SASL_SSL),否则,SASL Plain将以纯文本格式传输凭据。

多个Python客户端支持SASL Plain,例如:

关于授权,使用默认授权程序asyncAfter,您可以限制生产者只能生成主题。同样,这一切都在Kafka的Authorization and ACLs部分网站上完整记录。

例如,对于SASL Plain,默认情况下,Principal名称是用于连接的用户名。使用以下命令,您可以限制用户kafka.security.auth.SimpleAclAuthorizer仅能够生成名为Alice的主题:

testtopic

答案 2 :(得分:0)

您的意思是这样的吗?

    topic = "test"
    sasl_mechanism = "PLAIN"
    username = "admin"
    password = "pwd$"
    security_protocol = "SASL_PLAINTEXT"

    #context = ssl.create_default_context()
    #context.options &= ssl.OP_NO_TLSv1
    #context.options &= ssl.OP_NO_TLSv1_1

    consumer = KafkaConsumer(topic, bootstrap_servers='kafka1:9092',
                              #api_version=(0, 10),
                              security_protocol=security_protocol,
                              #ssl_context=context,
                              #ssl_check_hostname=True,
                              #ssl_cafile='../keys/CARoot.pem',
                              sasl_mechanism = sasl_mechanism,
                              sasl_plain_username = username,
                              sasl_plain_password = password)
                              #ssl_certfile='../keys/certificate.pem',
                              #ssl_keyfile='../keys/key.pem')#,api_version = (0, 10))