etcd-RBAC基于角色的访问控制

概述

身份验证是在 etcd 2.1 中添加的。etcd v3 API 稍微修改了身份验证功能的 API 和用户界面,以更好地适应新的数据模型。本指南旨在帮助用户在 etcd v3 中设置基本身份验证和基于角色的访问控制。

特殊用户和角色

有一个特殊用户:root

一个特殊角色:root

root用户

root必须在激活身份验证之前创建对 etcd 具有完全访问权限的用户。root用户背后的想法是出于管理目的:管理角色和普通用户。该root用户必须具有root角色的作用,并使其改变etcd中任何东西。

root角色

root除了 root 用户之外,该角色还可以授予任何用户。具有该root角色的用户具有全局读写访问权限和更新集群身份验证配置的权限。此外,该root角色授予一般集群维护的权限,包括修改集群成员资格、对存储进行碎片整理和拍摄快照。

使用user子命令

etcdctl的user子命令处理与用户帐户有关的所有事情。

以下命令用于查看用户列表

etcdctl user list

创建用户

etcdctl user add myusername

创建用户时会交互式输入密码

--interactive=false 可以不适用交互式输入密码。使用标准输入,输入密码

--new-user-password也可以用来提供密码

修改用户的密码

etcdctl user passwd myusername

修改密码将提示输入密码。

修改密码时也可以通过--interactive=false,通过标准输入,输入密码。

可以对用户授权角色(grant-role)或者撤销角色(revoke-role)

etcdctl user grant-role myusername foo 
etcdctl user revoke-role myusername bar

检查用户设置

etcdctl user get myusername

删除用户

etcdctl user delete myusername

使用role子命令

etcdctl的role子命令处理与特定角色的访问控制有关的所有事情。就像授权个人用户。

查看角色列表

etcdctl role list

新建角色

etcdctl role add myrolename

角色没有密码。只是定义了一组新的访问权限。

角色被授权访问单个key或者一组key。

一组key可以指定其区间,范围为[start-key,end-key),包含start-key、不包含end-key。

可以以读、写或两者兼有的方式授予访问权限,如以下示例所示:

# 授权可读单个key:/foo
etcdctl role grant-permission myrolename read /foo

# 授权读权限前缀为/foo/的key。前缀的意思和范围[/foo/, /foo0)一样
etcdctl role grant-permission myrolename --prefix=true read /foo/

# 授权写权限给key:/foo/bar
etcdctl role grant-permission myrolename write /foo/bar

#授权所有权限给key:范围在[key1, key5)
etcdctl role grant-permission myrolename readwrite key1 key5

# 授权所有权限,给前缀为/pub/的key
etcdctl role grant-permission myrolename --prefix=true readwrite /pub/

查看角色授予的权限

etcdctl role get myrolename

撤销权限,逻辑和授权一样

etcdctl role revoke-permission myrolename /foo/bar

删除角色

etcdctl role delete myrolename

启用身份验证

启用auth的最小步骤如下。管理员可以根据需要在启用身份验证之前或之后设置用户和角色

确保root用户已创建

etcdctl user add root

开启鉴权

etcdctl auth enable

在此之后,etcd将在启用身份验证的情况下运行。

如要禁用身份验证请使用如下命令

etcdctl --user root:rootpassword auth disable

使用etcdctl时身份认证

etcdctl支持和curl命令相似的身份认证标签

etcdctl --user user:password get foo

也可以交互式输入密码

etcdctl --user user get foo

可以通过--password标签输入密码

etcdctl --user user --password password get foo

实践

创建特殊用户和特殊角色

./etcdctl --endpoints=http://127.0.0.1:2379 user add root:etcd
./etcdctl --endpoints=http://127.0.0.1:2379 role add root
./etcdctl --endpoints=http://127.0.0.1:2379 user grant-role root root
./etcdctl --endpoints=http://127.0.0.1:2379 auth enable

查看用户和角色list

[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd user list
root
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd role list
root

查看用户设置信息

[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd user get root
User: root
Roles: root

 查看角色授权信息

[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd role get root
Role root
KV Read:
KV Write:

 

测试用户权限验证

创建测试用户和角色,并授权

./etcdctl --user root:etcd user add testuser
./etcdctl --user root:etcd role add testrole
./etcdctl --user root:etcd user grant-role testuser testrole

查看测试用户设置和角色权限

[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd user get testuser
User: testuser
Roles: testrole
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd role get testrole
Role testrole
KV Read:
KV Write:

是可以看到,测试的用户设置,和角色的权限是和root用户和角色相似的。

验证测试角色的权限和root角色的权限是否有所不同?

虽然root角色和testrole角色在授权上都是空的,但是root是特殊角色,而testrole是真的没有任何权限。验证如下:

[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd get /apisix-platform/consumers/
/apisix-platform/consumers/
init_dir
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user testuser:testuser get /apisix-platform/consumers/
{"level":"warn","ts":"2021-07-18T02:06:14.654+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-bf0061b7-f840-4563-bd2d-ed8e4a569a48/127.0.0.1:2379","attempt":0,"error":"rpc error: code = PermissionDenied desc = etcdserver: permission denied"}
Error: etcdserver: permission denied

在给testrole用户授权之后,再次尝试。有权限的testrole角色才可以正常查看key。验证如下:

#授权testrole角色可读key:/apisix-platform/consumers/
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd role grant-permission testrole read /apisix-platform/consumers/
Role testrole updated

#查看testrole角色权限
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user root:etcd role get testrole
Role testrole
KV Read:
	/apisix-platform/consumers/
KV Write:

#验证
[root@ip-172-24-24-122 etcd-v3.4.14-linux-amd64]# ./etcdctl --user testuser:testuser get /apisix-platform/consumers/
/apisix-platform/consumers/
init_dir

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RBAC(Role-Based Access Control)基于角色访问控制是一种广泛应用的访问控制模型,它将权限授予角色,然后将角色分配给用户。以下是RBAC的一些典型应用场景: 1. 企业内部系统权限管理:在企业内部系统中,不同的员工可能需要不同的权限来访问不同的功能和数据。RBAC可以通过定义不同的角色,将相应的权限分配给这些角色,然后将角色分配给员工,从而实现对系统的访问控制。 2. 网络系统安全管理:在网络系统中,RBAC可以用于管理用户对网络资源的访问权限。例如,管理员可以拥有对所有资源的完全访问权限,而普通用户只能访问特定的资源。通过RBAC,可以灵活地管理用户的权限,提高系统的安全性。 3. 电子商务平台权限管理:在电子商务平台中,不同的用户可能需要不同的权限来进行购买、销售、管理等操作。RBAC可以用于定义不同的角色,如买家、卖家、管理员等,并将相应的权限分配给这些角色。这样,可以确保每个用户只能执行其具备权限的操作。 4. 医疗信息系统权限管理:在医疗信息系统中,RBAC可以用于管理医生、护士、患者等用户对病历、诊断结果等敏感信息的访问权限。通过RBAC,可以确保只有授权的用户才能访问和修改相关信息,保护患者隐私和数据安全。 5. 云计算平台权限管理:在云计算平台中,RBAC可以用于管理不同用户对云资源的访问权限。例如,云管理员可以拥有对所有资源的管理权限,而租户只能访问其租用的资源。通过RBAC,可以实现对云资源的细粒度访问控制,提高云平台的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值