サーバーレス層クラスターへのセキュリティ接続
このドキュメントでは、TiDB Serverless Tier における TLS に関するコア情報を紹介します。
TiDB サーバーレス層で TLS を無効にすることはできますか?
いいえ。
TiDB サーバーレス層は、TLS 接続のみを許可し、非 TLS 接続を拒否します。その理由は、ユーザーがパブリック ネットワークを介して TiDB Serverless Tier クラスターに接続するため、通信のセキュリティを確保するために TLS を使用することが非常に重要です。
どの TLS バージョンを使用できますか?
TiDB サーバーレス層は、TLS 1.2 および TLS 1.3 をサポートしています。
どのような証明書が必要ですか?
TiDB Serverless Tier は、クライアントと TiDB Serverless Tier クラスター間の TLS 接続の認証局 (CA) として暗号化しましょうからの証明書を使用します。通常、Let's Encrypt のルート証明書 ( ISRGルートX1 ) は、システムのルート CA ストアに存在します。クライアントが Java や Go などのシステムのルート CA ストアをデフォルトで使用する場合、CA ルートのパスを指定しなくても、TiDB Serverless Tier クラスターに簡単に安全に接続できます。
ただし、一部のドライバーと ORM は、システム ルート CA ストアを使用しません。このような場合、ドライバーまたは ORM の CA ルート パスをシステム ルート CA ストアに構成する必要があります。たとえば、macOS 上の Python で TiDB Serverless Tier クラスターにmysql クライアントを使用して接続する場合、 ssl引数にca: /etc/ssl/cert.pemを設定する必要があります。
ノート:
TiDB Serverless Tier は CA ルート証明書のダウンロードを提供しません。これは、同じ CA が将来証明書を発行するために使用され、CA ルート証明書が変更されることを保証しないためです。
ただし、TiDB Serverless Tier は、すべての一般的なシステムで提供されている一般的に利用可能な CA ルート証明書を常に使用することを保証します。
TiDB Serverless Tier クラスターの CA 証明書が本当に必要な場合は、将来 CA を変更する場合に備えて、単一の CA 証明書ではなくMozilla CA 証明書バンドルをダウンロードすることをお勧めします。
内部に複数の証明書を含む証明書ファイルを受け入れない DBeaver などの GUI クライアントを使用している場合は、 ISRGルートX1の証明書をダウンロードする必要があります。
TLS 接続で TiDB Serverless Tier クラスターに接続するにはどうすればよいですか?
TiDB Cloudは、接続ダイアログでいくつかの接続例を提供します。 標準接続で接続の手順に従って、TiDB Serverless Tier クラスターに接続できます。
一般に、TLS を有効にし、サーバーを認証するための CA ルート パスを提供することは、中間者攻撃を防ぐための良い方法です。クライアントが異なれば、TLS 接続での操作も異なります。 TLS を有効にし、クライアントの実際の使用に応じてサーバーを検証します。
次の例は、MySQL CLI クライアント、MyCLI クライアント、Java、Python、Go、および Node.js での接続文字列を示しています。
デフォルトでは、MySQL CLI クライアントは TLS 接続を確立しようとします。 TiDB Serverless Tier クラスターに接続する場合は、 ssl-modeとssl-caを設定する必要があります。
mysql --connect-timeout 15 -u <username> -h <host> -P 4000 --ssl-mode=VERIFY_IDENTITY --ssl-ca=<CA_root_path> -D test -p
--ssl-mode=VERIFY_IDENTITYを指定すると、MySQL CLI クライアントは強制的に TLS を有効にし、TiDB サーバーレス層クラスターを検証します。- システムの CA ルート パスを設定するには、
--ssl-ca=<CA_root_path>を使用します。
MyCLIは、TLS 関連のパラメーターを使用するときに TLS を自動的に有効にします。 TiDB Serverless Tier クラスターに接続する場合は、 ssl-caとssl-verify-server-certを設定する必要があります。
mycli -u <username> -h <host> -P 4000 -D test --ssl-ca=<CA_root_path> --ssl-verify-server-cert
- システムの CA ルート パスを設定するには、
--ssl-ca=<CA_root_path>を使用します。 --ssl-verify-server-certを指定すると、TiDB サーバーレス層クラスターが検証されます。
ここでは、例としてMySQL コネクタ/Jの TLS 接続構成が使用されています。
jdbc:mysql://<host>:4000/test?user=<username>&password=<your_password>&sslMode=VERIFY_IDENTITY&enabledTLSProtocols=TLSv1.2,TLSv1.3
sslMode=VERIFY_IDENTITYを設定して TLS を有効にし、TiDB サーバーレス層クラスターを検証します。 JDBC はデフォルトでシステム CA ルート証明書を信頼するため、証明書を構成する必要はありません。- TLS プロトコルのバージョンを制限するには、
enabledTLSProtocols=TLSv1.2,TLSv1.3を設定します。
ここでは、例としてmysql クライアントの TLS 接続構成が使用されています。
host="<host>", user="<username>", password="<your_password>", port=4000, database="test", ssl_mode="VERIFY_IDENTITY", ssl={"ca": "<CA_root_path>"}
ssl_mode="VERIFY_IDENTITY"を設定して TLS を有効にし、TiDB サーバーレス層クラスターを検証します。- システムの CA ルート パスを設定するには、
ssl={"ca": "<CA_root_path>"}を設定します。
ここでは、例としてGo-MySQL-ドライバーの TLS 接続構成が使用されています。
mysql.RegisterTLSConfig("tidb", &tls.Config{
MinVersion: tls.VersionTLS12,
ServerName: "<host>",
})
db, err := sql.Open("mysql", "<usename>:<your_password>@tcp(<host>:4000)/test?tls=tidb")
- 接続に
tls.Configを登録して、TLS を有効にし、TiDB Serverless Tier クラスターを検証します。 Go-MySQL-Driver はデフォルトでシステム CA ルート証明書を使用するため、証明書を構成する必要はありません。 - TLS プロトコルのバージョンを制限するには、
MinVersion: tls.VersionTLS12を設定します。 - TiDB サーバーレス層のホスト名を確認するには、
ServerName: "<host>"を設定します。 - 新しい TLS 構成を登録したくない場合は、接続文字列に
tls=trueを設定するだけです。
ここでは、例としてMysql2の TLS 接続構成が使用されています。
host: '<host>', port: 4000,user: '<username>', password: '<your_password>', database: 'test', ssl: {minVersion: 'TLSv1.2', rejectUnauthorized: true}
- TLS プロトコルのバージョンを制限するには、
ssl: {minVersion: 'TLSv1.2'}を設定します。 - TiDB サーバーレス層クラスターを検証するには、
ssl: {rejectUnauthorized: true}を設定します。 Mysql2 はデフォルトでシステム CA ルート証明書を使用するため、証明書を構成する必要はありません。
システムの CA ルート パスはどこにありますか?
一般的なプラットフォームでの CA ルート パスを次に示します。
マックOS
/etc/ssl/cert.pem
Debian / Ubuntu / アーチ
/etc/ssl/certs/ca-certificates.crt
RedHat / Fedora / CentOS / Mageia
/etc/pki/tls/certs/ca-bundle.crt
高山
/etc/ssl/cert.pem
OpenSUSE
/etc/ssl/ca-bundle.pem
ウィンドウズ
Windows は、CA ルートへの特定のパスを提供しません。代わりに、 レジストリを使用して証明書を保存します。このため、Windows で CA ルート パスを指定するには、次の手順を実行します。
- Mozilla CA 証明書バンドルをダウンロードし、
<path_to_mozilla_ca_cert_bundle>などの任意のパスに保存します。 - Serverless Tier クラスターに接続するときは、パス (
<path_to_mozilla_ca_cert_bundle>) を CA ルート パスとして使用します。
TiDB Serverless Tier はクライアントの身元を確認できますか?
いいえ。
現在、TiDB Serverless Tier は一方向の TLS 認証を使用しています。つまり、クライアントのみがパブリック証明書ペアを使用してサーバーを検証し、サーバーはクライアントを検証しません。たとえば、MySQL CLI クライアントを使用する場合、接続文字列で--ssl-certまたは--ssl-keyを構成することはできません。