0
2
2
0
专栏/.../

TiDB 集群 PD 组件免授权访问解决方案

 cchouqiang  发表于  2024-12-11

背景

漏洞扫描软件扫描TiDB数据库时,经常会扫出PD API未授权访问漏洞的问题。针对此类问题,本文总结了几种解决方案供参考。

PD组件存储的是TiKV的元数据信息,pd在启动时没有指定证书校验(--cacert 参数),并且没有通过防火墙等实施访问控制,PD组件的接口和数据就会直接暴露给外部,导致未授权访问漏洞。如果这些接口能够被未经认证的用户访问,那么就意味着存在安全风险。

加固方案

本文介绍三种加固方案,方法如下:(本文只针对方案一、方案二提供详细步骤)

1、TiDB 集群开启 TLS

开启 TLS 后组件间通信会被加密,访问组件或工具需提供访问证书,主要共涉及以下组件及工具

  • TiDB 与 TiKV、PD
  • TiKV 与 PD
  • TiDB Control 与 TiDB,TiKV Control 与 TiKV,PD Control 与 PD
  • TiKV、PD、TiDB 各自集群内内部通讯
  • Dashboard、TiDB Lightning、BR
需注意:开启 TLS 需要扩缩容 PD 节点,并重启整个集群。
目前暂不支持只开启其中部分组件的加密传输。
该方案会对集群造成短时间业务不可用,后续工具及监控需要提供加密证书才可正常使用,会增加一定运维成本,开启该功能建议集群版本为6.5及以上。

2、修改 PD 端口

漏扫软件只扫描2379端口,也可以只修改PD端口号,临时应对漏扫工作。

通过对集群的 PD 节点进行扩缩容,来实现修改集群 PD 端口。

该方案不影响集群正常对外访问,但可能会有轻微性能影响,仅用来避免漏洞检测程序发现该风险。

3、设置防火墙策略

  • 网络层面设置防火墙策略,配置访问控制策略,限制IP访问,杜绝未认证登录访问。
  • 开启操作系统iptables,配置白名单,内部节点可访问pd节点。

该方案对集群没有任何影响,一般推荐使用网络层面配置访问控制策略。

加固方案实施

《方案一》TiDB 集群开启 TLS 步骤(v6.5)

1、查看集群状态

tiup cluster display tidb-test

2、缩容 PD

开启 TLS 需要缩容其他两个 PD,只保留 PD Leader 节点

tiup cluster scale-in tidb-test -N 192.168.1.11:2379,192.168.1.12:2379

3、开启 TLS

tiup cluster tls tidb-test enable

注意:此过程会自动重启集群,业务无法访问!!!

4、PD-CTL 访问测试

使用 pd-ctl http 无认证登录执行命令会报错

tiup ctl:v6.5.5 pd -u https://192.168.1.13:2379  config show

使用pd-ctl https 认证登录执行命令成功

tiup ctl:v6.5.5 pd -u https://192.168.1.13:2379 --cacert=/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --key=/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem --cert=/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt config show

5、Dashboard 访问

若浏览器未安装证书则无法正常使用 Dashboard

安装步骤以 Chorem 浏览器为例

点击设置-隐私安全-安全-管理证书-导入

默认密码:tiup

6、Grafana和Prometheus

这两个组件未开启 TLS,可以正常访问。

7、扩容 PD 节点

编写原 PD 配置文件

cat scale-out-pd.yaml
pd_servers:
- host: 192.168.1.11
  ssh_port: 22
  name: pd_ip-192.168.1.11
  client_port: 2379
  peer_port: 2380
  deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2379
  data_dir: /tidb-data1/pd/tidb-data/pd-2379/data.pd
  log_dir: /tidb-data1/pd/tidb-deploy/pd-2379/log

- host: 192.168.1.12
  ssh_port: 22
  name: pd_ip-192.168.1.12
  client_port: 2379
  peer_port: 2380
  deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2379
  data_dir: /tidb-data1/pd/tidb-data/pd-2379/data.pd
  log_dir: /tidb-data1/pd/tidb-deploy/pd-2379/log

扩容 PD

tiup cluster scale-out tidb-test scale-out-pd.yaml

《方案二》修改 PD 端口号

1、扩容新端口 PD 节点

编写扩容配置文件,注意修改端口及目录,如修改2979和2980

vi scale-out-pd.yml
pd_servers:
- host: 192.168.1.11
  ssh_port: 22
  name: pd_ip-192.168.1.11-2979
  client_port: 2979
  peer_port: 2980
  deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2979
  data_dir: /tidb-data1/pd/tidb-data/pd-2979/data.pd
  log_dir: /tidb-data1/pd/tidb-deploy/pd-2979/log

- host: 192.168.1.12
  ssh_port: 22
  name: pd_ip-192.168.1.12-2979
  client_port: 2979
  peer_port: 2980
  deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2979
  data_dir: /tidb-data1/pd/tidb-data/pd-2979/data.pd
  log_dir: /tidb-data1/pd/tidb-deploy/pd-2979/log

- host: 192.168.1.13
  ssh_port: 22
  name: pd_ip-192.168.1.13-2979
  client_port: 2979
  peer_port: 2980
  deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2979
  data_dir: /tidb-data1/pd/tidb-data/pd-2979/data.pd
  log_dir: /tidb-data1/pd/tidb-deploy/pd-2979/log

2、扩容 PD

tiup cluster scale-out tidb-test scale-out-pd.yaml -uroot -p

扩容后,每个 PD 节点各有两个端口的 PD。

3、切换 PD Leader 和 Dashboard 到新端口 PD

tiup ctl:v6.5.5 pd -u https://192.168.1.13:2379 -i

切换 PD leader,可能会对业务响应造成轻微影响
member leader transfer pd_ip-192.168.1.13-2979

切换 dashboard 服务到新 PD
config set dashboard-address http://192.168.1.13:2979
切换 TiDB Dashboard 将会丢失之前 TiDB Dashboard 实例所存储的本地数据,包括流量可视化历史、历史搜索记录等。

查看pd成员
member

4、检查集群当前状态

tiup cluster display tidb-test

5、缩容端口号为2379的 PD 节点

tiup cluster scale-in tidb-test --node 192.168.1.11:2379,192.168.1.12:2379,192.168.1.13:2379

0
2
2
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论