更新时间:2024-07-19 GMT+08:00

Kafka安全使用说明

本章节内容适用于MRS 3.x及后续版本。

Kafka API简单说明

  • Producer API

    org.apache.kafka.clients.producer.KafkaProducer中定义的接口,在使用“kafka-console-producer.sh”时,默认使用此API。

  • Consumer API

    org.apache.kafka.clients.consumer.KafkaConsumer中定义的接口,在使用“kafka-console-consumer.sh”时,默认会调用此API。

MRS 3.x后,Kafka不支持旧Producer API和旧Consumer API。

Kafka访问协议说明

Kafka当前支持四种协议类型的访问:PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL。

Kafka服务启动时,默认会启动PLAINTEXT和SASL_PLAINTEXT两种协议类型的访问监听。可通过设置Kafka服务配置“ssl.mode.enable”“true”,来启动SSL和SASL_SSL两种协议类型的访问监听。下表是四种协议类型的简单说明:

协议类型

说明

默认端口

PLAINTEXT

支持无认证的明文访问

9092

SASL_PLAINTEXT

支持Kerberos认证的明文访问

21007

SSL

支持无认证的SSL加密访问

9093

SASL_SSL

支持Kerberos认证的SSL加密访问

21009

Topic的ACL设置

Topic的权限信息,需要在Linux客户端上,使用“kafka-acls.sh”脚本进行查看和设置,具体可参考管理Kafka用户权限

针对不同的Topic访问场景,Kafka中API使用说明

  • 场景一:访问设置了ACL的Topic

    使用的API

    用户属组

    客户端参数

    服务端参数

    访问的端口

    API

    用户需满足以下条件之一即可:

    • 加入System_administrator角色
    • 属于kafkaadmin组
    • 属于kafkasuperuser组
    • 被授权的kafka组的用户

    security.inter.broker.protocol=SASL_PLAINTEXT sasl.kerberos.service.name = kafka

    -

    sasl.port(默认21007)

    security.protocol=SASL_SSL sasl.kerberos.service.name = kafka

    “ssl.mode.enable”配置为true

    sasl-ssl.port(默认21009)

  • 场景二:访问未设置ACL的Topic

    使用的API

    用户属组

    客户端参数

    服务端参数

    访问的端口

    API

    用户需满足以下条件之一:

    • 加入System_administrator角色
    • 属于kafkaadmin组
    • 属于kafkasuperuser组

    security.protocol=SASL_PLAINTEXT sasl.kerberos.service.name = kafka

    -

    sasl.port(默认21007)

    用户属于kafka组

    “allow.everyone.if.no.acl.found”配置为true

    说明:

    普通集群下不涉及服务端参数“allow.everyone.if.no.acl.found”的修改

    sasl.port(默认21007)

    用户需满足以下条件之一:

    • 加入System_administrator角色
    • 属于kafkaadmin组
    • kafkasuperuser组用户

    security.protocol=SASL_SSL sasl.kerberos.service.name = kafka

    “ssl.mode.enable”配置为“true”

    sasl-ssl.port(默认21009)

    用户属于kafka组

    1. “allow.everyone.if.no.acl.found”配置为“true”
    2. “ssl.mode.enable”配置为“true”

    sasl-ssl.port(默认21009)

    -

    security.protocol=PLAINTEXT

    “allow.everyone.if.no.acl.found”配置为“true”

    port(默认9092)

    -

    security.protocol=SSL

    1. “allow.everyone.if.no.acl.found”配置为“true”
    2. “ssl.mode.enable”配置为“true”

    ssl.port(默认9063)