Etcd安全配置之Basic Auth认证
《中小团队落地配置中心详解》文章中我们介绍了如何基于Etcd+Confd构建配置中心,最后提到Etcd的安全问题时说了可以使用账号密码认证以达到安全访问的目的,究竟该如何开启认证以及怎么设计权限访问呢?本文将为你详细解读
认证说明
- Etcd v2以上的版本才支持权限认证,且仅支持Basic Auth
- Etcd通过用户(user)-角色(role)-权限的方式来控制访问,用户关联角色,角色拥有权限,从而用户也就拥有了相应的权限
- Etcd默认没有启用认证机制,只要能连接etcd服务就拥有所有的权限,还是非常危险的,另一种安全的访问方式是开启ssl,只有使用受信任的证书才能访问数据
- Etcd开启Basic Auth之后,默认会启用两个角色root和guest,root角色拥有所有权限,guest拥有只读权限,这两个角色都不要删除,否则你可能会遇到意想不到的Bug
- Etcd的权限分为只读、只写、可读写,可以对etcd的详细key进行授权,例如:/conf/project/dev/nginx.conf,也可以授权key前缀(目录),例如:/conf/project/,授权规则应以最小满足需求为准则
权限设计
权限设计应先考虑我们对权限的需求,从需求出发设计权限
- 需求
- 为了方便后续管理,规定配置中心所有key都应已/conf/开头
- 需要两个账号,一个账号用在Kerrigan(WebUI)拥有读取、写入、修改、删除key的权限,一个账号用在confd,只有只读的权限,能够读取配置就可以了
- 设计
- 需求很简单,我们需要建立两个账号,分别对应两个角色,两个角色都是对/conf/开头的Key进行控制,一个读写权限,一个只读权限
- 定义只读账号名为readx,只读角色名为readConf,定义读写权限账号名为authz,读写权限为rootConf,可操作的key都为/conf/开头
详细步骤
1.添加root用户
# etcdctl user add root
New password: 12345
User root created
2.创建root账号后,root默认有root角色,对所有KV有读写权限
# etcdctl user get root
User: root
Roles: root
# etcdctl role get root
Role: root
KV Read:
/*
KV Write:
/*
3.开启auth认证
# etcdctl auth enable
Authentication Enabled
开启权限认证后默认会多一个guest的角色
# etcdctl --username root:12345 role list
guest
root
4.添加非root账号,一个authz的账号,一个readx的账号
# etcdctl --username root:12345 user add authz
New password:
User authz created
# etcdctl --username root:12345 user add readx
New password:
User readx created
5.添加角色,一个rootConf的角色,一个readConf的角色
# etcdctl --username root:12345 role add rootConf
Role rootConf created
# etcdctl --username root:12345 role add readConf
Role readConf created
6.为角色授权,readConf角色对/conf有只读权限,rootConf角色对/conf有读写权限
# etcdctl --username root:12345 role grant --read --path /conf/* readConf
Role readConf updated
# etcdctl --username root:12345 role grant --readwrite --path /conf/* rootConf
Role rootConf updated
7.给用户分配角色,authz账号分配rootConf角色,readx账号分配readConf角色
# etcdctl --username root:12345 user grant --roles rootConf authz
User authz updated
# etcdctl --username root:12345 user grant --roles readConf readx
User readx updated
8.查看用户所拥有的角色
# etcdctl --username root:12345 user get authz
User: authz
Roles: rootConf
# etcdctl --username root:12345 user get readx
User: readx
Roles: readConf
这样readx账号就对/conf下的所有文件有了只读权限,authz对/conf下的所有文件有了读写权限
常用命令
有一些命令上边没有介绍到,会用得到的如下:
1.关闭认证
# etcdctl --username root:12345 auth disable
2.删除用户
# etcdctl --username root:12345 user remove userx
3.用户撤销角色
# etcdctl --username root:12345 user revoke rolex
4.修改用户密码
# etcdctl --username root:12345 user passwd
同时还有删除角色、撤销角色权限可参看上边用户相关操作
踩坑记录
在开启认证后发现系统默认给添加了guest角色,觉得guest角色没用就给删除了,于是再连接etcd集群时就报如下错误:
报错:The request requires user authentication (Insufficient credentials)
解决:重新添加guest角色
如果你觉得文章对你有帮助,请转发分享给更多的人。如果你觉得读的不尽兴,推荐阅读以下文章:
Etcd安全配置之Basic Auth认证的更多相关文章
- ios开发使用Basic Auth 认证方式
http://blog.csdn.net/joonchen111/article/details/48447813 我们app的开发通常有2种认证方式 一种是Basic Auth,一种是OAuth ...
- java 发送带Basic Auth认证的http post请求
构造http header private static final String URL = "url"; private static final String APP_KEY ...
- iOS AFNetWorking下得Basic Auth认证请求方式
我新入职了一家公司,做了一个项目,服务器的大哥说他采用的是Basic Auth认证请求方式,一般我们用的都是OAuth的认证方式,下面我们就对比一下这两种认证方式 百度百科得到如下 Basic Aut ...
- Http basic Auth 认证方式帮助类
BasicAuthenticationUtil import java.io.IOException; import java.security.MessageDigest; import javax ...
- java 发送带Basic Auth认证的http post请求实例代码
构造http header private static final String URL = "url"; private static final String APP_KEY ...
- 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证
本文是精讲RestTemplate第9篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- Nginx下配置Http Basic Auth
nginx basic auth指令 第一条语句: 语法: auth_basic string | off;默认值: auth_basic off;配置段: http, ...
- HTTP Basic auth认证
Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...
- httpclient进行basic auth认证
private HttpClientContext context = HttpClientContext.create(); public void addUserOAuth(String user ...
随机推荐
- RelativeLayout中最底的View一个View.layout_marginBottom无效
处理一个Dialog,发现RelativeLayout布局下最后一个View的layout_marginBottom会失效. 效果图见: 解决方法为: 在最底或最右的组件后面再加个View吧... 这 ...
- Android-Java-了解编译
在多年以前,计算机早期的运行方式是 01010100 ....., 这种方式的时候,开发人员编写代码是把01010101/01100101/01010111 ..... /来汇编写代码,这种方式特别痛 ...
- WPF核心对象模型-类图和解析
DispatcherObject是根基类,通过继承该类,可以得到访问创建该对象的UI线程的Dispatcher对象的能力.通过Dispatcher对象,可以将代码段合并入该UI线程执行. Depend ...
- linux系统编程之文件与IO(三):利用lseek()创建空洞文件
一.lseek()系统调用 功能说明: 通过指定相对于开始位置.当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置 函数原型: #include <sys/ ...
- 曲演杂坛--使用ALTER TABLE修改字段类型的吐血教训
--===================================================================== 事件起因:开发发现有表插入数据失败,查看后发现INT类型 ...
- CentOS7布署.Net Core
本文记录的所有东西,都是吸取别人的经验,自己实践得来,记录下来,也是为了某一天,用上的时候,能够更加的得心应手,平日的学习,都是未雨绸缪之举,但愿,这些笔记,也能帮上正在摸索的你. 第一步,下载虚拟机 ...
- HttpWebRequest 模拟浏览器访问网站
最近抓网页时报错: 要么返回 The remote server returned an error: (442)要么返回: 非法访问,您的行为已被WAF系统记录! 想了想,就当是人家加了抓网页的东西 ...
- 数据库如何从SQL server转换到SQLite
我之前用的是SQL server数据库,但是客户那里觉得安装这个大的数据库比较卡,说是导致蓝屏了,硬往SQL server上赖,没有办法客户是上帝么,给他换个小点的数据库吧!考虑Access,不行这个 ...
- Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路
Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路 那就是利用mvvmlight中的messager组件(可单独提取出),制作双向的一个消息发送.通过公共的类的定义,来传递数 ...
- UE4随笔 二 第一印象
打开UE4,短暂的兴奋过后,开始大概扫一扫UE4的编辑器,整个界面比UE3更有现代气息: 之前看其他人写的文章,虚幻4最重要的改动集中在下面几个方向上: 跨平台: WIN和MAC平台都能使用,这就意味 ...