3.4. 身份验证
默认情况下,Zoo 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; };
ContextName {
param1
param2;
};
SASL 身份验证为服务器到服务器通信(实例 ZooKeeper 实例之间的沟通)和客户端到服务器通信( Kafka 和 ZooKeeper 之间相互通信)单独配置。服务器到服务器身份验证只适用于带有多个节点的 ZooKeeper 集群。
服务器到服务器身份验证
对于服务器到服务器身份验证,JAAS 配置文件包含两个部分:
- 服务器配置
- 客户端配置
使用 DIGEST-MD5 SASL 机制时,Qorum Server
上下文用于配置身份验证服务器。它必须包含所有用户名,以允许以未加密的形式与其密码连接。第二个上下文 QuorumLearner
必须为内置在 ZooKeeper 中的客户端配置。它还包含未加密的形式的密码。以下是 DIGEST-MD5 机制的 JAAS 配置文件示例:
除了 JAAS 配置文件外,还必须通过指定以下选项在常规 ZooKeeper 配置文件中启用 server-to-server 身份验证:
使用 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
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 机制,它会配置所有用户名和密码:
配置 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
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
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 身份验证”。
3.4.2. 使用 DIGEST-MD5 启用服务器到服务器身份验证 复制链接链接已复制到粘贴板!
此流程描述了如何在 ZooKeeper 集群节点间使用 SASL DIGEST-MD5 机制启用身份验证。
先决条件
- AMQ Streams 安装在主机上
- ZooKeeper 集群 配置了多个 节点。
启用 SASL DIGEST-MD5 身份验证
在所有 ZooKeeper 节点上,创建或编辑
/opt/kafka/config/zookeeper-jaas.conf
JAAS 配置文件并添加以下上下文:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 JAAS 上下文中,用户名和密码都必须相同。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 ZooKeeper 节点上,编辑
/opt/kafka/config/zookeeper.properties
ZooKeeper 配置文件并设置以下选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 逐一重启所有 ZooKeeper 节点。要将 JAAS 配置传递给 ZooKeeper,请使用
KAFKA_OPTS
环境变量。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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关安装 AMQ Streams 的详情,请参考 第 2.3 节 “安装 AMQ Streams”。
- 有关配置 AMQ Streams 的详情,请参考 第 2.8 节 “配置 AMQ Streams”。
- 有关运行 ZooKeeper 集群的更多信息,请参阅 第 3.3 节 “运行多节点 ZooKeeper 集群”。
3.4.3. 使用 DIGEST-MD5 启用客户端到服务器身份验证 复制链接链接已复制到粘贴板!
此流程描述了如何使用 ZooKeeper 客户端和 ZooKeeper 之间的 SASL DIGEST-MD5 机制启用身份验证。
先决条件
- AMQ Streams 安装在主机上
- zookeeper 集群 已配置并运行。
启用 SASL DIGEST-MD5 身份验证
在所有 ZooKeeper 节点上,创建或编辑
/opt/kafka/config/zookeeper-jaas.conf
JAAS 配置文件并添加以下上下文:Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="<SuperUserPassword>" user<Username1>_="<Password1>" user<USername2>_="<Password2>"; };
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="<SuperUserPassword>" user<Username1>_="<Password1>" user<USername2>_="<Password2>"; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 超级用户
自动具有 priviledges 管理员。该文件可以包含多个用户,但 Kafka 代理只需要一个额外的用户。Kafka 用户的建议名称为kafka
。以下示例显示了
客户端到服务器
身份验证的服务器上下文:Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456"; };
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456"; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 ZooKeeper 节点上,编辑
/opt/kafka/config/zookeeper.properties
ZooKeeper 配置文件并设置以下选项:requireClientAuthScheme=sasl authProvider.<IdOfBroker1>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker2>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker3>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl authProvider.<IdOfBroker1>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker2>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker3>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必须为作为 ZooKeeper 集群一部分的每个节点添加
authProvider. <ID
> 属性。一个三节点 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 逐一重启所有 ZooKeeper 节点。要将 JAAS 配置传递给 ZooKeeper,请使用
KAFKA_OPTS
环境变量。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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关安装 AMQ Streams 的详情,请参考 第 2.3 节 “安装 AMQ Streams”。
- 有关配置 AMQ Streams 的详情,请参考 第 2.8 节 “配置 AMQ Streams”。
- 有关运行 ZooKeeper 集群的更多信息,请参阅 第 3.3 节 “运行多节点 ZooKeeper 集群”。