consul的acl配置

Consul使用 Access Control Lists(ACL-访问控制列表)来保护对UI、API、CLI、服务通信和代理通信的访问;ACL的核心是将规则分组为策略,然后将一个或多个策略与令牌相关联。

Consul使用token的形式进行安全控制访问,这里的token就是随机的字符串,有了token就有对应的操作权限啦;就好比之前说到WebAPI接口加访问控制一样,通过一个授权token就可以访问相关的接口资源。

配置ACL的前提是所有节点都需要将ACL启用,然后还要一个bootstrap token,因为针对子权限(策略)生成token的时候需要用到,就好比MySQL中的root用户一样,只有有了root权限才能给其他用户分配更多的权限。接下就以UI的访问和Services的控制进行ACL配置演示,其他基本上都一样,重点就是规划好策略规则。

首先在各节点启动时将ACL启用,在配置文件夹目录中(这里目录名是config)增加acl.hcl文件(每个节点都需要加),内容如下:

acl = {
  enabled = true
  default_policy = "deny"
  enable_token_persistence = true
}

参数说明:

enaled=true 代表开启ACL
default_policy="deny" 默认为allow,如果需要自定义权限,需要将其设置为deny 
ebale_token_persistence=true 开启token持久化,将token持久化到磁盘上

这里需要注意一点,之前说配置目录下的Json文件会被自动加载,其实还有hcl文件也会被自动加载,这里用hcl的形式演示一下。 配置文件准备好之后,重新启动节点即可(集群中的所有节点都需要用上),访问UI试试,就会弹出如下界面:

 点击登录,需要输入一个Token,如果是在配置文件中配置,输入配置的token即可,如果没有配置,可以在运行时生成一个bootstrap token,在任意一个Server中执行consul acl bootstrap命令获得该bootstrap token;Consul中token都很重要,需要保存好。

 

执行: ./consul acl bootstrap,输出内容为:

AccessorID:       866ae204-de9e-115d-8a3b-3db6e3a60673
SecretID:         0f90f4c2-bea5-fea7-1829-82449a6c5242
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2023-11-15 15:32:48.7500702 +0800 CST
Policies:
   00000000-0000-0000-0000-000000000001 - global-management

 输出说明:

SecretID: 生成了一个Token
Policies:0000...001 - global-managerment 使用的全局策略,权限很大,类似于MySQL的root

将生成的bootstrap token输入在登录框中,然后就可以正常获取信息啦;

 

bootstrap token权限很大,不可能每个小伙伴都拥有,就像MySQL的root权限一样,只能有个别的人知道。其他用户的权限需单独控制;Consul也是如此,针对不同权限策略,生成对应的token,使用这个token就只能访问或操作对应权限范围内的资源。

 

posted @ 2023-11-15 13:35  喻聪  阅读(419)  评论(0编辑  收藏  举报