セキュリティTiDBダッシュボード
TiDBダッシュボードにアクセスするにはサインインが必要ですが、TiDBダッシュボードはデフォルトで信頼できるユーザーエンティティからのアクセスを想定して設計されています。外部ネットワークユーザーや信頼できないユーザーにTiDBダッシュボードへのアクセスを許可する場合は、セキュリティ上の脆弱性を回避するために以下の対策を講じてください。
TiDBユーザーのセキュリティを強化する
TiDB rootユーザーに強力なパスワードを設定する
TiDBダッシュボードのアカウントシステムは、 TiDB SQLユーザーのアカウントシステムと一致しています。デフォルトでは、TiDBのrootユーザーにはパスワードが設定されていないため、TiDBダッシュボードへのアクセスにはパスワード認証が不要です。これにより、悪意のある訪問者は、特権SQL文の実行を含む高い権限を取得できます。
TiDB rootユーザーには強力なパスワードを設定することをお勧めします。詳細はTiDB ユーザーアカウント管理ご覧ください。または、TiDB rootユーザーを無効にすることもできます。
TiDBダッシュボード用の最小権限ユーザーを作成する
TiDBダッシュボードのアカウントシステムは、 TiDB SQLのアカウントシステムと一致しています。TiDBダッシュボードにアクセスするユーザーは、 TiDB SQLユーザーの権限に基づいて認証および承認されます。そのため、TiDBダッシュボードでは限定的な権限、つまり読み取り専用権限のみが必要です。最小権限の原則に基づいてユーザーがTiDBダッシュボードにアクセスできるように設定することで、高い権限を持つユーザーのアクセスを回避できます。
TiDBダッシュボードへのアクセスとサインインには、最小限の権限を持つSQLユーザーを作成することをお勧めします。これにより、高い権限を持つユーザーによるアクセスを回避し、セキュリティを向上できます。詳細はTiDBダッシュボードのユーザー管理ご覧ください。
ファイアウォールを使用して信頼できないアクセスをブロックする
注記:
TiDB v6.5.0以降およびTiDB Operator v1.4.0以降は、Kubernetes上にTiDB Dashboardを独立したPodとしてデプロイすることをサポートしています。TiDB TiDB Operatorを使用すると、このPodのIPアドレスにアクセスしてTiDB Dashboardを起動できます。このポートはPDの他の特権インターフェースとは通信しないため、外部から提供される場合でも追加のファイアウォールは必要ありません。詳細はTiDB ダッシュボードをTiDB Operatorで独立してデプロイ参照してください。
TiDBダッシュボードは、デフォルトでhttp://IP:2379/ダッシュボード/に設定されているPDクライアントポートを介してサービスを提供します。TiDBダッシュボードはID認証を必要としますが、PDクライアントポートで実行されるPD内の他の特権インターフェース( http://IP:2379/pd/api/v1/membersなど)はID認証を必要とせず、特権操作を実行できます。したがって、PDクライアントポートを外部ネットワークに直接公開することは非常に危険です。
以下の対策を講じることをお勧めします。
ファイアウォールを使用して、コンポーネントが外部ネットワークまたは信頼できないネットワーク経由で PDコンポーネントのクライアントポートにアクセスすることを禁止します。
注記:
TiDB、TiKV、その他のコンポーネントは、PDクライアントポートを介してPDコンポーネントと通信する必要があるため、コンポーネント間の内部ネットワークへのアクセスをブロックしないでください。ブロックすると、クラスターが使用できなくなります。
リバース プロキシを構成して、別のポートで TiDB ダッシュボード サービスを外部ネットワークに安全に提供する方法の詳細については、 リバースプロキシの背後でTiDBダッシュボードを使用する参照してください。
複数のPDインスタンスを展開するときにTiDBダッシュボードポートへのアクセスを開く方法
テスト環境では、外部アクセス用に TiDB ダッシュボード ポートを開くようにファイアウォールを構成する必要がある場合があります。
複数のPDインスタンスがデプロイされている場合、TiDBダッシュボードは実際に1つのPDインスタンスのみで実行され、他のPDインスタンスにアクセスするとブラウザのリダイレクトが発生します。そのため、ファイアウォールに正しいIPアドレスが設定されていることを確認する必要があります。このメカニズムの詳細については、 複数のPDインスタンスを使用したデプロイメント参照してください。
TiUPデプロイメント ツールを使用する場合、次のコマンドを実行すると、実際に TiDB ダッシュボードを実行している PD インスタンスのアドレスを表示できます ( CLUSTER_NAMEクラスター名に置き換えます)。
tiup cluster display CLUSTER_NAME --dashboard
出力は実際の TiDB ダッシュボード アドレスです。
注記:
この機能は、
tiup clusterデプロイメント ツールの新しいバージョン (v1.0.3 以降) でのみ使用できます。TiUPクラスタのアップグレード
tiup update --self tiup update cluster --force
以下はサンプル出力です。
http://192.168.0.123:2379/dashboard/
この例では、ファイアウォールを192.168.0.123開いている IP の2379ポートへの受信アクセスで構成する必要があり、TiDB ダッシュボードにはhttp://192.168.0.123:2379/ダッシュボード/経由でアクセスします。
TiDBダッシュボード専用のリバースプロキシ
ファイアウォールを使用して信頼できないアクセスをブロックするで述べたように、PDクライアントポートで提供されるサービスには、TiDBダッシュボード( http://IP:2379/ダッシュボード/ )だけでなく、PD内の他の特権インターフェース( http://IP:2379/pd/api/v1/membersなど)も含まれます。したがって、リバースプロキシを使用してTiDBダッシュボードを外部ネットワークに提供する場合は、外部ネットワークがリバースプロキシを介してPD内の特権インターフェースにアクセスできないように、ポート内のすべてのサービスではなく、プレフィックスが/dashboardサービスのみを提供するようにしてください。
安全で推奨されるリバース プロキシ構成を確認するには、 リバースプロキシの背後でTiDBダッシュボードを使用する参照することをお勧めします。
リバースプロキシのTLSを有効にする
トランスポートレイヤーのセキュリティをさらに強化するには、リバース プロキシに対して TLS を有効にし、さらに mTLS を導入してユーザー証明書を認証することもできます。
詳細はHTTPSサーバーの設定とHAProxy SSL 終了ご覧ください。