【ETCD】ETCD用户密码认证

目录

概述

特殊用户和角色

root用户

root角色

用户操作

角色操作

启用身份验证

使用etcdctl进行身份验证

使用TLS通用名称


概述


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

特殊用户和角色

有一个特殊用户root和一个特殊角色root。

root用户

root用户拥有对etcd的完全访问权限,必须在启用身份验证之前创建。root用户的理念是用于管理角色和普通用户。root用户必须具有root角色,并允许更改etcd内的任何内容。

root角色

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

用户操作


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

可以使用以下命令列出用户:

$ etcdctl user list
root


创建用户非常简单,只需运行:

# 创建用户 yanhaihang
$ etcdctl user add yanhaihang
Password of yanhaihang:
Type password of yanhaihang again for confirmation:
User yanhaihang created


创建新用户时会提示输入新密码。当给出--interactive=false选项时,可以从标准输入提供密码。也可以使用--new-user-password选项提供密码。

可以使用以下命令为用户授予和撤销角色:

# 授予
$ etcdctl user grant-role  yanhaihang role_yhh
Role role_yhh is granted to user yanhaihang# 撤销etcdctl user revoke-role   yanhaihang role_yhh
Role role_yhh is revoked from user yanhaihang

可以使用以下命令检查用户的设置:

$ etcdctl user get yanhaihang
User: yanhaihang
Roles: role_yhh$ etcdctl user get root
User: root
Roles:

并且可以使用以下命令更改用户的密码:

$ etcdctl user passwd yanhaihang
Password of yanhaihang:
Type password of yanhaihang again for confirmation:
Password updated

更改密码会再次提示输入新密码。当给出--interactive=false选项时,可以从标准输入提供密码。

使用以下命令删除帐户:

$ etcdctl user delete yanhaihang
User yanhaihang deleted

角色操作


etcdctl的角色子命令处理与授予单个用户的特定角色的访问控制有关的所有事项。

可以使用以下命令列出角色:

$  etcdctl role list
role_yhh
root

可以使用以下命令创建新角色:

# 创建root 角色$ etcdctl role add root
Role root created

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

角色被授予对单个键或一系列键的访问权限。

范围可以指定为区间[start-key, end-key),其中start-key在字母顺序上应小于end-key。

可以像以下示例中那样授予读取、写入或两者的访问权限:

# 授予对键/foo的读取访问权限$ etcdctl role grant-permission role_yhh read /foo
Role role_yhh updated# 授予对以/foo/为前缀的键的读取访问权限。前缀等于范围[/foo/, /foo0)$ etcdctl role grant-permission role_yhh  --prefix=true read /foo/
Role role_yhh updated# 授予对/foo/bar处的键的仅写入访问权限$ etcdctl role grant-permission role_yhh  write /foo/bar
Role role_yhh updated# 授予对[key1, key5)范围内的键的完全访问权限$ etcdctl role grant-permission role_yhh readwrite key1 key5
Role role_yhh updated# 授予对以/pub/为前缀的键的完全访问权限etcdctl role grant-permission role_yhh --prefix=true readwrite /pub/# 要查看授予的内容,我们可以随时查看角色:
$ etcdctl role get  role_yhh
Role role_yhh
KV Read:/foo[/foo/, /foo0) (prefix /foo/)[key1, key5)
KV Write:/foo/bar[key1, key5)# 撤销权限的逻辑方式与授予权限相同:
$ etcdctl role revoke-permission role_yhh  /foo/bar
Permission of key /foo/bar is revoked from role role_yhh# 就像完全删除角色一样:$ etcdctl role remove myrolename

启用身份验证


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

本次操作为3.3版本

设置环境变量 设置为v3 版本

 export ETCDCTL_API=3

确保已创建root用户:

$ etcdctl user add root

启用身份验证:

$ etcdctl auth enable

开启身份认证后 如果不提供密码 再执行命令就会报以下错误 :Error: etcdserver: user name is empty

$  etcdctl get /service/patroni_test_cluster/leader
Error: etcdserver: user name is empty

之后,etcd将以启用身份验证的方式运行。

如果出于某些原因要禁用它,请使用相反的命令:

# 关闭用户密码认证 
$ etcdctl --user root:root auth disable
Authentication Disabled

这样v3 版本的访问就需要用户密码了

v2版本???

$ etcdctl --version
etcdctl version: 3.3.11
API version: 2

