项目中使用 ectd 进行新建角色授权。
赋予角色指定目录的读写权限。
java 客户端 pom
<dependency>
<groupId>io.etcd</groupId>
<artifactId>jetcd-core</artifactId>
<version>0.7.5</version>
</dependency>
授权方法
authClient.roleGrantPermission(
convert2ByteSequence(roleName),
convert2ByteSequence(key),
convert2ByteSequence(rangeEnd,
Permission.Type.READWRITE);
记录:
roleName角色名称
key 为要授权的目录,
rangeEnd 为目录的范围。
这个目录范围很有意思,以为是 “prefix=true”,设置之后 查看授权为
KV Read:
[/dsone001ET/, prefix=true )
KV Write:
[/dsone001ET/, prefix=true)
实际操作之后,发现这个权限限制有问题,目录/dsonef001ET 也能操作,这不符合角色的授权范围。
于是用 原生的 etcdctl 命令手动授权
etcdctl role grant-permission role_ds_test --prefix=true readwrite /dsone001ET/ --user=root:123456
发现授权之后的角色权限为:
KV Read:
[/dsone001ET/, /dsone001ET0) (prefix /dsone001ET/)
KV Write:
[/dsone001ET/, /dsone001ET0) (prefix /dsone001ET/)
与 java客户端授权的权限不一致。于是 把 rangeEnd 参数,手动改成 和 etcdctl 授权的角色范围一致
rangeEnd=“/dsone001ET0) (prefix /dsone001ET/”;
重新授权后,权限范围和ctl授权的一致,好使了。
网友评论