簡體   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