Micronaut Kafka:健康检查失败 "Cluster authorization failed"

Micronaut Kafka: Health check fails with "Cluster authorization failed"

我正在尝试使用来自组织外部的 Kafka 集群的消息,这需要身份验证。

我正在接收消息,所以大概事情是部分正确的,但我在日志中收到此错误消息:

08:54:50.840 [kafka-admin-client-thread | adminclient-1] ERROR i.m.m.health.indicator.HealthResult - Health indicator [kafka] reported exception: org.apache.kafka.common.errors.ClusterAuthorizationException: Cluster authorization failed.

健康检查结果状态为 DOWN

这是来自 application.yaml 的 kafka 部分:

kafka:
  bootstrap:
    servers:
      "bootstrap.example.com:9095"
    security:
      protocol: "SASL_SSL"
  schema.registry.url: "http://schema-registry.example.com:8001"
  consumers:
    example-group:
      key:
        deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
      value:
        deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
  security.protocol: "SASL_SSL"
  sasl:
    mechanism: "SCRAM-SHA-512"
    jaas:
      config: org.apache.kafka.common.security.scram.ScramLoginModule required username="${KAFKA_USERNAME:username}" password="${KAFKA_PASSWORD:password}";

我想通了,“授权”这个词应该是一个很大的暗示。

认证机制没有问题。相反,我们的用户根本没有进行所需调用的权限。

所需的权限是:

  • 描述集群
  • DescribeConfig 资源 BROKER。

默认情况下,DescribeCluster 还提供有关主题 ACL 的信息,这可能是一个安全问题:-)也许您需要一个自定义的 healthcheck-indicator?

扩展@Imre Kerr 的回答。

如果使用 Strimzi 设置 ACL,您只需将以下资源 ACL 添加到您的用户即可:

users:
  - name: {your-user-name}
    acls:
      ...
      - resource:
          type: cluster
        operation: DescribeConfigs