繁体   English   中英

kafka 认证和授权

[英]kafka authentication and authorization

我阅读了 Kafka 的文档

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

可以指定任何Producer只能生产一个Topic,比如MySQL 。(producer已经用Python写过)

是的,您可以为每个主题设置用户/通行证。 请参阅官方文档授权和 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 开始

从文档中,添加 ACL 的示例:

假设您要添加一个 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

同样在这篇博客文章中,您可以找到一些信息

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

如果要使用用户名+密码进行身份验证,则需要在集群上使用普通机制启用 SASL 身份验证。 有关完整说明,请参阅 Kafka 网站上的使用 SASL进行身份验证部分。

请注意,您可能还想启用 SSL (SASL_SSL),否则,SASL Plain 将以明文形式传输凭据。

一些 Python 客户端支持 SASL Plain,例如:


关于授权,使用默认授权方kafka.security.auth.SimpleAclAuthorizer ,您可以限制生产者只能生产到一个主题。 同样,这在 Kafka 网站的授权和 ACL部分都有完整记录。

例如,对于 SASL Plain,默认情况下,主体名称是用于连接的用户名。 使用以下命令,您可以限制用户Alice只能生成名为testtopic的主题:

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Alice --producer --topic testtopic

你的意思是这样的:

    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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM