提高 TiDB Dashboard 安全性
尽管访问 TiDB Dashboard 需要登录,但它被设计为默认供可信的用户实体访问。当你希望将 TiDB Dashboard 提供给外部网络用户或不可信用户访问时,需要注意采取以下措施以避免安全漏洞。
提高 TiDB 用户安全性
为 root
用户设置强密码
TiDB Dashboard 的账号体系与 TiDB SQL 用户一致。默认部署情况下,TiDB 的 root
用户没有密码,因而访问 TiDB Dashboard 也不需要密码验证。这将会给恶意访问者极大的集群权限,包括执行特权 SQL 等。
建议的措施:
- 为 TiDB 的
root
用户设置一个强密码(请参见 TiDB 用户账户管理了解详情),或禁用root
账户。
为 TiDB Dashboard 创建最小权限用户
TiDB Dashboard 的账号体系与 TiDB SQL 用户一致,并基于 TiDB SQL 用户的权限进行 TiDB Dashboard 授权验证。TiDB Dashboard 所需的权限较少,甚至可以只有只读权限。可以基于最小权限原则配置合适的用户访问 TiDB Dashboard,减少高权限用户的使用场景。
建议的措施:
- 为访问 TiDB Dashboard 创建一个最小权限的 SQL 用户,并用该用户登录 TiDB Dashboard,避免使用高权限用户,提升安全性。请参见 TiDB Dashboard 用户管理了解详情。
使用防火墙阻止不可信访问
TiDB Dashboard 通过 PD Client 端口提供服务,默认为 http://IP:2379/dashboard/。尽管 TiDB Dashboard 需要验证身份,但 PD Client 端口上承载的其他 PD 内部特权接口不需要验证身份,且能进行特权操作,例如 http://IP:2379/pd/api/v1/members。因此,将 PD Client 端口直接暴露给外部网络具有极大的风险。
建议的措施:
使用防火墙禁止组件外部网络或不可信网络访问任何 PD 组件的 Client 端口。
注意,TiDB、TiKV 等组件需要通过 PD Client 端口与 PD 组件进行通信,因此请勿对组件内部网络阻止访问,这将导致集群不可用。
参见通过反向代理使用 TiDB Dashboard 了解如何配置反向代理将 TiDB Dashboard 服务在另一个端口上安全地提供给外部网络。
如何在多 PD 实例部署时开放 TiDB Dashboard 端口访问
在测试环境中,您可能需要配置防火墙开放 TiDB Dashboard 端口供外部访问。
当部署了多个 PD 实例时,其中仅有一个 PD 实例会真正运行 TiDB Dashboard,访问其他 PD 实例时会发生浏览器重定向,因此需要确保防火墙配置了正确的 IP 地址。关于该机制的详情,可参阅 TiDB Dashboard 多 PD 实例部署章节。
使用 TiUP 部署工具时,可使用以下命令查看实际运行 TiDB Dashboard 的 PD 实例地址(将 CLUSTER_NAME
替换为集群名称):
tiup cluster display CLUSTER_NAME --dashboard
输出即为实际 TiDB Dashboard 地址。
以下是一个样例输出:
http://192.168.0.123:2379/dashboard/
在这个样例中,需要为防火墙配置开放 IP 192.168.0.123
的 2379
端口入站访问,并通过 http://192.168.0.123:2379/dashboard/ 访问 TiDB Dashboard。
反向代理仅代理 TiDB Dashboard
如前文所述,PD Client 端口下提供的服务不仅有 TiDB Dashboard(位于 http://IP:2379/dashboard/),还有其他 PD 内部特权接口(如 http://IP:2379/pd/api/v1/members)。因此,使用反向代理将 TiDB Dashboard 提供给外部网络时,应当确保仅提供 /dashboard
前缀下的服务,而非该端口下所有服务,避免外部网络能通过反向代理访问到 PD 内部特权接口。
建议的措施:
- 参见通过反向代理使用 TiDB Dashboard 了解安全且推荐的反向代理配置。
为反向代理开启 TLS
为了进一步加强传输层安全性,可以为反向代理开启 TLS,甚至可以引入 mTLS 实现访问用户的证书验证。
请参阅 NGINX 文档或 HAProxy 文档了解如何为它们开启 TLS。