Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc

1. 前言

本文基于Consul v1.6.2
这篇文章并不是consul ACL的完全配置手册,感兴趣的读者请阅读参考资料1

2. Token存在的意义

Token其实用于权限控制中,表征使用者的身份

Consul的ACL中重要的3个实体
屏幕快照 2020-01-13 下午9.22.14.png-51.2kB

Token最终与一组Policy关联, 可以理解为RBAC(基于角色的访问控制)中的权限。

3. 能够细粒度控制的权限有哪些?

image_1dufhal881k461i4apoo4rsot5l.png-584.6kB

4. 如何使用Token

详见参考资料2

curl \
    --header "X-Consul-Token: <consul token>" \
    http://127.0.0.1:8500/v1/agent/members

其实也可以附加在Query中,但官方不推荐

5. 配置文件示例

5.1 server模式

{
    "acl": {
        "enabled": true,
        "default_policy": "deny",
        "enable_token_persistence": true
    },
    "datacenter": "dc1",
    "data_dir": "/data/consul",
    "disable_update_check": true,
    "server": true,
    "ui": true,
    "bind_addr": "192.168.100.3",
    "client_addr": "0.0.0.0",
    "node_name": "s1",
    "bootstrap_expect": 2,
    "retry_join": ["192.168.100.3", "192.168.100.4", "192.168.100.5"]
}

5.2 client 模式

client上设置default token之后, 在client使用CLI或者执行API请求,都可以自动附加token

{
    "acl": {
        "enabled": true,
        "default_policy": "deny",
        "down_policy": "extend-cache",
        "tokens": {
            "default": "3b392aa4-c073-11cd-404b-792590b7feab"
        }
    },
    "data_dir": "/data/consul",
    "enable_debug": false,
    "primary_datacenter": "dc1",
    "datacenter": "dc1",
    "disable_update_check": true,
    "server": false,
    "client_addr": "0.0.0.0",
    "bind_addr": "192.168.100.210",
    "node_name": "client210",
    "retry_join": ["192.168.100.3", "192.168.100.4", "192.168.100.5"]
}

6. bootstrap

使用

 consul acl bootstrap

会立刻为集群创建一个具有global-management策略的Token,以便于后续的权限配置工作。开启enable_token_persistence, 即使所有server重启,该token仍然有效。

参考资料

  1. Secure Consul with ACLs
  2. Consul API-Authentication
  3. ACL Rules and Scope

请我喝瓶饮料

微信支付码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注