为什么开启认证后不加用户密码还能查数据 新增数据??

$ etcdctl ls
/mykey
$ etcdctl --username root:123456 ls
/mykey

但是查询用户却报权限问题 ,说明有认证

$ etcdctl user get yanhaihang
Insufficient credentials$ etcdctl --username root:123456 user get yanhaihang
User: yanhaihang
Roles:

使用etcdctl进行身份验证


etcdctl支持与curl类似的身份验证标志。

 etcdctl  --user root:root  get /service/patroni_test_cluster/leader

密码可以从提示中获取:
 

 etcdctl  --user root  get /service/patroni_test_cluster/leader
Password:

密码也可以从命令行标志--password中获取:

V3.3 版本提示没有这个参数 Error: unknown flag: --password

 etcdctl  --user="root"  --password="root"  get   /service/patroni_test_cluster/leader
Error: unknown flag: --password


否则,所有etcdctl命令都保持不变。仍然可以创建和修改用户和角色,但需要具有root角色的用户进行身份验证。

使用TLS通用名称


从v3.2版本开始,如果etcd服务器使用选项--client-cert-auth=true启动,则客户端TLS证书中的通用名称(CN)字段将用作etcd用户。在这种情况下,通用名称会验证用户,并且客户端不需要密码。请注意,如果同时满足以下条件,则基于用户名和密码的身份验证将被优先:1. 传递了--client-cert-auth=true,并且客户端提供了CN;2. 客户端提供了用户名和密码。请注意,此功能不能与gRPC-proxy和gRPC-gateway一起使用。这是因为gRPC-proxy会终止来自其客户端的TLS,因此所有客户端都共享代理的证书。gRPC-gateway在将HTTP请求转换为gRPC请求时使用内部TLS连接,因此它也具有相同的限制。因此,客户端无法正确地向服务器提供其CN。如果给定的证书具有非空的CN,gRPC-proxy将引发错误并停止。gRPC-proxy返回一个错误,指示客户端的证书中具有非空的CN。

从v3.3版本开始,如果etcd服务器使用选项--peer-cert-allowed-cn启动,则会启用CN对等连接筛选。只有当它们的CN与允许的CN匹配时,节点才能加入etcd集群。有关更多详细信息,请参阅etcd安全页面。

版本 3.3

参考 

https://etcd.io/docs/v3.3/op-guide/authentication/

官方文章 Demo 中的 Auth章节

Demo | etcd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王道考研编程题总结

我还在完善中,边复习边完善(这个只是根据我自身总结的) 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize];int length; }SqList 2. 编程题 1. 删除最小值 题意 :从顺序表中删除…

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件

主要讲述封装一个3D轮播相册的组件&#xff0c;效果图如下&#xff0c;仅仅传入一个图片的数组即可&#xff0c;效果如下&#xff1a; 使用Vue3技术开发&#xff0c;支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…

本地运行打包好的dist

首先输入打包命令 每个人设置不一样 一般人 是npm run build如果不知道可以去package.json里去看。 打包好文件如下 命令行输入 :npm i -g http-server 进入到dist目录下输入 命令cmd 输入 http-server 成功

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措&#xff0c;通过该认证&#xff0c;软件可以在华为的生态系统中实现更好的兼容性和性能优化&#xff0c;从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…

RabbitMQ介绍及安装

文章目录 一. MQ二. RabbitMQ三. RabbitMQ作用四. MQ产品对比五. 安装RabbitMQ1. 安装erlang2. 安装rabbitMQ3. 安装RabbitMQ管理界⾯4. 启动服务5. 访问界面6. 添加管理员用户7. 重新登录 一. MQ MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先⼊先出&#xff…

Vue生成类似于打卡页面

数据表格 <el-table :data"tableData" border height"calc(100vh - 240px)" :cell-style"cellFun"><el-table-column label"姓名" show-overflow-tooltip prop"name" align"center"/><el-table-co…

vscode上传本地文件到服务器

vscode上传本地文件到服务器 首先下载插件SFTP&#xff0c;我们通过ftp进行文件传输 VScode打开要传输的文件 使用快捷键 ctrlshiftP 打开搜索窗口&#xff0c;搜索SFTP 点击之后vscode文件夹下会生成对应json文件 我们编辑json信息根据远程的服务器情况填写&#xff0c;比如…

趣味数学 2.3.7 | 完全免费,无注册登录,简约纯净

