etcd集群开启用户身份认证

简介: etcd集群开启用户身份认证,发现单机etcd和集群的授权不会同步,单机启动的是单机实例,集群启动的是集群实例
etcd  命令含义
`--name` 
etcd集群中的节点名,这里可以随意,可区分且不重复就行
`--listen-peer-urls`
监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等) 
 `--initial-advertise-peer-urls`
建议用于节点之间通信的url,节点间将以该值进行通信。
`--listen-client-urls`
监听的用于客户端通信的url,同样可以监听多个。
`--advertise-client-urls`
建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。
`--initial-cluster-token etcd-cluster-1`
节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。
-`-initial-cluster`
也就是集群中所有的initial-advertise-peer-urls 的合集
`--initial-cluster-state new`
新建集群的标志,初始化状态使用 new,建立之后改此值为 existing


etcd 集群搭建完成之后,默认条件下,访问 etcd 是没有用户和密码限制的,任何人只要能连接到 etcd 的 2379 端口,就可以读写 etcd 数据,这就存在安全问题。etcd 支持用户身份认证,但是该功能默认是关闭的,下面将介绍如何开启 etcd 的用户身份认证功能。

etcd集群:

endpoints=192.168.56.200:2379,192.168.56.200:3379,192.168.56.200:4379

1. 创建 etcd 角色

创建 3 个角色,分别为 root,read_write,read_only,root 角色和用户必须要创建,否则开启用户认证会报错,read_write 表示读写角色,read_only 表示只读角色,如下:

  • etcdctl --endpoints=${endpoints} role add root
  • etcdctl --endpoints=${endpoints} role add read_write
  • etcdctl --endpoints=${endpoints} role add read_only

2. 给角色赋予权限

read_write 角色拥有读写权限,read_only 角色拥有只读权限,并且它们只能对前缀为 / 的 key 进行读写。

  • etcdctl --endpoints=${endpoints} role grant-permission read_write --prefix=true readwrite /
  • etcdctl --endpoints=${endpoints} role grant-permission read_only --prefix=true read /

3. 创建 etcd 用户

创建 etcd 用户 root, admin 和 monitor,密码都是 123456。

  • etcdctl --endpoints=${endpoints} user add root:123456
  • etcdctl --endpoints=${endpoints} user add admin:123456
  • etcdctl --endpoints=${endpoints} user add monitor:123456

4. 将角色赋予用户

用户 admin 的角色为 read_write,用户 monitor 的角色为 read_only。

  • etcdctl --endpoints=${endpoints} user grant-role root root
  • etcdctl --endpoints=${endpoints} user grant-role admin read_write
  • etcdctl --endpoints=${endpoints} user grant-role monitor read_only

5. 开启 etcd 用户认证

etcdctl --endpoints=${endpoints} auth enable

6. 测试 etcd 用户认证

没有指定用户名和密码时,会报错,如下:

