ZooKeeper 摘要身份验证2025 年 5 月 15 日 | 阅读 11 分钟 ZooKeeper 认证是保护 Apache ZooKeeper 的关键方面,ZooKeeper 在分布式系统中维护配置信息、命名、同步和提供组服务方面发挥着至关重要的作用。由于 ZooKeeper 通常用于涉及关键基础设施或敏感数据的场景,因此确保只有授权的客户端和服务器能够与其交互对于维护系统完整性和隐私至关重要。 1. ZooKeeper 认证简介ZooKeeper 中的认证提供了验证与服务交互的客户端和服务器身份的机制。这可以防止对资源的未经授权访问,并确保只有受信任的客户端才能发出请求或执行操作。 ZooKeeper 认证通常涉及两个主要组件
2. ZooKeeper 安全模型ZooKeeper 使用基于认证、授权和数据完整性 的安全模型。虽然认证确保验证客户端或服务器的身份,但授权确定在实体经过身份验证后允许执行哪些操作。
3. ZooKeeper 认证机制ZooKeeper 支持多种认证方法,使其能够适应不同环境下的各种安全要求。最常见的机制包括 Digest、Kerberos、SSL/TLS 和自定义认证。 3.1 Digest 认证Digest 认证使用简单的用户名-密码模型。客户端提供用户名和密码,这些用户名和密码将被哈希并与存储的凭据进行比较。Digest 认证是较简单的选项之一,适用于大多数通用用例。 机制 客户端发送格式为 digest:<username>:<password> 的认证请求。例如,如果客户端发送 digest:admin:password123,ZooKeeper 将通过将其哈希密码与记录进行匹配来验证它。 Digest 认证程序示例 输出 ![]() 3.2 Kerberos 认证Kerberos 是一种企业级网络认证协议,可提供安全的、基于票证的客户端-服务器认证。ZooKeeper 可以配置为使用 Kerberos,这非常适合高安全性的企业环境。 机制 ZooKeeper 依赖于密钥分发中心 (KDC) 发行的 Kerberos 票证进行客户端认证。ZooKeeper 服务器检查这些票证的真实性以验证客户端身份。 Kerberos 认证程序示例 首先,在服务器和客户端两侧设置 Kerberos Keytab 文件和 JAAS 配置。以下是一个使用 Kerberos 认证连接到 ZooKeeper 的示例客户端代码 对于 Kerberos 认证,您需要设置 Kerberos 密钥分发中心 (KDC),这需要对 ZooKeeper 服务器和客户端进行额外的配置。 ZooKeeper 服务器配置 在 zoo.cfg 中,设置以下属性 通过创建一个 zookeeper_jaas.conf 文件来设置 ZooKeeper 的 Kerberos JAAS 配置 然后,使用此 JAAS 配置启动 ZooKeeper 客户端代码 使用 client_jaas.conf 文件配置客户端 使用 JAAS 配置运行以下客户端代码 输出 ![]() 3.3 SSL/TLS 认证SSL/TLS 在客户端和 ZooKeeper 服务器之间提供加密通信,允许双方使用 SSL 证书进行认证。 机制 ZooKeeper 服务器和客户端使用相互 SSL/TLS 认证,在握手期间双方都会向对方出示证书。如果两个证书都有效,则连接继续。 SSL/TLS 认证程序示例 配置客户端的密钥库和信任库,并使用以下代码与 ZooKeeper 建立 SSL 连接 ZooKeeper 服务器配置 将以下属性添加到 zoo.cfg 客户 输出 ![]() 3.4 自定义认证ZooKeeper 允许通过实现自定义 AuthProvider 类来进行自定义认证方案,这有助于与 OAuth 或 LDAP 等外部认证系统集成。 机制 开发人员实现自定义 AuthProvider 类并将其插入 ZooKeeper 服务器,从而允许 ZooKeeper 使用自定义方法来验证客户端身份。 自定义认证程序示例 实现自定义 AuthProvider 并将其注册到 ZooKeeper 配置中,然后使用自定义令牌进行认证 服务器端:实现自定义 AuthProvider 通过扩展 org.apache.zookeeper.server.auth.AuthProvider 来实现自定义 AuthProvider 类。 将以下内容添加到 zoo.cfg 以注册自定义认证提供程序 客户端代码 使用自定义认证方案连接到 ZooKeeper 输出 ![]() 4. ZooKeeper 中的认证过程ZooKeeper 中的认证过程通常涉及以下步骤
5. ZooKeeper 中的授权ZooKeeper 的授权系统在成功进行客户端认证后,可以对资源进行受控访问。通过使用访问控制列表 (ACL),ZooKeeper 指定哪些客户端可以在 ZooKeeper 树中的每个节点上执行某些操作。ACL 由分配给用户、组或客户端的权限组成,并提供了一个灵活的模型来定义访问限制。 5.1 ZooKeeper ACL(访问控制列表)ZooKeeper 中的每个 ACL 条目都有三个组成部分
ACL 结构示例 典型的 ACL 条目可能看起来像 digest:admin:password123:READ,其中
ACL 权限 ZooKeeper 支持以下权限
程序示例:设置 ACL 下面的示例演示了如何创建一个具有自定义 ACL 的 ZooKeeper 节点,该自定义 ACL 仅允许管理员用户(使用 digest 认证)读取和写入该节点。 输出 ![]() 5.2 默认 ACLZooKeeper 节点可以继承默认 ACL,这使得跨多个节点的权限管理更加简单。在父级设置的默认 ACL 可以在创建子节点时传播到子节点,从而在节点层次结构中实现一致的访问控制策略。 5.3 管理 ACLZooKeeper 提供了一个 API 来管理任何节点的 ACL。管理员可以根据需要添加、修改或删除 ACL 条目。 示例:修改现有节点上的 ACL 以下示例演示了如何更新现有 ZooKeeper 节点的 ACL。该程序首先对客户端进行认证,然后更改节点的 ACL 以授予另一个用户 READ 权限。 输出 ![]() 示例:删除 ACL 此示例通过先识别 ACL 条目,然后设置不包含它的 ACL 列表来从节点中删除特定的 ACL 条目。 输出 ![]() 6. ZooKeeper 与外部安全系统集成在许多环境中,将 ZooKeeper 认证和授权与外部安全系统集成非常重要。常见的集成包括 6.1 LDAP 集成LDAP(轻量级目录访问协议)广泛用于管理大型组织中的用户凭据。通过将 ZooKeeper 与 LDAP 服务器集成,组织可以集中控制和认证用户对 ZooKeeper 资源的访问。 LDAP 集成在 ZooKeeper 中如何工作 要将 LDAP 与 ZooKeeper 集成,您需要
程序示例:LDAP 认证提供程序 下面是一个自定义 LDAPAuthProvider 类的示例,该类连接到 LDAP 服务器进行认证。 LDAPAuthProvider.java 输出 1 ![]() 输出 2 ![]() 启用 LDAP 认证提供程序的步骤 1. 编译上面的 Java 代码,并将生成的类文件放在 ZooKeeper 的类路径中。 2. 在 zoo.cfg 中注册自定义 Auth Provider 3. 使用 LDAP 凭据进行认证 在客户端应用程序中,按以下方式提供 LDAP 凭据 6.2 OAuth 集成OAuth 是一种流行的基于令牌的协议,用于在不暴露用户凭据的情况下授予对资源的访问权限。尽管 ZooKeeper 不原生支持 OAuth,但可以通过实现类似于 LDAP 示例的自定义认证提供程序来集成 OAuth。 OAuth 集成在 ZooKeeper 中如何工作 要使用 OAuth 对 ZooKeeper 客户端进行认证
程序示例:OAuth 认证提供程序 这是一个简单的 OAuthAuthProvider 示例,它连接到 OAuth 授权服务器来验证令牌。 OAuthAuthProvider.java 输出 1 ![]() 输出 2 ![]() 启用 OAuth 认证提供程序的步骤 1. 编译上面的 Java 代码,并将编译后的类添加到 ZooKeeper 的类路径中。 2. 在 zoo.cfg 中注册 OAuth Auth Provider 3. 使用 OAuth 令牌进行认证 在客户端应用程序中,按以下方式传递 OAuth 令牌 7. ZooKeeper 安全配置可以通过其配置文件 (zoo.cfg) 中的各种属性来设置 ZooKeeper 的安全配置。关键配置包括
8. ZooKeeper 认证和安全最佳实践为了在使用 ZooKeeper 时确保最佳安全性,建议遵循以下最佳实践
下一主题Kafka 数据捕获 |
我们请求您订阅我们的新闻通讯以获取最新更新。