ETCD 中的RBAC账号角色授权

Role base access control in ETCD

Posted by alovn on June 1, 2020

etcd 自 2.1版本开始加入权限认证。可在etcd v3中设置基本身份验证和基于角色的访问控制。

root用户和角色

etcd中有一个特殊的用户:root, 还有一个特殊的角色:root.

root用户对etcd有完整的权限,root用户主要是为了管理etcd使用,启用权限认证前必须要前创建该用户。root用户的角色也必须是root角色。

root角色也可以授权给其他用户,一个用户拥有了root角色后,对整个etcd有完全的读写权限,还可以配置权限。另外,root角色还可以修改集群成员资格、执行defrag 进行碎片整理、存取快照。

账号管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//列出账号
etcdctl user list
//新增账号
etcdctl user add myusername

//对账号赋予角色
etcdctl user grant-role myusername foo
//收回角色
etcdctl user revoke-role myusername bar

//查看账号信息
etcdctl user get myusername
//修改账号密码
etcdctl user passwd myusername
//删除账号
etcdctl user delete myusername

角色管理

1
2
3
4
//列出角色
etcdctl role list
//新增角色
etcdctl role add myrolename

角色没有密码,它仅仅定义一组访问权限,角色可以被授权访问一个key,或者是多个key。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//授予角色 对单独key /foo 只读权限
etcdctl role grant-permission myrolename read /foo

//授予角色 对以 /foo/为前缀key 的只读权限
etcdctl role grant-permission myrolename --prefix=true read /foo/

//授予角色读写权限 [key1, key5)
etcdctl role grant-permission myrolename readwrite key1 key5

//授予角色 /pub/ 前缀 读写权限
etcdctl role grant-permission myrolename --prefix=true readwrite /pub/

//查看角色授予了哪些权限
etcdctl role get myrolename

//回收角色的访问权限
etcdctl role revoke-permission myrolename /foo/bar

//删除角色
etcdctl role delete myrolename

启用权限认证

配置好账号和角色后,就可以启用权限认证了, 一定要确保root用户已被创建好。

1
2
3
4
5
6
7
//添加root
etcdctl user add root
//启用认证
etcdctl auth enable

//若要取消认证:
etcdctl --user root:rootpw auth disable

启用认证后,就要用以下方式来执行etcdctl了:

1
etcdctl --user user:password get foo

也可以用以下命令,执行后需要你输入账号密码:

1
etcdctl --user user get foo

参考官网文档