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
我正在尝试使用来自组织外部的 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