Consul使用 Access Control Lists 来保护对UI、API、CLI、服务通信和代理通信的访问。
ACL的核心是将规则分组为策略,然后将一个或多个策略与令牌相关联。
Consul--生产环境搭建--01--单机部署--Server模式
https://blog.csdn.net/zhou920786312/article/details/118220171
#!/bin/bash
cd /home/hd/consul-node
./consul agent -config-dir=./config
cd
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持久化到磁盘上;
./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
bootstrap token权限很大,不可能每个小伙伴都拥有,就像MySQL的root权限一样,只能有个别的人知道,其他用户的权限需单独控制;
Consul也是如此,针对不同权限策略,生成对应的token,使用这个token就只能访问或操作对应权限范围内的资源。
ALC 配置其他token的方式有以下2种
node-read-policy
node_prefix ""{
policy = "read"
}
只能查看node信息的策略
node_prefix "":节点前缀为空,代表所有的节点都使用策略;
service_prefix "":服务前缀为空,代表所有的服务都使用策略;
service "Code6688Name":指定对应的服务使用策略;
key_prefix "redis/":只对前缀有"redis/"的key使用对应策略;
key "dashboard-app":指定对应的key使用策略;
规则中关于策略(policy)通常有以下几种:
read:只能查询;
write:可查可写;
deny:不能读不能写;
根据 只能查看node信息的策略 生成token
我们使用bootstrap token登录的时候,可以看到如下
切换刚刚生成的token,可以看到如下
切换之后,界面中除了node能查出信息,其他都不能查出信息
vim key-acl.hcl
内容
# 所有的key都只能查看,不能编辑
key_prefix ""{
policy = "read"
}
# 创建策略,名称为allKeyOnlyRead
# 因为启用ACL,所以需要对应的权限token,这里使用bootstrap token
./consul acl policy create -name "allKeyOnlyRead" -rules @key-acl.hcl -token eed1cd0b-f2a5-a423-2621-cf742160a2f8
# 创建token,名称为 allKeyOnlyReadToken
# 因为启用ACL,所以需要对应的权限token,这里使用bootstrap token
./consul acl token create -description "key只读" -policy-name allKeyOnlyRead -token eed1cd0b-f2a5-a423-2621-cf742160a2f8
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