当前位置: 首页 > ops >正文

Consul- acl机制!

引言: 

     对于生成环境, 我们务必以小心谨慎的工作心态对待,consul(自动发现注册服务)作为业务的核心服务,在安全上,是需要相当严谨的。针对于consul的acl机制, 这块的资料相当少, 包括官网, 感觉也没做详细的case说明。

说明:

    首先 , consul的远程操作机制, 是通过默认bind 127.0.0.1的机制来实现的, 刚开始陷入了思维胡同, 把acl理解成可限制远程操作的权限(貌似consul是通过绑定本地回环地址来禁止其他主机远程连接的。否则acl就相当于有漏洞了?)。。。

为了远程访问consul的UI 页面,配置了client_addr: “0.0.0.0”的配置, 这样做,是非常不安全的,意味着,其他非client主机可以通过curl对于的接口进行操作。

acl,顾名思义, 访问控制列表, 它可以针对不同的agent client端限制其对consul 的服务进行增删改查操作。

验证:

首先, 我们的consul集群及client端如下:

/opt/consul]#./consul members
Node        Address          Status  Type    Build  Protocol  DC
10.1.1.80   10.1.1.80:8301   alive   client  0.8.3  2         nginx_conf
10.1.4.161  10.1.4.161:8301  alive   server  0.8.3  2         nginx_conf
10.1.4.67   10.1.4.67:8301   alive   server  0.8.3  2         nginx_conf
con1        10.1.2.10:8301   alive   server  0.8.3  2         nginx_conf

要使用consul的acl功能,需要手动生成(自己平凑)一个master token(令牌),以及默认规则。

{"acl_datacenter": "nginx_conf",      #标示"acl_master_token": "vipkid20170523test",  #master token"acl_default_policy": "deny"               #默认拒绝
}

3台server端都需要配置。

通过master  token 生成client token:

#curl -H "X-Consul-Token: secret" -X PUT -d '{"Name": "client_acl", "Type": "management"}' http://127.0.0.1:8500/v1/acl/create?token=vipkid20170523test
{"ID":"91a7f265-db29-6b15-4e9d-fec885a0f3b9"} 

然后配置到各server端:

#cat conf/acl_conf.json 
{"acl_datacenter": "nginx_conf","acl_master_token": "vipkid20170523test","acl_token":"91a7f265-db29-6b15-4e9d-fec885a0f3b9",    #生成的token"acl_default_policy": "deny"
}

 配置client端acl:

#curl -H "X-Consul-Token: secret" -X PUT -d '{"Name": "client_acl", "Type": "client"}' http://10.1.2.10:8500/v1/acl/create?token=vipkid20170523test
{"ID":" "d3ed6720-70ac-ea62-f80a-266e47cb87c2""}

将相关token配置进client 配置文件:

consul]# cat conf/acl_conf.json 
{"acl_datacenter": "nginx_conf","acl_token": "d3ed6720-70ac-ea62-f80a-266e47cb87c2"
}

acl 测试:

通过UI 配置相关权限(生产环境不应该开启远程访问ui):

 如上图, 我们给予生成的token 读的权限。然后我们在client机器上执行创建k/v注册的指令:

# curl -XPUT -d '{"weight":10,"max_fails":3,"fail_timeout":"3s","down":0}' http://127.0.0.1:8500/v1/kv/nginx/upstreams/test/10.1.4.161:8080
rpc error: rpc error: Permission denied

返回permission denied 。。。。

然后我们将上图中的read 改为write,再次执行注册指令:

[root@ip-10-1-1-80 consul]# curl -XPUT -d '{"weight":10,"max_fails":3,"fail_timeout":"3s","down":0}' http://127.0.0.1:8500/v1/kv/nginx/upstreams/test/10.1.4.161:8080
true

可发现, 我们的acl生效了。。

http://www.xdnf.cn/news/18187.html

相关文章:

  • 【Pycharm虚拟环境中安装Homebrew,会到系统中去吗】
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • Java NIO (New I/O) 深度解析
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • Nacos-8--分析一下nacos中的AP和CP模式
  • 从现场到云端的“通用语”:Kepware 在工业互联中的角色、使用方法与本土厂商(以胡工科技为例)的差异与优势
  • vLLM加载lora
  • 【MATLAB例程】水下机器人AUV的长基线定位,适用于三维环境,EKF融合长基线和IMU数据,锚点数量可自适应,附下载链接
  • (一)八股(数据库/MQ/缓存)
  • 在Ubuntu上安装并使用Vue2的基本教程
  • week2-[一维数组]最大元素
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • 第一章 认识单片机
  • 一个基于前端技术的小狗寿命阶段计算网站,帮助用户了解狗狗在不同年龄阶段的特点和需求。
  • 芯显 15.6寸G156HAE02.0 FHD 宽温液晶模组技术档案
  • Spring Boot应用实现图片资源服务
  • 【实时Linux实战系列】基于实时Linux的物联网系统设计
  • [嵌入式embed][Qt]一个新手Qt开发环境5.12.12
  • VS Code 终端完全指南
  • 机器学习中的「损失函数」:模型优化的核心标尺
  • 2025.8.19总结
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • BCT8937A Class T Audio Amplifier
  • GPFS不同存储方式的优劣
  • 【数据结构】使用队列解决二叉树问题
  • 4.pod生命周期和健康检测以及使用kubectl管理Kubernetes容器平台
  • B站 韩顺平 笔记 (Day 23)
  • 力扣(电话号码的字母组合)
  • 理解JavaScript中的函数赋值和调用
  • 0.开篇简介