主题授权异常

TopicAuthorizationException

我创建了一个 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端口的topic,怎么办?

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

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