Apache ZooKeeper - ZK的ACL权限控制( Access Control List )

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Apache ZooKeeper - ZK的ACL权限控制( Access Control List )

20201118002915870.png

概述


ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限,可以控制节点的读写操作,保证数据的安全性 。

ZooKeeper使用ACL来控制对其znode的防问。

Zookeeper ACL 权限设置分为 3 部分组成,分别是:权限模式(Scheme)、授权对象(ID)、权限信息(Permission)


基于scheme:id:permission的方式进行权限控制: scheme表示授权模式、id模式对应值、permission即具体的增删改权限位。


权限模式(Scheme)


用来设置 ZooKeeper 服务器进行权限验证的方式 。


image.png


口令验证


用户名密码的方式


在 ZooKeeper 中这种验证方式是 Digest 认证,而 Digest 这种认证方式首先在客户端传送“username:password”这种形式的权限表示符后,ZooKeeper 服务端会对密码 部分使用 SHA-1 和 BASE64 算法进行加密,以保证安全性。


范围验证

范围验证就是说 ZooKeeper 可以针对一个 IP 或者一段 IP 地址授予某种权限。、

我们可以让一个 IP 地址为“ip:192.168.11.123”的机器对服务器上的某个数据节点具有写入的权限。或者也可以通过“ip:192.168.0.1/24”给一段 IP 地址的机器赋权。


Super权限模式

Super可以认为是一种特殊的 Digest 认证。具有 Super 权限的客户端可以对 ZooKeeper 上的任意数据节点进行任意操作.


授权对象(ID)


授权对象就是说我们要把权限赋予谁,而对应于 4 种不同的权限模式来说,

如果我们

  • 选择采用 IP 方式,使用的授权对象可以是一个 IP 地址或 IP 地址段
  • 使用 Digest 或 Super 方式,则对应于一个用户名
  • World 模式,是授权系统中所有的用户


权限信息(Permission)


权限就是指我们可以在数据节点上执行的操作种类,如下所示:在 ZooKeeper 中已经定义好的权限有 5 种:


  • 数据节点(c: create)创建权限,授予权限的对象可以在数据节点下创建子节点
  • 数据节点(w: wirte)更新权限,授予权限的对象可以更新该数据节点;
  • 数据节点(r: read)读取权限,授予权限的对象可以读取该节点的内容以及子节点的列表信息;
  • 数据节点(d: delete)删除权限,授予权限的对象可以删除该数据节点的子节点
  • 数据节点(a: admin)管理者权限,授予权限的对象可以对该数据节点体进行 ACL 权限设置。

ACL相关命令


命令 使用方式 描述
getAcl getAcl path 读取ACL权限
setAcl setAcl path acl 设置ACL权限
addauth addauth scheme auth 添加认证用户



20201118011842257.png

跳过ACL检测


可以通过系统参数zookeeper.skipACL=yes进行配置,默认是no,可以配置为true, 则配置过的ACL将不再进行权限检测

zkServer.sh

20201118195603314.png

修改后重启zk .

任意节点均可访问


20201118195748481.png


实操ACL

生成授权ID

方式一 Code

public void generateSuperDigest() throws NoSuchAlgorithmException {
    String sId = DigestAuthenticationProvider.generateDigest("artisan:xgj");
    System.out.println(sId); 
}


方式二 shell命令

echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

举例

[root@localhost bin]# echo -n artisan:xgj | openssl dgst -binary -sha1 | openssl base64
Xe7+HMYId2eNV48821ZrcFwIqIE=
[root@localhost bin]# 


方式一 digest 密文授权

创建Node的时候 设置acl

[zk: localhost:2181(CONNECTED) 10] create /artisan_node artisan_value digest:artisan:Xe7+HMYId2eNV48821ZrcFwIqIE=:cdrwa
Created /artisan_node
[zk: localhost:2181(CONNECTED) 11] get /artisan_node  # 直接查看没有访问权限的 
org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /artisan_node
[zk: localhost:2181(CONNECTED) 12] 

