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-only
key "" {
  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/key1
rpc 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/key1
true

虽然分享了知识但也得为安全考虑,文章中所有敏感信息均已处理,比如token都是未知或无效的等。

Consul ACL的更多相关文章

  1. Ocelot Consul ACL

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  2. Consul ACL集群配置说明以及ACL Token的用法

    在上一篇文章里面,我们讲了如何搭建带有Acl控制的Consul集群.这一篇文章主要讲述一下上一篇文章那一大串配置文件的含义. 1.配置说明#1.1 勘误上一篇文章关于机器规划方面,consul cli ...

  3. consul ACL 配置范例

    service "dashboard" { policy = "write" } service "dashboard-sidecar-proxy&q ...

  4. 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

    前言 上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详 ...

  5. SpringBoot系列: 使用 consul 作为服务注册组件

    本文基本上摘自纯洁的微笑的博客 http://www.ityouknow.com/springcloud/2018/07/20/spring-cloud-consul.html . 感谢作者的付出. ...

  6. Docker+Consul+Registrator 实现服务注册与发现

    Docker+Consul+Registrator实现服务注册与发现 逻辑图 实现nginx节点自动化加入容器IP代理 1.三台Consul agent server作为高可用通过Consul Tem ...

  7. consul ACL2

    简介 Consul有多个组件,但是整体上,consul通常作为服务发现工具来使用. Consul主要由以下特点: 服务发现 健康检查 KV存储 多数据中心 Consul一般与zookeeper,ser ...

  8. consul备份还原导入导出

    工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作. 备份与还原 需要备份的主要有两类数据:cons ...

  9. spring cloud集成 consul源码分析

    1.简介 1.1 Consul is a tool for service discovery and configuration. Consul is distributed, highly ava ...

随机推荐

  1. Django 新手图文教程 (转)

    简约而不简单的 Django 新手图文教程 环境:windows7,python3.5.1,pycharm专业版,Django 1.10版,pip3 一.Django简介 百度百科:开放源代码的Web ...

  2. dart 公共变量

    dart中可以直接在一个文件里声明一个变量,这在其他语言中并不常见,比如c#语言只有类型才可以在命名空间下定义,变量必须放在类里声明 所以dart这点特性类似于js 今天就来讨论这个公共变量的作用范围 ...

  3. C# StopWatch的BUG????

    //BUG?????? //使用StopWatch测试运行时间 //两段测试A和B //测试结果受测试顺序影响,后测要比先测耗时长了许多 static void TestKeyIntStr() { v ...

  4. 117 FP页面无法查看 此错误是JDK8.0.0.0版本的一个BUG,会导致工单重复回写,

    用户表示117 FP页面无法查看,提示如下错误: 跟进: 1.进入FP服务器可看到以下错误 这个错误的框就表示FP的一个进程报错,自动断掉了,需要重新跑一次EXIT,INIT,PLAN,EXPORT, ...

  5. len=in.read(b,0,len)和len=in.read(b)的区别

    byte[] byte = new byte[1024]; int len =0 ; while((len=in.read(b))!=-1){ out.write(b,0,len); } read函数 ...

  6. 【UVA10079 训练指南】收集者的难题【最大流】

    题意: Bob和他的朋友从糖果包装里手机贴纸.这些朋友每人手里都有一些(可能有重复的)贴纸,并且只跟别人交换他所没有的贴纸,贴纸总是一对一交换. Bob比这些朋友更聪明,因为他意识到只跟别人交换自己没 ...

  7. iOS设备尺寸

  8. 117. Populating Next Right Pointers in Each Node II 计算右边的附属节点

    [抄题]: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNod ...

  9. 81-POJ-Wall(计算几何)

    http://poj.org/problem?id=1113 Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 411 ...

  10. loadrunner中回放log看不到参数替代后具体数值

    1.打开run-time settings,找到 log - always send messages,选择 extended log--parameter substitution.