提前准备

环境:Linux系统
版本:V1.6.2
下载:https://www.consul.io/downloads.html
配置文件:config-acl.json

{
    "datacenter":"tencent-datacenter",
    "data_dir":"/usr/local/consul-1.6.2/data",
    "log_file":"/usr/local/consul-1.6.2/log/",
    "log_level":"INFO",
    "bind_addr":"0.0.0.0",
    "client_addr":"0.0.0.0",
    "node_name":"tencent-node",
    "ui":true,
    "bootstrap_expect":1,
    "server":true,
    "acl":{
        "enabled":true,
        "default_policy":"deny",
        "enable_token_persistence":true,
        "enable_key_list_policy":true
    }
}
  • acl.enabled:开启acl
  • acl.default_policy:策略,deny - 默认是拒绝;allow - 默认是允许的
  • acl.enable_token_persistence:允许持久化token
  • acl. enable_key_list_policy:允许KV的递归操作

启动Consul:./consul agent -config-file=config-acl.json

ACL使用场景
  • Agent的访问控制
  • Service服务注册/发现访问控制
  • KV访问控制
ACL使用步骤
一、初始化Consul ACL

bash: consul acl bootstrap
生成信息如下(保存这些信息):

AccessorID:       xxxx-xxxx-xxxx-xxxx-xxxx
SecretID:         xxxx-xxxx-xxxx-xxxx-xxxx
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2019-12-23 12:06:53.799083966 +0800 CST
Policies:
   00000000-0000-0000-0000-000000000001 - global-management

执行该命令生成的AccessorID和SecretID是拥有最高权限的。

二、配置规则

浏览器访问:localhost:8500,ACL选项卡中输入上面的SecretID,然后会看到以下页面。
在这里插入图片描述
默认Policy:global-management,这个是拥有最高权限的SecretID,等于超级管理员。

AccessorID:访问ID。唯一对应有一个token,点击记录进去即可看到
Scope:作用范围
Roles & Policies:拥有权限或者策略,AccessorID通过关联不同角色和策略来控制访问权限

以下列举几个策略Policy的案例:
1)服务策略

service_prefix "" {
  policy = "write"
}

以上策略表示所有服务可写
具体策略参考:service-rules

2)KV策略

key_prefix "" {
 policy = "list"
}
key_prefix "" {
 policy = "write"
}
key_prefix "config/" {
 policy = "read"
}

第一个:表示所有KV可执行递归的 list 操作,该选项前提必须配置文件指定了"enable_key_list_policy":true后方可生效。
第二个:所有KV可执行写操作。
第三个:以config/开头的key可执行读操作。

具体策略参考:key-value-rules

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