提高 TiDB Dashboard 安全性

    TiDB Dashboard 的账号体系与 TiDB SQL 用户一致。默认部署情况下,TiDB 的 root 用户没有密码,因而访问 TiDB Dashboard 也不需要密码验证。这将会给恶意访问者极大的集群权限,包括执行特权 SQL 等。

    建议的措施:

    • 为 TiDB 的 用户设置一个强密码(请参见 TiDB 用户账户管理了解详情),或禁用 root 账户。

    TiDB Dashboard 的账号体系与 TiDB SQL 用户一致,并基于 TiDB SQL 用户的权限进行 TiDB Dashboard 授权验证。TiDB Dashboard 所需的权限较少,甚至可以只有只读权限。可以基于最小权限原则配置合适的用户访问 TiDB Dashboard,减少高权限用户的使用场景。

    建议的措施:

    TiDB Dashboard 通过 PD Client 端口提供服务,默认为 。尽管 TiDB Dashboard 需要验证身份,但 PD Client 端口上承载的其他 PD 内部特权接口不需要验证身份,且能进行特权操作,例如 http://IP:2379/pd/api/v1/members。因此,将 PD Client 端口直接暴露给外部网络具有极大的风险。

    建议的措施:

    1. 使用防火墙禁止组件外部网络或不可信网络访问任何 PD 组件的 Client 端口。

    2. 参见 了解如何配置反向代理将 TiDB Dashboard 服务在另一个端口上安全地提供给外部网络。

    在测试环境中,您可能需要配置防火墙开放 TiDB Dashboard 端口供外部访问。

    当部署了多个 PD 实例时,其中仅有一个 PD 实例会真正运行 TiDB Dashboard,访问其他 PD 实例时会发生浏览器重定向,因此需要确保防火墙配置了正确的 IP 地址。关于该机制的详情,可参阅 章节。

    使用 TiUP 部署工具时,可使用以下命令查看实际运行 TiDB Dashboard 的 PD 实例地址(将 CLUSTER_NAME 替换为集群名称):

    输出即为实际 TiDB Dashboard 地址。

    该功能在 TiUP Cluster v1.0.3 或更高版本部署工具中提供。

    升级 TiUP Cluster 步骤

    以下是一个样例输出:

    1. http://192.168.0.123:2379/dashboard/

    在这个样例中,需要为防火墙配置开放 IP 192.168.0.123 的 端口入站访问,并通过 http://192.168.0.123:2379/dashboard/ 访问 TiDB Dashboard。

    如前文所述,PD Client 端口下提供的服务不仅有 TiDB Dashboard(位于 http://IP:2379/dashboard/),还有其他 PD 内部特权接口(如 )。因此,使用反向代理将 TiDB Dashboard 提供给外部网络时,应当确保仅提供 /dashboard 前缀下的服务,而非该端口下所有服务,避免外部网络能通过反向代理访问到 PD 内部特权接口。

    建议的措施:

    为了进一步加强传输层安全性,可以为反向代理开启 TLS,甚至可以引入 mTLS 实现访问用户的证书验证。

    请参阅 NGINX 文档或 了解如何为它们开启 TLS。