3.4. Authentication
默认情况下,ZooKeeper 不使用任何形式的身份验证并允许匿名连接。但是,它支持 Java 身份验证与授权服务(JAAS),可用于使用简单身份验证和安全层(SASL)设置身份验证。zookeeper 支持使用带有本地存储的凭证的 DIGEST-MD5 SASL 机制进行身份验证。
3.4.1. 使用 SASL 进行身份验证
JAAS 使用单独的配置文件进行配置。建议将 JAAS 配置文件放在与 ZooKeeper 配置相同的目录中(/opt/kafka/config/
)。推荐的文件名是 zookeeper-jaas.conf
。将 ZooKeeper 群集与多个节点搭配使用时,必须在所有群集节点上创建 JAAS 配置文件。
JAAS 使用上下文进行配置。服务器和客户端等独立部分始终配置有单独的 上下文。该上下文是一个 配置选项,具有以下格式:
ContextName { param1 param2; };
SASL 身份验证是单独配置的,用于服务器对服务器通信( ZooKeeper 实例之间的通信)和客户端对服务器通信( Kafka 和 ZooKeeper 之间的通信)。服务器对服务器身份验证仅与具有多个节点的 ZooKeeper 集群相关。
服务器到服务器的身份验证
对于服务器到服务器身份验证,JAAS 配置文件包含两个部分:
- 服务器配置
- 客户端配置
使用 DIGEST-MD5 SASL 机制时,QuorumServer
上下文用于配置身份验证服务器。它必须包含允许所有用户名,以便其以未加密的形式与其密码连接。第二个上下文 QuorumLearner
必须为内置在 ZooKeeper 中的客户端配置。它还包含未加密格式的密码。以下是 DIGEST-MD5 机制的 JAAS 配置文件示例:
QuorumServer { org.apache.zookeeper.server.auth.DigestLoginModule required user_zookeeper="123456"; }; QuorumLearner { org.apache.zookeeper.server.auth.DigestLoginModule required username="zookeeper" password="123456"; };
除了 JAAS 配置文件外,还必须通过指定以下选项在常规 ZooKeeper 配置文件中启用服务器到服务器身份验证:
quorum.auth.enableSasl=true quorum.auth.learnerRequireSasl=true quorum.auth.serverRequireSasl=true quorum.auth.learner.loginContext=QuorumLearner quorum.auth.server.loginContext=QuorumServer quorum.cnxn.threads.size=20
使用 KAFKA_OPTS
环境变量将 JAAS 配置文件作为 Java 属性传递给 ZooKeeper 服务器:
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
有关服务器到服务器身份验证的更多信息,请参阅 ZooKeeper wiki。
客户端到服务器身份验证
客户端到服务器身份验证在与服务器到服务器身份验证相同的 JAAS 文件中配置。但是,与服务器对服务器身份验证不同,它仅包含服务器配置。配置的客户端部分必须在客户端中完成。有关如何将 Kafka 代理配置为使用身份验证连接到 ZooKeeper 的详情,请参考 Kafka 安装 部分。
将服务器上下文添加到 JAAS 配置文件,以配置客户端到服务器的身份验证。对于 DIGEST-MD5 机制,它会配置所有用户名和密码:
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456" user_someoneelse="123456"; };
配置 JAAS 上下文后,通过添加以下行,在 ZooKeeper 配置文件中启用客户端到服务器身份验证:
requireClientAuthScheme=sasl authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
您必须为作为 ZooKeeper 集群一部分的每个服务器添加 authProvider.<ID>
属性。
使用 KAFKA_OPTS
环境变量将 JAAS 配置文件作为 Java 属性传递给 ZooKeeper 服务器:
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
有关在 Kafka 代理中配置 ZooKeeper 身份验证的详情请参考 第 4.6 节 “zookeeper 身份验证”。