[root@localhost ~]# etcdctl --endpoints=${endpoints} get /mykey
{"level":"warn","ts":"2020-09-28T11:29:04.668+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of 
unary invoker failed","target":"endpoint://client-7f830105-4bac-4ec5-8b5e-1e97181639a5/192.168.56.200:2379","attempt":0,"error":"rpc error: code = InvalidArgument desc = etcdserver: user name is empty"}
Error: etcdserver: user name is empty

指定正确的用户名和密码,再次重试:

[root@localhost ~]# etcdctl --endpoints=${endpoints} --user=admin:123456 put /mykey 'myvalue'
OK
[root@localhost ~]# etcdctl --endpoints=${endpoints} --user=admin:123456 get /mykey
/mykey
myvalue

访问不是 / 前缀的 key,仍然报错,因为设置的账号只对 / 前缀的 key 有访问权限,如下:

[root@localhost ~]# etcdctl --endpoints=${endpoints} --user=admin:123456 get test
{"level":"warn","ts":"2020-09-28T11:34:30.184+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of 
unary invoker failed","target":"endpoint://client-251bbf93-44b8-4e62-a68a-1549011d4f87/192.168.56.200:2379","attempt":0,"error":"rpc error: code = PermissionDenied desc = etcdserver: permission denied"}
Error: etcdserver: permission denied

monitor 账号只有只读权限,不能写入数据,如果使用 monitor 账号写入数据,会报错,如下:

[root@localhost ~]# etcdctl --endpoints=${endpoints} --user=monitor:123456 put /mykey '1'
{"level":"warn","ts":"2020-09-28T11:35:30.901+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of 
unary invoker failed","target":"endpoint://client-097c6a6e-4e25-42eb-ba13-0f6f61688513/192.168.56.200:2379","attempt":0,"error":"rpc error: code = PermissionDenied desc = etcdserver: permission denied"}
Error: etcdserver: permission denied

发现单机etcd和集群的授权不会同步,单机启动的是单机实例,集群启动的是集群实例。

etcd的集群 ,如果只剩一个节点,etcd集群不可用。

相关文章
|
12天前
|
Kubernetes Java Nacos
nacos常见问题之通过helm方式部署设置开启授权认证功能如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
109 0
EMQ
|
12天前
|
JSON 安全 API
EMQX Enterprise 5.3 发布:审计日志、Dashboard 访问权限控制与 SSO 一站登录
EMQX Enterprise 5.3.0 版本已正式发布! 新版本带来多个企业特性的更新,包括审计日志,Dashboard RBAC 权限控制,以及基于 SSO(单点登录)的一站式登录,提升了企业级部署的安全性、管理性和治理能力。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。
EMQ
290 0
|
12天前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|本地存储hostpath-provisioner部署以及无token密码方式登陆dashboard的部署
云原生|kubernetes|本地存储hostpath-provisioner部署以及无token密码方式登陆dashboard的部署
28 0
|
10月前
|
NoSQL MongoDB 数据库
mongodb使用使用 SCRAM 验证客户端设置访问控制
SCRAM 验证客户端设置访问控制
78 0
|
网络协议 关系型数据库 Unix
OushuDB-客户端认证-配置方法
OushuDB-客户端认证-配置方法
68 0
ACK注册集群agent组件的RBAC权限设置
ACK注册集群agent组件的RBAC权限设置
281 0
EMQ
|
存储 NoSQL 安全
EMQX Cloud 更新:新增 Redis 和 JWT 外部认证授权
近日 EMQX Cloud 开放了 Redis 和 JWT 两种外部认证授权方式。用户可以在进行认证鉴权时将有更多的选择,灵活实现更安全、快速的海量设备接入。
EMQ
218 0
EMQX Cloud 更新:新增 Redis 和 JWT 外部认证授权
|
存储 消息中间件 缓存
keycloak集群化的思考
keycloak集群化的思考
keycloak集群化的思考
|
容器
在AlibabaCloud上,如何使用AD FS进行SSO登录并完成在容器服务ACK集群中的身份验证之 【用户SSO】
阿里云支持基于SAML 2.0的SSO(Single Sign On,单点登录),也称为身份联合登录。本文以Microsoft Active Directory (AD) 为例为您介绍企业如何使用自有的身份系统实现与阿里云的SSO并在容器服务ACK集群中进行身份验证。 本文主要介绍 ** AD FS的安装部署 **, ** 用户SSO ** 配置和登录, 如需了解 **角色SSO** 配置和
515 0
在AlibabaCloud上,如何使用AD FS进行SSO登录并完成在容器服务ACK集群中的身份验证之 【用户SSO】
|
容器
在AlibabaCloud上,如何使用AD FS进行SSO登录并完成在容器服务ACK集群中的身份验证之 【角色SSO】
阿里云与企业进行角色 SSO 时,阿里云是服务提供商(SP),而企业自有的身份管理系统则是身份提供商(IdP)。通过角色 SSO,企业可以在本地 IdP 中管理员工信息,无需进行阿里云和企业 IdP 间的用户同步,企业员工将使用指定的 RAM 角色来登录阿里云。 本文主要介绍 **AD FS的配置** , **角色SSO 配置和登录**, 如需了解 **用户SSO 配置和登录** 请参考 [
387 0
在AlibabaCloud上,如何使用AD FS进行SSO登录并完成在容器服务ACK集群中的身份验证之 【角色SSO】