4.9.4.2. SASL 身份验证


SASL 身份验证使用 Java 身份验证和授权服务(JAAS)进行配置。JAAS 也用于验证 Kafka 和 ZooKeeper 之间的连接。JAAS 使用自己的配置文件。此文件的建议位置是 /opt/kafka/config/jaas.conf。该文件必须可由 kafka 用户读取。运行 Kafka 时,使用 Java 系统属性 java.security.auth.login.config 指定此文件的位置。启动代理节点时,必须将此属性传递给 Kafka:

KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/my/jaas.config"; bin/kafka-server-start.sh

SASL 身份验证既通过普通的未加密连接,也受 TLS 连接支持。可以为每个侦听器单独启用 SASL。要启用它,listener.security.protocol.map 中的安全协议必须是 SASL_PLAINTEXTSASL_SSL

Kafka 中的 SASL 身份验证支持多种不同的机制:

PLAIN
基于用户名和密码实施身份验证。用户名和密码存储在 Kafka 配置中。
SCRAM-SHA-256SCRAM-SHA-512
使用交换挑战响应身份验证机制(SCRAM)实施身份验证。SCRAM 凭据集中存储在 ZooKeeper 中。SCRAM 可用于 ZooKeeper 群集节点在专用网络中隔离运行的情况。
GSSAPI
针对 Kerberos 服务器实施身份验证.
警告

PLAIN 机制以未加密格式通过网络发送用户名和密码。因此,它应当仅与 TLS 加密结合使用。

SASL 机制通过 JAAS 配置文件进行配置。Kafka 使用名为 KafkaServer 的 JAAS 上下文。在 JAAS 中配置它们后,必须在 Kafka 配置中启用 SASL 机制。这使用 sasl.enabled.mechanisms 属性完成。此属性包含一个以逗号分隔的启用机制列表:

sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512

如果用于broker 间通信的监听程序使用 SASL,则必须使用 sasl.mechanism.inter.broker.protocol 属性指定它应使用的 SASL 机制。例如:

sasl.mechanism.inter.broker.protocol=PLAIN

必须在 KafkaServer JAAS 上下文中使用 usernamepassword 字段指定用于内部通信的用户名和密码。

SASL PLAIN

要使用 PLAIN 机制,允许连接的用户名和密码直接在 JAAS 上下文中指定。以下示例显示了为 SASL PLAIN 身份验证配置的上下文。这个示例配置了三个不同的用户:

  • admin
  • user1
  • user2
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    user_admin="123456"
    user_user1="123456"
    user_user2="123456";
};

包含用户数据库的 JAAS 配置文件应该在所有 Kafka 代理上保持同步。

当 SASL PLAIN 也用于代理间验证时,usernamepassword 属性应包含在 JAAS 上下文中:

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="123456"
    user_admin="123456"
    user_user1="123456"
    user_user2="123456";
};

SASL SCRAM

Kafka 中的 SCRAM 身份验证由两个机制组成: SCRAM-SHA-256SCRAM-SHA-512。这些机制仅在所用的哈希算法 - SHA-256 与更强大的 SHA-512 之间有所不同。要启用 SCRAM 身份验证,JAAS 配置文件必须包括以下配置:

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required;
};

在 Kafka 配置文件中启用 SASL 身份验证时,可以列出这两个 SCRAM 机制。但是,它们中只能选择其中之一作为代理间通信。例如:

sasl.enabled.mechanisms=SCRAM-SHA-256,SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512

SCRAM 机制的用户凭据存储在 ZooKeeper 中。kafka-configs.sh 工具可用于管理它们。例如,运行以下命令来添加用户 user1,密码为 123456:

bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'SCRAM-SHA-256=[password=123456],SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name user1

要删除用户凭证,请使用:

bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name user1

SASL GSSAPI

使用 Kerberos 进行身份验证的 SASL 机制称为 GSSAPI。要配置 Kerberos SASL 身份验证,请在 JAAS 配置文件中添加以下配置:

KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/etc/security/keytabs/kafka_server.keytab"
    principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
};

Kerberos 主体中的域名必须始终以大写形式。

除了 JAAS 配置外,Kerberos 服务名称还需要在 Kafka 配置的 sasl.kerberos.service.name 属性中指定:

sasl.enabled.mechanisms=GSSAPI
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.kerberos.service.name=kafka

多个 SASL 机制

Kafka 可以同时使用多个 SASL 机制。不同的 JAAS 配置都可以添加到同一上下文中:

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    user_admin="123456"
    user_user1="123456"
    user_user2="123456";

    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/etc/security/keytabs/kafka_server.keytab"
    principal="kafka/kafka1.hostname.com@EXAMPLE.COM";

    org.apache.kafka.common.security.scram.ScramLoginModule required;
};

启用多个机制后,客户端将能够选择要使用的机制。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.