Consul ACL
consul自带ACL控制功能,看了很多遍官方文档,没有配置步骤https://www.consul.io/docs/internals/acl.html 主要对各种配置参数解释,没有明确的步骤,当时唯一疑惑的是怎样生成ACL规则。看了很多相关的blog都是相似的内容,都是基础的安装测试而已,没有提到具体配置ACL,估计更多的只是实验尝试而已,没有涉及ACL配置使用。后来有辛搜到了一片文章才恍然大悟,明白ACL配置是怎么回事了,http://qiita.com/yunano/items/931448a590c7f346ed01。我之后是这样配置的:
1、对数据中心的每个server,添加acl_config.json配置:
| {  "acl_datacenter": "datacenter-tag",  "acl_master_token": "xxxxxxxxxx9cda01",  "acl_default_policy": "deny"} | 
这3个参数每个server模式的node都必须有。相关参数解释官方文档都有,https://www.consul.io/docs/agent/options.html
acl_default_policy默认值值是allow,即能够执行任何操作,这里需要关闭。
acl_master_token需要在每个server上配置,有management级别的权限,相当于一个种子token。
acl_datacenter区域的标识。
2、通过API接口 /v1/acl/create 创建一个management用户用于管理token的权限分配,这里生成这个management级别的token需要之前配置文件里面的种子token。
| curl -H "X-Consul-Token: secret" -X PUT -d '{"Name": "datacenter-tag", "Type": "management"}' http://127.0.0.1:8500/v1/acl/create?token=xxxxxxxxxx9cda01{"ID":"xxxxxxxxxxx-xxxx-xxxx-xxxxxxxxxxx"} | 
3、可以将这个management权限的token配置在ui节目管理的节点上,便于管理ACL、k/v、service等(但是我没有这么干,不然这个node的权限太大,不便于控制)。
| {  "acl_datacenter": "datacenter-tag",  "acl_master_token": "xxxxxxxxxxx9cda01",  "acl_token": "b9exxxxx-xxxx-xxxx-xxx-xxxxxxxxxx291ba",  "acl_default_policy": "deny"} | 
现在就可以通过ui界面管理token的权限分配了(制订ACL规则)。
4、合理分配token的权限(制定ACL规则),官方文档有一例分配说明:
| # Default all keys to read-onlykey ""{  policy = "read"}key "foo/"{  policy = "write"}key "foo/private/"{  # Deny access to the dir "foo/private"  policy = "deny"}# Default all services to allow registration. Also permits all# services to be discovered.service ""{    policy = "write"}# Deny registration access to services prefixed "secure-".# Discovery of the service is still allowed in read mode.service "secure-"{    policy = "read"}# Allow firing any user event by default.event ""{    policy = "write"}# Deny firing events prefixed with "destroy-".event "destroy-"{    policy = "deny"}# Default prepared queries to read-only.query ""{    policy = "read"}# Read-only mode for the encryption keyring by default (list only)keyring = "read" | 
API注册ACL规则用JSION数据格式:
| {  "key": {    "": {      "policy": "read"    },    "foo/": {      "policy": "write"    },    "foo/private": {      "policy": "deny"    }  },  "service": {      "": {          "policy": "write"      },      "secure-": {          "policy": "read"      }  },  "event": {    "": {      "policy": "write"    },    "destroy-": {      "policy": "deny"    }  },  "query": {    "": {      "policy": "read"    }  },  "keyring": "read"} | 
创建好ACL后,将生成的acl_token xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx 配置到每个agent,除了那个ui的server节点,当然这个节点也可以配置这个token,只是权限没有那么大了,管理不是很便捷。
client节点的acl_config.json配置:
| {  "acl_datacenter": "datacenter-tag",  "acl_token": "xxxxxx-4bf0-xxxx-2079-xxxxxxxxx"} | 
server节点的acl_config.json配置(UI的server节点除外):
| {  "acl_datacenter": "datacenter-tag",  "acl_master_token": "xxxxxxxxxxxxxxxxx",  "acl_token": "xxxxxxx-xxxx-xxxx-2079-xxxxxxxxxx",  "acl_default_policy": "deny"} | 
测试ACL是否生效:
| [root@xx-xx-xxxx ~]# curl -X PUT -d 'test' http://127.0.0.1:8500/v1/kv/web/key1rpc error: Permission denied[root@xx-xx-xxxx ~]#[root@xx-xx-xxxx ~]# curl -X PUT -d 'test' http://127.0.0.1:8500/v1/kv/foo/key1true | 
虽然分享了知识但也得为安全考虑,文章中所有敏感信息均已处理,比如token都是未知或无效的等。
Consul ACL的更多相关文章
- Ocelot Consul ACL
		Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ... 
