写点什么

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

  • 2024-12-13
    北京
  • 本文字数:2823 字

    阅读完需:约 9 分钟

作者: cchouqiang 原文来源:https://tidb.net/blog/d73c2c2f

背景

  漏洞扫描软件扫描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、查看集群状态


SQLtiup cluster display tidb-test


![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909993586.png)

### 2、缩容 PD

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


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


![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965327.png)

### 3、开启 TLS


SQLtiup cluster tls tidb-test enable


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

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733910048546.png)

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733910048596.png)

### 4、PD-CTL 访问测试

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


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


![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965333.png)

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


SQLtiup 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


![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965319.png)

### 5、Dashboard 访问

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

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965273.png)

安装步骤以 Chorem 浏览器为例

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

默认密码:tiup

### 6、Grafana和Prometheus

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

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965396.png)

### 7、扩容 PD 节点

编写原 PD 配置文件


SQLcat scale-out-pd.yamlpd_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.12ssh_port: 22name: pd_ip-192.168.1.12client_port: 2379peer_port: 2380deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2379data_dir: /tidb-data1/pd/tidb-data/pd-2379/data.pdlog_dir: /tidb-data1/pd/tidb-deploy/pd-2379/log

  • SQL


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



![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965325.png)
## 《方案二》修改 PD 端口号
### 1、扩容新端口 PD 节点
编写扩容配置文件,注意修改端口及目录,如修改2979和2980

复制代码


SQLvi scale-out-pd.ymlpd_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.12ssh_port: 22name: pd_ip-192.168.1.12-2979client_port: 2979peer_port: 2980deploy_dir: /tidb-data1/pd/tidb-deploy/pd-2979data_dir: /tidb-data1/pd/tidb-data/pd-2979/data.pdlog_dir: /tidb-data1/pd/tidb-deploy/pd-2979/log

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

  • SQL


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



![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965334.png)
扩容后,每个 PD 节点各有两个端口的 PD。
### 3、切换 PD Leader 和 Dashboard 到新端口 PD

复制代码


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


查看 pd 成员 member



![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965370.png)
### 4、检查集群当前状态

复制代码


SQLtiup cluster display tidb-test



![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733909965335.png)
### 5、缩容端口号为2379的 PD 节点

复制代码


SQLtiup cluster scale-in tidb-test –node 192.168.1.11:2379,192.168.1.12:2379,192.168.1.13:2379```



发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB 集群 PD 组件免授权访问解决方案_实践案例_TiDB 社区干货传送门_InfoQ写作社区