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

ETCD未授权访问风险基于角色认证和启用https的ca证书修复方案

ETCD未授权访问风险安全漏洞修复方案

  • ETCD未授权访问风险介绍
  • 基于角色认证的访问控制(BASIC认证)
  • 基于ca证书的https访问控制(TLS传输)
    • 下载cfssl认证配置工具
    • 生成ca认证证书
    • 修改etcd配置
      • 方式一
      • 方式二
    • 访问etcd节点信息
  • patroni使用配置调整
  • 参考链接

ETCD未授权访问风险介绍

未授权访问可能产生的风险为攻击者可以从ETCD中拿到节点的注册信息

http://IP:2379/v2/keys http://IP:2379/v2/keys/?recursive=true

常规修复方案有以下两种:

  • 方案一:基于角色认证的访问控制(BASIC认证)
  • 方案二:基于ca证书的https访问控制(TLS传输)

简单点理解:
方案一就是添加用户密码认证,后续访问需要用户密码才能正常访问
方案二就是使用ca证书,将原先的http通信改成https,后续访问需要使用证书才能正常访问

备注:基于角色认证和ca证书的访问控制支持同时配置

基于角色认证的访问控制(BASIC认证)

# 创建测试数据etcdctlset/testkey testvalue# 可直接查看测试数据etcdctl ls etcdctl get testkey

# 创建root用户(etcd V2客户端版本输入密码间期时间很短,且只输入一次)etcdctluseraddroot# 启用认证etcdctl authenable


此处测试我们把root用户密码设置为root

# 开启 Basic Auth 默认会启用拥有所有权限的两个角色 root 和 guest ,并默认用 guest 角色进行的操作,不能删除,得收回 guest 的权限进行限制etcdctl--username root:password role revoke guest --path '/*' --rw# 检查 guest 角色权限etcdctl--username root:password role get guest

# 再次查看测试数据失败,需要加上用户密码才能正常查看etcdctl--username root:password get testkey

至此基于角色认证的访问控制配置结束,还是比较简单的。

基于ca证书的https访问控制(TLS传输)

下载cfssl认证配置工具

cfssl认证配置工具下载网址:https://github.com/cloudflare/cfssl

若github网站打不开或下载太慢可关注公众号「钥道不止」并于后台回复关键字:cfssl获取X86和ARM架构版本的工具

# X86 版本wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

授予可执行权限并加入bin目录

chmod+x cfssl*cp-v cfssl_linux-amd64/usr/local/bin/cfssl cp-v cfssljson_linux-amd64/usr/local/bin/cfssljson cp-v cfssl-certinfo_linux-amd64/usr/local/bin/cfssl-certinfo ls/usr/local/bin/cfssl*

生成ca认证证书

有多个节点,ca证书的生成在任意节点上操作即可

mkdir-p/etc/etcd/etcdSSL cd/etc/etcd/etcdSSL

1)、创建 CA 配置文件(ca-config.json),可配置证书有效期(100年)
vi ca-config.json

{"signing": {"default": {"expiry":"876000h"},"profiles": {"etcd": {"usages":["signing","key encipherment","server auth","client auth"],"expiry":"876000h"} } } }

字段说明:

  • ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;此处只定义一个etcd通用认证的profile
  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
  • server auth:表示client可以用该CA对server提供的证书进行验证
  • client auth:表示server可以用该CA对client提供的证书进行验证

2)、创建 CA 证书签名请求文件(ca-csr.json)
vi ca-csr.json

{"CN":"etcd","key": {"algo":"rsa","size":2048},"names":[{"C":"CN","ST":"shenzhen","L":"shenzhen","O":"etcd","OU":"System"}]}

字段说明:

  • CN:Common Name,etcd 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法
  • O:Organization,etcd 从证书中提取该字段作为请求用户所属的组 (Group)

3)、生成 CA 证书和私钥(ca-key.pem ca.pem)

cfssl gencert-initca ca-csr.json|cfssljson-bare ca

4)、创建 etcd 证书签名请求(修改配置节点的IP)文件(etcd-csr.json)
vi etcd-csr.json

{"CN":"etcd","hosts":["127.0.0.1","192.168.56.101","192.168.56.102","192.168.56.103"],"key": {"algo":"rsa","size":2048},"names":[{"C":"CN","ST":"shenzhen","L":"shenzhen","O":"etcd","OU":"System"}]}

5)、生成 etcd 证书和私钥(etcd-key.pem etcd.pem)

cfssl gencert-ca=ca.pem-ca-key=ca-key.pem-config=ca-config.json-profile=etcd etcd-csr.json|cfssljson-bare etcd

将生成的证书文件拷贝至其他节点:

