Apache kafka 卡夫卡制作人/消费者主题未经授权

Apache kafka 卡夫卡制作人/消费者主题未经授权,apache-kafka,Apache Kafka,每当我尝试连接到kafka以制作/消费时,我都会得到“未授权主题[test2]” 如果我关闭了授权,我将成功地获得身份验证,因此身份验证有效,而只有授权无效 kafka.security.auth.SimpleCalAuthorizer的ACL授权不工作 config/server.properties authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer listeners=SASL_PLAINTEXT://kafka3:9

每当我尝试连接到kafka以制作/消费时,我都会得到“未授权主题[test2]”

如果我关闭了授权,我将成功地获得身份验证,因此身份验证有效,而只有授权无效

kafka.security.auth.SimpleCalAuthorizer的ACL授权不工作

config/server.properties

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
listeners=SASL_PLAINTEXT://kafka3:9092
security.inter.broker.protocol= SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
delete.topic.enable=false
日志/卡夫卡授权人

[2019-04-06 13:24:05,693] DEBUG No acl found for resource Topic:LITERAL:test2, authorized = false (kafka.authorizer.logger) [2019-04-06 13:24:05,695] INFO Principal = User:alice is Denied Operation = Describe from host = 10.0.9.20 on resource = Topic:LITERAL:test2(kafka.authorizer.logger)uper.users=User:admin
服务器的jaas文件:

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin"
    user_admin="admin"
    user_alice="alice";
};

bin/kafka-server-start.sh

$base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/jaas-kafka-server.conf kafka.Kafka "$@"
acl输出:

Current ACLs for resource `Topic:LITERAL:test2`:
    User:alice has Allow permission for operations: Write from hosts: *

用户
alice
目前仅被授权
写入该主题。您可能还希望添加ACL
descripe
Read
,以便能够正确地生成和使用现有主题


将ACL添加到主题时,
kafka acls
工具提供了方便的选项
--消费者
--生产者
。否则,您可以使用
--operation
添加特定操作,例如
description
。通过添加
descripe
,您将删除当前在
logs/kafka authorizer
中看到的日志

由于您希望在打开ACL的情况下使用和生成来自特定主题的消息,因此您需要对该主题应用ACL以使用和生成消息。你需要通过卡夫卡这样的超级用户来完成

登录到kafka代理,然后使用以下命令:

sudo su-kafka

kinit-kt/path/to/keytab/kafka.service.keytab-kafka/serviceprincipalname@domain名称 (您可以从卡夫卡·贾亚斯文件中获取)

然后从kafka目录执行以下命令:

bin/kafka acl--add--allow principal User:**--consumer--topic test2--authorizer properties zookeeper.connect=:2181--group*

同样,制作人也可以将消息推送到主题:

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

上述命令将对所有用户应用ACL。您可以通过在命令中指定单个用户名而不是“*”来限制它

**请记住,作为卡夫卡安装的一部分,您不应该在bin目录中安装任何文本文件或卡夫卡安装文件/目录以外的任何其他文件

要获取有关ACL的更多信息(添加/删除,列表),请转到以下链接:


您能否提供
server.properties
的内容以及错误的完整跟踪?这可能是因为您确实通过了身份验证(jaas就是这么做的),但您没有获得授权(ACL就是这么做的)。检查您当前的ACL并查看用户是否具有权限,而不是在评论中发布不可读的配置,编辑您的帖子并将其包含在您的问题中。@PyTux您正在尝试使用还是生成?或者两者都有?@aran我想从不同的用户消费和生产谢谢,但我尝试了--consumer和--producer,但仍然得到了日志消息:User:alice is Denied Operation=descripbeth这是主要问题:调试没有找到资源主题的acl:LITERAL:test2,我尝试在动物园管理员和代理上应用acl,我可以列出它们,然后在与主题相关的地方以及动物园里看到它们,但卡夫卡可以;在登录时找不到特定用户的acl谢谢,我没有使用任何kerberos或任何其他身份验证系统,只是简单的SASL身份验证和acl授权,此外,我还将acl应用于主题test2,但似乎授权人被破坏了,因为我可以列出acl,并且我看到它们在那里,但是用户无法获得授权,因为当我尝试使用超级用户时,我可以完成所有操作,或者当我打开“如果没有找到acl,允许所有人都工作”选项时,这意味着Kafka不会确实将ACL与主题关联,尽管我可以列出它们,但我看到它们在那里