《中小团队落地配置中心详解》文章中我们介绍了如何基于Etcd+Confd构建配置中心,最后提到Etcd的安全问题时说了可以使用账号密码认证以达到安全访问的目的,究竟该如何开启认证以及怎么设计权限访问呢?本文将为你详细解读

认证说明

  1. Etcd v2以上的版本才支持权限认证,且仅支持Basic Auth
  2. Etcd通过用户(user)-角色(role)-权限的方式来控制访问,用户关联角色,角色拥有权限,从而用户也就拥有了相应的权限
  3. Etcd默认没有启用认证机制,只要能连接etcd服务就拥有所有的权限,还是非常危险的,另一种安全的访问方式是开启ssl,只有使用受信任的证书才能访问数据
  4. Etcd开启Basic Auth之后,默认会启用两个角色root和guest,root角色拥有所有权限,guest拥有只读权限,这两个角色都不要删除,否则你可能会遇到意想不到的Bug
  5. Etcd的权限分为只读、只写、可读写,可以对etcd的详细key进行授权,例如:/conf/project/dev/nginx.conf,也可以授权key前缀(目录),例如:/conf/project/,授权规则应以最小满足需求为准则

权限设计

权限设计应先考虑我们对权限的需求,从需求出发设计权限

  • 需求
  1. 为了方便后续管理,规定配置中心所有key都应已/conf/开头
  2. 需要两个账号,一个账号用在Kerrigan(WebUI)拥有读取、写入、修改、删除key的权限,一个账号用在confd,只有只读的权限,能够读取配置就可以了
  • 设计
  1. 需求很简单,我们需要建立两个账号,分别对应两个角色,两个角色都是对/conf/开头的Key进行控制,一个读写权限,一个只读权限
  2. 定义只读账号名为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认证的更多相关文章

  1. ios开发使用Basic Auth 认证方式

    http://blog.csdn.net/joonchen111/article/details/48447813 我们app的开发通常有2种认证方式   一种是Basic Auth,一种是OAuth ...

  2. java 发送带Basic Auth认证的http post请求

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  3. iOS AFNetWorking下得Basic Auth认证请求方式

    我新入职了一家公司,做了一个项目,服务器的大哥说他采用的是Basic Auth认证请求方式,一般我们用的都是OAuth的认证方式,下面我们就对比一下这两种认证方式 百度百科得到如下 Basic Aut ...

  4. Http basic Auth 认证方式帮助类

    BasicAuthenticationUtil import java.io.IOException; import java.security.MessageDigest; import javax ...

  5. java 发送带Basic Auth认证的http post请求实例代码

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  6. 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证

    本文是精讲RestTemplate第9篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  7. Nginx下配置Http Basic Auth

       nginx basic auth指令 第一条语句: 语法:     auth_basic string | off;默认值:     auth_basic off;配置段:     http, ...

  8. HTTP Basic auth认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...

  9. httpclient进行basic auth认证

    private HttpClientContext context = HttpClientContext.create(); public void addUserOAuth(String user ...

随机推荐

  1. 点云库PCL学习

    1. 点云的提取 点云的获取:RGBD获取 点云的获取:图像匹配获取(通过摄影测量提取点云数据) 点云的获取:三维激光扫描仪 2. PCL简介 PCL是Point Cloud Library的简称,是 ...

  2. Linux内存子系统及常用调优参数

    1>内存子系统 1>组件: slab    allocator buddy    system kswapd pdflush 2>虚拟化环境: PA:进程地址: HA:虚拟机地址: ...

  3. KNN PCA LDA

    http://blog.csdn.net/scyscyao/article/details/5987581 这学期选了门模式识别的课.发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕 ...

  4. 检测Linux服务器端口是否开通

    现如今云服务器已经是大势所趋,国内比较著名的云服务器厂商有阿里.腾讯,国外有aws,尽管有的公司目前为止还是使用的物理机,但是无论你是使用的云服务器还是物理机,在运行服务时都必不可少的需要监听到指定的 ...

  5. ABP框架中微服务跨域调用其它服务接口

    AjaxResponse为ABP自动包装的JSON格式 /// <summary> /// 通过地址和参数取得返回OutPut数据 /// </summary> /// < ...

  6. mySql数据库 C#使用guid

    CHAR(36) 如果某列设置为CHAR(36),则MySQL官方的连接器会将其当成 GUID 类型.实际上,有时候 某个字段碰巧设为可CHAR(36), 但是我们的本意并非当它是GUID. varc ...

  7. 用input标签 文件,多文件上传

    单个文件,多个文件区别不大,只是需要把多个文件装在一个容器里面,循环遍历即可: 需要注意的 input 标签中name属性,一定要指定: 在这是  fileBase  需要确定method必须是pos ...

  8. 附加属性来控制控件中,要扩展模块的visibility

    可解决: 文本框控件中的按钮,DataGridColumnHeader中加入Filter控件... cs文件中的 附加属性 + 样式文件中的 template+控件 -> visibility ...

  9. oracle 游标简单案例

    oracle  游标简单案例 一.案例: DECLARE IDO NUMBER; DABH CHAR); t_count ); CURSOR TJ_CURSOR IS SELECT IDO,DABH ...

  10. Day 9 作业题(完成)

    # 练习题# 1.整理函数相关知识点,画思维导图,写博客 # 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者.'''def func1(argv): f ...