scp/etc/etcd/etcdSSL/*.pem192.168.56.102:/etc/etcd/etcdSSL/scp/etc/etcd/etcdSSL/*.pem192.168.56.103:/etc/etcd/etcdSSL/

修改etcd配置

从官网的说明介绍可以看到这里有两种配置方式:用 --config-file 指定配置文件路径 或 用ETCD_CONFIG_FILE环境变量
https://etcd.io/docs/v3.5/op-guide/configuration/

方式一

配置 etcd 的 service 服务文件(修改3个节点IP、–name配置)

[root@dba01~]# vi /usr/lib/systemd/system/etcd.service[Unit]Description=Etcd ServerAfter=network.target network-online.target Wants=network-online.target[Service]Type=notify# Environment="ETCD_UNSUPPORTED_ARCH=arm64" #Just for ARMWorkingDirectory=/var/lib/etcd/EnvironmentFile=-/etc/etcd/etcd.conf# set GOMAXPROCS to number of processorsExecStart=/usr/bin/etcd \--name etcd01 \--data-dir=/etc/etcd/etcd01 \--initial-advertise-peer-urls https://192.168.56.101:2380 \--listen-peer-urls https://192.168.56.101:2380 \--listen-client-urls https://192.168.56.101:2379,http://127.0.0.1:2379 \--advertise-client-urls https://192.168.56.101:2379 \--initial-cluster-token etcd-cluster \--initial-cluster etcd01=https://192.168.56.101:2380,etcd02=https://192.168.56.102:2380,etcd03=https://192.168.56.103:2380 \--initial-cluster-state new \--cert-file=/etc/etcd/etcdSSL/etcd.pem \--key-file=/etc/etcd/etcdSSL/etcd-key.pem \--peer-cert-file=/etc/etcd/etcdSSL/etcd.pem \--peer-key-file=/etc/etcd/etcdSSL/etcd-key.pem \--trusted-ca-file=/etc/etcd/etcdSSL/ca.pem \--peer-trusted-ca-file=/etc/etcd/etcdSSL/ca.pemRestart=on-failure LimitNOFILE=65536[Install]WantedBy=multi-user.target

方式二

配置 etcd 的 service 服务文件,采用 --config-file所有参数配置都从配置文件里读取

[root@dba01~]# vi /usr/lib/systemd/system/etcd.service[Unit]Description=Etcd ServerAfter=network.target network-online.target Wants=network-online.target[Service]Type=notify# Environment="ETCD_UNSUPPORTED_ARCH=arm64" #Just for ARMExecStart=/usr/bin/etcd--config-file /etc/etcd/etcd.confRestart=on-failure LimitNOFILE=65536[Install]WantedBy=multi-user.target

在etcd原配置基础上追加如下ca证书配置并调整网络协议http为https

[root@dba01]# cat /etc/etcd/etcd.confname: etcd01data-dir:/etc/etcd/etcd01 initial-advertise-peer-urls: https://192.168.56.101:2380listen-peer-urls: https://192.168.56.101:2380listen-client-urls: https://192.168.56.101:2379,http://127.0.0.1:2379advertise-client-urls: https://192.168.56.101:2379initial-cluster-token: dcs-cluster initial-cluster: etcd01=https://192.168.56.101:2380,etcd02=https://192.168.56.102:2380,etcd03=https://192.168.56.103:2380enable-v2:trueinitial-cluster-state: new#[Security]client-transport-security: cert-file:/etc/etcd/etcdSSL/etcd.pemkey-file:/etc/etcd/etcdSSL/etcd-key.pem client-cert-auth:truetrusted-ca-file:/etc/etcd/etcdSSL/ca.pem peer-transport-security: cert-file:/etc/etcd/etcdSSL/etcd.pemkey-file:/etc/etcd/etcdSSL/etcd-key.pem client-cert-auth:truetrusted-ca-file:/etc/etcd/etcdSSL/ca.pem

若是已经运行过存在缓存的,需要先清理etcd缓存,三个节点都要清理(物理缓存文件清理后会导致方案一配置的角色认证失效,若要开启用户密码认证需重新操作上述步骤

rm-rf/etc/etcd/etcd0*

然后重启 etcd 服务

systemctl daemon-reload systemctlstartetcd systemctlstatusetcd

至此基于ca证书的https访问控制配置结束。

访问etcd节点信息

检查etcd集群服务的健康,不带证书将无法正常访问

# 不带ca证书访问etcdctl cluster-health# 带ca证书访问etcdctl \--ca-file=/etc/etcd/etcdSSL/ca.pem \--cert-file=/etc/etcd/etcdSSL/etcd.pem \--key-file=/etc/etcd/etcdSSL/etcd-key.pem \cluster-health

patroni使用配置调整

在PostgreSQL+etcd+patroni的高可用架构中,etcd开启访问控制后patroni得相应的做调整,期间涉及patronide重启,也就是涉及PostgreSQL数据库的重启,需要窗口时间操作

  • 方案一:基于角色认证的访问控制(BASIC认证)
# patroniusername: root password: root
  • 方案二:基于ca证书的https访问控制(TLS传输)
chown-R postgres.postgres/etc/etcd/etcdSSL/*.pem# patroniprotocol: https cacert:/etc/etcd/etcdSSL/ca.pem cert:/etc/etcd/etcdSSL/etcd.pemkey:/etc/etcd/etcdSSL/etcd-key.pem

patroni配置文件更新etcd的配置:
https://patroni.readthedocs.io/en/latest/yaml_configuration.html#etcd

# 同时开启用户认证和ca证书的访问etcdctl \--ca-file=/etc/etcd/etcdSSL/ca.pem \--cert-file=/etc/etcd/etcdSSL/etcd.pem \--key-file=/etc/etcd/etcdSSL/etcd-key.pem \--username root:rootcluster-health

参考链接

etcd 的实现原理:https://draveness.me/etcd-introduction/
RAFT协议工作原理:http://thesecretlivesofdata.com/raft/
etcd单台部署,启用https以及ca自签名:
https://cloud.tencent.com/developer/article/1441188
etcd多台部署,启用https以及ca自签名:
https://cloud.tencent.com/developer/article/1441194
etcd的配置参数:
https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample

发现了一个前沿巨牛的宝藏人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。戳一下跳转到学习!

http://www.jsqmd.com/news/985274/

相关文章:

  • 备忘录:Camulator与Simpleperf(硬件实测)的对比实验
  • 计算机组成原理学习笔记:手把手拆解CPU执行一条指令的全过程(以ADD指令为例)
  • 2026年 南京汽车维修/汽车保养/汽车空调维修/奔驰、宝马、奥迪专修推荐榜:专业深修与暖心服务口碑之选 - 品牌发掘
  • 保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控解锁避障和定高(附完整参数表)
  • BES2500Z平台实战:从零搭建TWS耳机项目,手把手教你配置GPIO按键与LED指示灯
  • 关于tvs选型及参数详解esd
  • pnpm架构深度解析:高效包管理的核心技术实现与实战指南
  • MC13883 PMIC过压保护与反向充电:原理、设计与调试实战
  • 大堂摆件厂家常见问题解答(2026最新专家版) - 热点速览
  • PostgreSQL两节点用keepalived实现主备的高可用架构
  • 郑州石英石大板一手货源采购指南|2026年源头工厂vs代理商完整对标 - 年度推荐企业名录
  • 深入解析MCU时钟与电源管理:以LPC2917/19为例的嵌入式系统稳定与低功耗设计
  • 在eNSP模拟器上配置usg6000v的虚拟系统
  • 深入解析NXP LPC51U68:ARM Cortex-M0+高能效MCU的外设与低功耗设计
  • PyPDF完全安装指南:5种场景下的最佳实践与避坑手册
  • 在Windows上用C++原始套接字给IPv4报文加Option字段:一个被遗忘的扩展头实战
  • 2026最新橡塑板十大排名一览表:解密绝热保温源头工厂 - 奔跑123
  • RealSR vs 传统超分辨率:为什么核估计与噪声注入是真实场景的终极解决方案
  • 广州花都餐饮公司注销流程是怎样的?税务清算、清税证明怎么一步步做 | 全流程通俗解读 - 欢欢在创业
  • STM32F103C8T6驱动HDC1080温湿度传感器:手把手教你写软件I2C代码(附完整工程)
  • 2026年广州公司注册代办与资质办理优选机构深度评测:全流程服务与税务异常解决能力解析 - 品牌发掘
  • 还在为投资决策发愁吗?让AI智能团队为你提供专业分析
  • LPC2917/2919时钟与电源管理:嵌入式系统稳定与低功耗设计核心
  • 告别Wireshark GUI:用tshark命令行5分钟搞定批量数据包分析与拆分
  • Qwen-Image-Edit-Rapid-AIO:融合加速技术与模型优化的高效图文生成工具链
  • 2026石家庄黄金回收排行:收的顶领跑,正规变现更安心 - 奢侈品回收测评
  • 从PDF到结构化数据:用Marker实现高效文档智能转换的完整指南
  • 图像增强的100种方法
  • 2026最新的 国内以及河北地区防静电橡胶板生产厂家实力排行及采购参考 防静电橡胶板 - 奔跑123
  • 2026 济宁厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