20201118193048717.png

或者创建node的时候不指定acl ,然后用setAcl 设置

setAcl /artisan_node digest:artisan:Xe7+HMYId2eNV48821ZrcFwIqIE=:cdrwa


如何才能有访问权限呢? 因为是给artisan这个用户赋权的

【访问前需要添加授权信息】addauth

[zk: localhost:2181(CONNECTED) 12] addauth digest artisan:xgj
[zk: localhost:2181(CONNECTED) 13] get /artisan_node
artisan_value
[zk: localhost:2181(CONNECTED) 14] 


方式二 auth 明文授权

[zk: localhost:2181(CONNECTED) 14] addauth digest aaa:passwddd
[zk: localhost:2181(CONNECTED) 15] create /artisanNNN  nodeValue auth:aaa:passwddd:cdwra   # 这是aaa用户授权信息会被zk保存,可以认为当前的授权用户为aaa
Created /artisanNNN
[zk: localhost:2181(CONNECTED) 16] get /artisanNNN
nodeValue
[zk: localhost:2181(CONNECTED) 17] 


方式三 IP授权模式

创建时设置ip的权限

create /node-ip  data  ip:192.168.11.123:cdwra


或者创建完成以后 手工调用setAcl

setAcl /node-ip ip:192.168.11.123:cdwra

2020111819531139.png

登录 109.130 ,然后访问zk


20201118195429767.png


20201118195511899.png

多个指定IP可以通过逗号分隔, 如 setAcl /node-ip ip:IP1:rw,ip:IP2:a


Super 超级管理员模式

是一种特殊的Digest模式, 在Super模式下超级管理员用户可以对Zookeeper上的节点进行任何的操作.

-Dzookeeper.DigestAuthenticationProvider.superDigest=super:<base64encoded(SHA1(password))


在DigestAuthenticationProvider类中定义的

参考如下



20201118200200301.png


重启zk , 就进入了超级管理员模式

20201118200449511.png


任意操作咯

20201118200559328.png


特殊说明


权限仅对当前节点有效,不会让子节点继承。如限制了IP防问A节点,但不妨碍该IP防问A的子节点 /A/B

20201118010749856.png


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 Java Linux
【Zookeeper】Introduction to Apache Curator
【Zookeeper】Introduction to Apache Curator
79 0
|
2月前
|
SQL 分布式计算 Hadoop
org.apache.hadoop.security.AccessControlException Permission denied: user=anonymous, access=WRITE...
在尝试通过 HiveServer2 远程执行 DDL 操作时遇到权限错误,错误信息显示匿名用户(`anonymous`)无权执行写操作。解决方案包括:1) 使用 `hdfs dfs -chmod -R +777 /warehouse` 给目录授权(不推荐,仅适用于测试环境);2) 配置 Hive 和 Hadoop,创建具有权限的用户,如 `ad`,并将该用户添加到 Hive 的管理员角色和 Hadoop 的 proxyuser 配置中,然后重启相关服务。通过 `beeline` 测试连接和操作,确认权限问题已解决。
|
2月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
47 11
|
2月前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
52 1
|
2月前
|
存储 Java 网络安全
ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
【4月更文挑战第8天】ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
30 1
|
2月前
|
存储 Linux 数据库
ZooKeeper【搭建 01】apache-zookeeper-3.6.2 单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置(一篇入门zookeeper)
【4月更文挑战第8天】ZooKeeper【搭建 01】apache-zookeeper-3.6.2 单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置(一篇入门zookeeper)
71 0
|
2月前
|
Apache
Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动
59 2
|
2月前
|
监控 安全 Apache
Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )
Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )
135 1
|
2月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
36 0
|
2月前
|
存储 Java 网络安全
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
65 0

推荐镜像

更多