当前位置: 首页 > 知识库问答 >
问题:

Kafka授权仅在端口9092上失败

楚茂实
2023-03-14
  - KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND=false
  - KAFKA_SSL_CLIENT_AUTH=required
  - KAFKA_SECURITY_INTER_BROKER_PROTOCOL=SASL_SSL
  - KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
  - KAFKA_SASL_ENABLED_MECHANISMS=PLAIN
  - KAFKA_AUTHORIZER_CLASS_NAME=kafka.security.authorizer.AclAuthorizer
  - KAFKA_SUPER_USERS="User:admin"
  - KAFKA_OPTS=-Djava.security.auth.login.config={{ kafka_secrets_dir }}/kafka_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin"
  user_admin="admin"
  user_second_user="read_user";
};

Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
 username="admin"
 password="admin";
};

配置使用者ACL

bin/kafka-acls --authorizer-properties zookeeper.connect=my.host1:2181,host2:2181,host3:2181 --add --allow-principal User:second_user --consumer --topic '*' --group '*'

配置生产者ACL

kafka-acls --authorizer-properties zookeeper.connect=my.host1:2181,host2:2181,host3:2181 --add --allow-principal User:second_user --producer --topic '*'

我想在两个端口上都用Kafka。9093带有SSL加密和9092 Witout。因此,我用一个简单的控制台消费者/生产者对它进行了测试。端口9093工作正常,我可以消费和产生消息。问题是它不能在端口9092上工作。我总是在TopicAuthorizationException:未被授权访问主题:[test_topic]时得到身份验证错误。我用“second_user”甚至超级用户“admin”测试了它。为什么它只与安全端口一起工作?我错过了什么配置吗?

#consumer.properties

ssl.endpoint.identification.algorithm=
ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
ssl.truststore.location=/home/vagrant/kafka-2.8.0/ssl/kafka.truststore.jks
ssl.truststore.password=changeme
ssl.protocol=TLS
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="admin" \
    password="admin";


# create consumer => This is working!
/bin/kafka-console-consumer.sh --bootstrap-server host1:9093,host2:9093,host3:9093 --topic test_topic --from-beginning --consumer.config consumer.properties
#consumer.properties
security.protocol=PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="admin" \
    password="admin";

#create consumer
kafka-console-consumer.sh --bootstrap-server host1:9092,host2:9092,host3:9092 --topic test_topic --from-beginning --consumer.config consumer.properties

=>TopicAuthorizationException: Not authorized to access topics: [test_topic]

我还用python和confluent-kafka-python包(不工作)测试了它。
test.py

self.consumer = Consumer({
            'bootstrap.servers': "host1:9092,host2:9092,host3:9092",
            'group.id': f"test",
            'security.protocol': "PLAINTEXT",
            'sasl.mechanism': 'PLAIN',
            'sasl.username': 'admin',
            'sasl.password': "admin"
        })
=> FindCoordinator response error: Group authorization failed

共有1个答案

蔚俊人
2023-03-14

您没有在端口9092上启用身份验证,

与KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND的组合

,您将获得授权失败,

 类似资料:
  • 我想为我的融合 kafka 添加身份验证和授权,这些Kafka与 docker 一起运行。这应该只发生在端口9093上,9092应该像以前一样工作,因为IP表规则阻止了外部客户端的端口。因此,我使用了以下配置: = 以下是我配置的一部分: Kafka容器环境变量 Zookeeper容器环境变量 由于我只想为SASL_SSL侦听器配置身份验证机制,因此我使用以下jaas配置,如下所述:https:/

  • 我试图通过Java Apachebeam MongoDbIO连接器连接到MongoDB,得到一个“未授权”错误。 同样的连接细节也适用于Python并能够检索数据。 “org.apache.beam.sdk.io.mongodbo.mongodbio$boundedmongodbsource.$closeresource(Mongodbio.java:407)位于org.apache.beam.s

  • 集成测试(生产代码运行良好)失败,同时请求RESTendpoint保护与@Role允许。抛出以下错误: 项目基于JWT的OpenLiberty。不同之处在于UI部分。我的用户界面是基于Angular的,因此对于REST Endpoint以下的身份验证(JWT发布)使用: 因此: UI(Angular)调用与Header 后端在正文和标题中使用新生成的JWT令牌进行响应 UI将此令牌用于针对REST

  • 因此,我已经研究了许多关于这个问题的问题,但没有找到解决方案。 以下是我目前在尝试使用谷歌地图Android API时收到的错误。 这是我的清单文件 这是片段。地图的java 以及布局。相同的xml 下面的图片显示了启用的谷歌地图Android API 下面是显示生成的API密钥的

  • 我有一个3节点kafka集群和2个面向生产者和消费者的Kafka客户端。我已经启用了SSL认证。我想为群集启用授权。我已经在我的服务器中添加了下面的属性。 authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 我知道是动物园管理员存储acl信息。我想知道谁可以为不同的客户端设置授权。授权是如何设置的?

  • 授权端点用于与资源所有者交互获取授权许可。 授权服务器必须先验证资源所有者的身份。 授权服务器对资源所有者进行身份验证的方式(例如,用户名和密码登录、会话cookies)超出了本规范的范围。 客户端通过何种方式获得授权端点的位置超出了本文档范围,但该位置通常在服务文档中提供。 端点URI可以包含“application/x-www-form-urlencoded”格式(按附录B)的查询部分(RFC