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就只能访问或操作对应权限范围内的资源。