ZooKeeper的数据模型提供了ACL机制来控制访问znode。 在创建znode时,ACL将确定你可以在znode上执行的各种操作的权限。 ZooKeeper ACL模型与Unix/Linux文件许可类似,允许或阻止通过设置/取消权限位在znode上执行操作。 但是,ZooKeeper节点并不具有Unix / Linux文件系统中所有权的概念。 ACL是基于客户端和ZooKeeper服务的认证机制来确定的。
ZooKeeper基于ACL提供了以下内置认证机制:
- World:这代表任何人都可以连接到ZooKeeper服务
- Auth:这表示任何经过身份验证的用户,但不使用任何ID
- Digest:这代表了用户名和密码的认证方式
- IP address:这表示使用客户端的IP地址进行身份验证
除了前面列出的认证方案外,ZooKeeper还支持可插入的认证机制,如果需要,可以集成第三方认证方案。 ZooKeeper中的任何认证方案都包含以下两个主要认证操作:
首先,ZooKeeper中的认证框架对客户端进行认证。 客户端验证发生在客户端通过客户端信息验证连接到ZooKeeper服务时。
其次,认证框架查找ACL中与客户端对应的表项。 ACL条目是由
<IDs,Permissions>
组成的对,其中ID是标识客户端的字符串。
有关znode ACL的重要的一点是,与特定znode关联的ACL不会传播给其子节点。 客户使用ZooKeeper进行认证是可选的; 如果与znode相关的ACL需要客户端进行身份验证,则必须使用前面提到的身份验证机制进行身份验证。 ACL是身份和一组权限组合的认证机制。
ZooKeeper的ACL支持以下权限:
操作 | ACL 权限 |
---|---|
CREATE | 创建一个子节点 |
READ | 获取子节点列表和与znode相关的数据 |
WRITE | 将数据设置(写入)到znode |
DELETE | 删除一个孩子子节点 |
ADMIN | 设置ACL(权限) |
任何连接到ZooKeeper服务的客户端都有权检查是否存在znode。 这个exist
操作是不需要权限的,它允许检索一个znode的stat结构。
ZooKeeper中有许多预定义的ACL。 这些由ZooKeeper ACL定义的ID如下表所示:
ACL | 权限 |
---|---|
ANYONE_ID_UNSAFE | 这个ID代表任何人 |
AUTH_IDS | 这是用来设置ACL,用被认证的客户端的ID代替 |
OPEN_ACL_UNSAFE | 这表示完全打开的ACL,并授予除ADMIN权限之外的所有权限 |
CREATOR_ALL_ACL | 该ACL将所有权限授予znode的创建者 |
READ_ACL_UNSAFE | 这个ACL赋予所有人读取的能力 |