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