趣味数学是一款完全免费的数学学习软件&#xff0c;支持安卓系统。它无需登录注册&#xff0c;界面简约纯净&#xff0c;分类详细&#xff0c;涵盖趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等多个分类。每个分类包含丰富的题目和关卡&a…

JavaScript 快速上手

目录 一. JavaScript 基本概念 二. JavaScript 基本语法 1. 三种引入方式 (1) 行内样式 (2) 内部样式 (3) 外部样式 2. 基础语法 (1) 变量 (2) 数据类型 (3) 运算符 3. JS 对象 (1) 数组 <1> 创建数组 <2> 数组操作 (2) 函数 <1> 普通函数 &…

php基础:文件处理2

1.文件属性 当我们在程序中操作文件时&#xff0c;可能会使用到文件的一些常见属性&#xff0c;比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数&#xff0c;如下表所示。 2.目录操作 新建目录&#xff1a;mkdir(路…

(二)FT2232HL调试器的驱动安装

1、FT2232HL调试器 FT2232HL调试器淘宝链接&#xff1a; http://e.tb.cn/h.TZH7byCQ1jwlqhy?tkdZo03JTjtwL ​ 2、软件下载 下载zadig-2.9.exe&#xff08;免安装&#xff09; 链接&#xff1a;https://www.filecroco.com/download-zadig/download/ ​ ​ 3、驱动安装 1…

远程debug

这里写自定义目录标题 一、首先配置idea二、配置jvm1、将刚才idea生成的jvm指令复制下来&#xff0c;就是如下内容&#xff08;注意要从你的idea中复制&#xff09;2、在粘贴之前&#xff0c;要拼接上java-jar命令&#xff0c;还有servery,suspendy命令&#xff0c;最后拼接项目…

Html笔记():蜘蛛纸牌之卡片设计

效果 代码 <!DOCTYPE html> <html><head><style>body{display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #2b2b2b;}.card{/*设置卡牌的外观*/width: 150px;height: 200px;background-color: #00ffcc;borde…

【二分查找】力扣 875. 爱吃香蕉的珂珂

一、题目 二、思路 速度 k&#xff08;单位&#xff1a;根/小时&#xff09;是存在一个取值范围的。 速度越大肯定在规定的时间之内一定会吃完全部的香蕉&#xff0c;但也是可以确定出一个上界的。由于只要保证一小时之内&#xff0c;可以吃完香蕉数目最多的那一堆的香蕉&…

计算机网络-GRE基础实验二

前面我们学习了GRE隧道的建立以及通过静态路由指向的方式使得双方能够网络互联&#xff0c;但是通过静态路由可能比较麻烦&#xff0c;GRE支持组播、单播、广播因此可以在GRE隧道中运行动态路由协议使得网络配置更加灵活。 通过前面的动态路由协议的学习我们知道动态路由协议都…

QNX的内存布局和启动入口

参考资料: QNX官网文档 内存布局 添加图片注释,不超过 140 字(可选) 查看系统内存布局 # pidin syspage=asinfo Header size=0x00000108, Total Size=0x0000d1b0, #Cpu=8, Type=257 Section:asinfo offset:0x0000bdf0 size:0x00000d00 elsize:0x000000200000

重生之我在异世界学智力题(1)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言智力题题目&#xff1a;《奇怪的时钟…

【优选算法】模拟

目录 一、[替换所有的问号](https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/)二、[提莫攻击](https://leetcode.cn/problems/teemo-attacking/description/)三、[Z 字形变换](https://leetcode.cn/problems/zigzag-conver…

Pandas | 检查布尔序列函数any() 和 all()的区别

在 Python 中使用 pandas 库时&#xff0c;.any() 和 .all() 是两个用于检查布尔序列&#xff08;如 pandas 的 Series&#xff09;的函数&#xff0c;它们的行为和用途有所不同&#xff1a; 通常用于检查两列元素是否一致或者个别一致的情况 .any(): .any() 函数用于检查序列…

关于HTTP DEBUGGER PRO的DURATION列一点理解

最近在排查一个网络问题的时候&#xff0c;使用了HTTP DEBUGGER PRO进行抓包。发现HTTP DEBUGGER PRO抓包显示的DURATION列的耗时不太对劲&#xff0c;于是排查完网络问题就去看了下这个DURATION列实际所指的耗时&#xff0c;就有了这篇文章。 使用POSTMAN对https://www.rust-l…