consul–基础–06–ACL
1、介绍
1.1、Access Control Lists(ACL-访问控制列表)
Consul使用 Access Control Lists 来保护对UI、API、CLI、服务通信和代理通信的访问。
1.2、ACL的核心
ACL的核心是将规则分组为策略,然后将一个或多个策略与令牌相关联。
1.3、令牌
- Consul使用token进行安全控制访问,token里面包含了操作权限
- 类比:比如 应用的WebAPI接口,通过一个授权token来限制资源的访问。
2、环境
2.1、基础环境
Consul--生产环境搭建--01--单机部署--Server模式
https://blog.csdn.net/zhou920786312/article/details/118220171
2.2、修改启动命令
#!/bin/bash
cd /home/hd/consul-node
./consul agent -config-dir=./config
cd
2.3、移动配置文件
3、配置ACL的步骤
3.1、步骤1:配置ACL
- 在各节点启动时将ACL启用,在配置文件夹目录中(这里目录名是config)增加acl.hcl文件
- 配置文件准备好之后,重新启动节点即可
- acl.hcl内容如下
acl = { enabled = true default_policy = "deny" enable_token_persistence = true }
参数说明:
1. enabled=true:表示开启ACL
2. default_policy="deny":默认:allow,如果需要自定义权限,需要将其设置为deny;
3. enable_token_persistence =true:表示开启token持久化,将token持久化到磁盘上;
3.2、步骤2:获取bootstrap token
- 获取一个bootstrap token,因为针对子权限(策略)生成token的时候需要用到,就好比MySQL中的root用户一样,只要有了root权限才能给其他用户分配更多的权限。
- 在任意一个Server中执行consul acl bootstrap命令 就可以获取
- Consul中token都很重要,需要保存好
./consul acl bootstrap
内容
AccessorID: 332f50a2-dfc9-4a43-bf74-6f0d38164388
# token的内容
SecretID: eed1cd0b-f2a5-a423-2621-cf742160a2f8
# 描述
Description: Bootstrap Token (Global Management)
Local: false
Create Time: 2022-11-07 17:41:12.451612834 +0800 CST
# 使用的全局策略,权限很大,类似mysql的root
Policies:
00000000-0000-0000-0000-000000000001 - global-management
3.3、步骤3:登录
4、配置其他token
bootstrap token权限很大,不可能每个小伙伴都拥有,就像MySQL的root权限一样,只能有个别的人知道,其他用户的权限需单独控制;
Consul也是如此,针对不同权限策略,生成对应的token,使用这个token就只能访问或操作对应权限范围内的资源。
ALC 配置其他token的方式有以下2种
- 通过命令的形式
- 通过UI界面的形式(因为现在有bootstrap token超级权限)
4.1、UI方式配置
4.1.1、创建策略
node-read-policy
node_prefix ""{
policy = "read"
}
只能查看node信息的策略
4.1.1.1、常用规则(Rules)
- 主要针对的配置
- 节点(node)
- 服务(service)
- 键值对(K/V)
- 可以模糊指定,也可以具体指定
node_prefix "":节点前缀为空,代表所有的节点都使用策略;
service_prefix "":服务前缀为空,代表所有的服务都使用策略;
service "Code6688Name":指定对应的服务使用策略;
key_prefix "redis/":只对前缀有"redis/"的key使用对应策略;
key "dashboard-app":指定对应的key使用策略;
4.1.1.2、常用策略(policy)
规则中关于策略(policy)通常有以下几种:
read:只能查询;
write:可查可写;
deny:不能读不能写;
4.1.2、根据策略生成token
根据 只能查看node信息的策略 生成token
4.1.3、使用token
我们使用bootstrap token登录的时候,可以看到如下
切换刚刚生成的token,可以看到如下
切换之后,界面中除了node能查出信息,其他都不能查出信息
4.2、命令方式
4.2.1、编写规则文件
vim key-acl.hcl
内容
# 所有的key都只能查看,不能编辑
key_prefix ""{
policy = "read"
}
4.2.2、根据规则文件生成策略
# 创建策略,名称为allKeyOnlyRead
# 因为启用ACL,所以需要对应的权限token,这里使用bootstrap token
./consul acl policy create -name "allKeyOnlyRead" -rules @key-acl.hcl -token eed1cd0b-f2a5-a423-2621-cf742160a2f8
4.2.3、根据策略生成token
# 创建token,名称为 allKeyOnlyReadToken
# 因为启用ACL,所以需要对应的权限token,这里使用bootstrap token
./consul acl token create -description "key只读" -policy-name allKeyOnlyRead -token eed1cd0b-f2a5-a423-2621-cf742160a2f8
4.2.4、使用token
5、spinrgboot集成
spring:
application:
name: xcoa
cloud:
consul:
host: 192.168.187.171
port: 8500
config:
prefix: xcoa/dev
format: FILES
# 配置token
acl-token: eed1cd0b-f2a5-a423-2621-cf742160a2f8
discovery:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
# 健康检测API
health-check-path: '/xcoa/health'
# 配置token
acl-token: eed1cd0b-f2a5-a423-2621-cf742160a2f8