- Consul ACL集群配置说明以及ACL Token的用法
		在上一篇文章里面,我们讲了如何搭建带有Acl控制的Consul集群.这一篇文章主要讲述一下上一篇文章那一大串配置文件的含义. 1.配置说明#1.1 勘误上一篇文章关于机器规划方面,consul cli ... 
- consul ACL 配置范例
		service "dashboard" { policy = "write" } service "dashboard-sidecar-proxy&q ... 
- 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)
		前言 上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详 ... 
- SpringBoot系列: 使用 consul 作为服务注册组件
		本文基本上摘自纯洁的微笑的博客 http://www.ityouknow.com/springcloud/2018/07/20/spring-cloud-consul.html . 感谢作者的付出. ... 
- Docker+Consul+Registrator 实现服务注册与发现
		Docker+Consul+Registrator实现服务注册与发现 逻辑图 实现nginx节点自动化加入容器IP代理 1.三台Consul agent server作为高可用通过Consul Tem ... 
- consul ACL2
		简介 Consul有多个组件,但是整体上,consul通常作为服务发现工具来使用. Consul主要由以下特点: 服务发现 健康检查 KV存储 多数据中心 Consul一般与zookeeper,ser ... 
- consul备份还原导入导出
		工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作. 备份与还原 需要备份的主要有两类数据:cons ... 
- spring cloud集成 consul源码分析
		1.简介 1.1 Consul is a tool for service discovery and configuration. Consul is distributed, highly ava ... 
随机推荐
- C++Primer笔记-----day06
			================================================================day06=============================== ... 
- 我的MAXSCRIPT笔记
			getnodebyname "circle01" for o in objects do if o.name == "circle01" then select ... 
- golang的array/slice
			相同点 由相同类型的元素组合构成 元素有序排列,0为第一个元素下标 基本使用方法相同 区别 array声明时需要指定容量大小,而且无法修改 slice可通过append增加元素,当容量不够时,会自动扩 ... 
- Python 爬虫之 Scrapy 分布式原理以及部署
			Scrapy分布式原理 关于Scrapy工作流程 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享 ... 
- 【BZOJ2038】小Z的袜子【莫队】
			题意 给出包含n个数字的序列,和m个查询.每次查询问区间[l,r]中挑选出两个数字,大小相同的概率为多少. 分析 莫队的入门题吧.代码是非常好写,关键是时间复杂度的证明.O(n*sqrt(n)).我还 ... 
- Mysql设置auto_increment_increment和auto_increment_offset
			查看与设置: show variables like '%auto_inc%'; show session variables like '%auto_inc%'; -- //session会话变量 ... 
- jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用
			jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用 
- SQL 数据库 学习 003 什么是数据库? 为什么需要数据库?是不是所有的软件都是用Sql Server?
			什么是数据库? 为什么需要数据库? 是不是所有的软件都是用Sql Server? 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Exp ... 
- c#服务器端控件confirm
			1>服务器端控件删除的数据的时候,可以调用js的confirm防止误操作,但是默认的样式实在是让人难以接受,怎么调用自定义的提示框而且同步回发到服务器端, 服务器端的控件的用linkbutton ... 
- sqlserver 时间函数用法
			1.DATEADD(datepart,number,date) 现在,我们希望向 "OrderDate" 添加 2 天,这样就可以找到付款日期,我们使用如下 SELECT 语句: ... 
