【问题标题】:TopicAuthorizationException主题授权异常
【发布时间】:2021-06-05 04:12:16
【问题描述】:

我创建一个KafkaUser从外部访问云上的Kafka主题,其定义如下,我可以使用SSL模式通过端口9094从外部访问该主题。

apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaUser
  name: data-user
  namespace: abc
  labels:
    strimzi.io/cluster: data-cluster
spec:
  authentication:
    type: tls
  authorization:
    acls:
      - host: '*'
        operation: All
        resource:
          name: data-topic
          patternType: literal
          type: topic
        type: allow
      - host: '*'
        operation: All
        resource:
          name: data-group
          patternType: literal
          type: group
        type: allow
      - host: '*'
        operation: All
        resource:
          name: data-cluster
          patternType: literal
          type: cluster
        type: allow
    type: simple

现在在云端,我打算使用9092端口访问这个主题,不需要任何身份验证和授权,可以吗?

当我运行消费者时,它会抱怨 TOPIC_AUTHORIZATION_FAILED。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --group data-group --topic data-topic

[2021-03-06 19:54:22,689] WARN [Consumer clientId=consumer-data-group-1, groupId=data-group] Error while fetching metadata with correlation id 2 : {data-topic=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
[2021-03-06 19:54:22,692] ERROR [Consumer clientId=consumer-data-group-1, groupId=data-group] Topic authorization failed for topics [data-topic] (org.apache.kafka.clients.Metadata)
[2021-03-06 19:54:22,696] ERROR Error processing message, terminating consumer process:  (kafka.tools.ConsoleConsumer$)
org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [osprey2-topic]
Processed a total of 0 messages

我的问题是,我想在没有任何授权的情况下访问9092端口的主题,怎么做?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api strimzi


    【解决方案1】:

    Kafka 仅支持集群范围的授权。因此,您可以创建多个具有不同身份验证或没有身份验证的侦听器。但是您只能对整个集群启用或禁用一次授权。所以没有授权是不可能有内部监听的。当用户在没有任何身份验证的情况下通过侦听器连接时,它将作为ANONYMOUS 用户连接,并且该用户将像任何其他用户一样检查ACL,如果它没有它们,它将被允许做任何事情。

    您可以通过使用 Kafka Admin API 并为 ANONYMOUS 用户授予您希望从 9092 端口执行的所有操作的权限来解决此问题。但是,从安全角度来看,这绝对是一种不好的做法。您还应该在 9092 接口上使用适当的身份验证,这将允许您为用户提供他们需要的正确 ACL。如果您出于某种原因不想在 9092 侦听器上使用 SSL,您仍然可以使用例如 SCRAM-SHA-512 身份验证。

    【讨论】:

    • 因为是 SSL 模式,所以我在客户端有 truststore 和 keystore,所以当我使用端口 9094 时,它适用于 SSL。但是,当我使用端口 9092 时,即使它不做身份验证,但是对于授权,客户端(生产者或消费者)是否仍然需要信任库和密钥库?
    • 这一切都取决于您如何在端口 9092 上配置监听器。
    猜你喜欢
    • 2011-10-26
    • 2016-08-06
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多