TiDB サーバーレスへの TLS 接続

クライアントと TiDB サーバーレス クラスターの間に安全な TLS 接続を確立することは、データベースに接続するための基本的なセキュリティ手法の 1 つです。 TiDB Serverless のサーバー証明書は、独立したサードパーティの証明書プロバイダーによって発行されます。サーバー側のデジタル証明書をダウンロードしなくても、TiDB サーバーレス クラスターに簡単に接続できます。

前提条件

TiDB サーバーレスクラスターへの TLS 接続

TiDB Cloudコンソールでは、さまざまな接続方法の例を取得し、次のように TiDB サーバーレス クラスターに接続できます。

  1. プロジェクトのクラスターページに移動し、クラスターの名前をクリックして概要ページに移動します。

  2. 右上隅にある「接続」をクリックします。ダイアログが表示されます。

  3. ダイアログでは、エンドポイント タイプのデフォルト設定をPublicのままにして、希望の接続方法とオペレーティング システムを選択します。

    • サポートされている接続方法: MySQL CLI、MyCLI、JDBC、Python、Go、および Node.js。
    • サポートされているオペレーティング システム: MacOS、Debian、CentOS/RedHat/Fedora、Alpine、OpenSUSE、および Windows。
  4. パスワードをまだ設定していない場合は、 「パスワードの作成」をクリックして、TiDB サーバーレスクラスター用のランダムなパスワードを生成します。クラスターに簡単に接続できるように、パスワードはサンプル接続文字列に自動的に埋め込まれます。

    注記:

    • ランダムなパスワードは、大文字、小文字、数字、特殊文字を含む 16 文字で構成されます。
    • このダイアログを閉じると、生成されたパスワードは再度表示されなくなるため、パスワードを安全な場所に保存する必要があります。パスワードを忘れた場合は、このダイアログで[パスワードのリセット]クリックしてリセットできます。
    • TiDB サーバーレス クラスターにはインターネット経由でアクセスできます。他の場所でパスワードを使用する必要がある場合は、データベースのセキュリティを確保するためにパスワードをリセットすることをお勧めします。
  5. 接続文字列を使用してクラスターに接続します。

    注記:

    TiDB サーバーレス クラスターに接続するときは、ユーザー名にクラスターのプレフィックスを含め、名前を引用符で囲む必要があります。詳細については、 ユーザー名のプレフィックスを参照してください。

次の例は、MySQL CLI、MyCLI、JDBC、Python、Go、および Node.js の接続文字列を示しています。オペレーティング システムの<CA_root_path>取得する方法については、 ルート証明書の管理を参照してください。

  • MySQL CLI
  • MyCLI
  • JDBC
  • Python
  • Go
  • Node.js

MySQL CLI クライアントは、デフォルトで TLS 接続の確立を試みます。 TiDB サーバーレス クラスターに接続する場合は、 ssl-modessl-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 サーバーレス クラスターに接続する場合は、 ssl-cassl-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://:4000/test?user=&password=&sslMode=VERIFY_IDENTITY&enabledTLSProtocols=TLSv1.2,TLSv1.3
  • TLS を有効にして TiDB サーバーレス クラスターを検証するには、 sslMode=VERIFY_IDENTITYを設定します。 JDBC はデフォルトでシステム CA ルート証明書を信頼するため、証明書を構成する必要はありません。
  • TLS プロトコルのバージョンを制限するには、 enabledTLSProtocols=TLSv1.2,TLSv1.3を設定します。

ここでは例としてmysqlクライアントの TLS 接続構成が使用されています。

host="", user="", password="", port=4000, database="test", ssl_mode="VERIFY_IDENTITY", ssl={"ca": ""}
  • TLS を有効にして TiDB サーバーレス クラスターを検証するには、 ssl_mode="VERIFY_IDENTITY"を設定します。
  • システム上の CA ルート パスを設定するには、 ssl={"ca": "<CA_root_path>"}を設定します。

ここでは例としてGo-MySQL-ドライバーの TLS 接続構成が使用されています。

mysql.RegisterTLSConfig("tidb", &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "", }) db, err := sql.Open("mysql", ":@tcp(:4000)/test?tls=tidb")
  • 接続にtls.Configを登録して TLS を有効にし、TiDB サーバーレス クラスターを検証します。 Go-MySQL-Driver はデフォルトでシステム CA ルート証明書を使用するため、証明書を構成する必要はありません。
  • TLS プロトコルのバージョンを制限するには、 MinVersion: tls.VersionTLS12を設定します。
  • TiDB Serverless のホスト名を検証するにはServerName: "<host>"を設定します。
  • 新しい TLS 構成を登録したくない場合は、接続文字列にtls=trueを設定するだけで済みます。

ここでは例としてMySQL2の TLS 接続構成が使用されています。

host: '', port: 4000,user: '', password: '', database: 'test', ssl: {minVersion: 'TLSv1.2', rejectUnauthorized: true}
  • TLS プロトコルのバージョンを制限するには、 ssl: {minVersion: 'TLSv1.2'}を設定します。
  • TiDB サーバーレス クラスターを検証するにはssl: {rejectUnauthorized: true}を設定します。 Mysql2 はデフォルトでシステム CA ルート証明書を使用するため、証明書を構成する必要はありません。

ルート証明書の管理

ルート証明書の発行と有効性

TiDB サーバーレスは、クライアントと TiDB サーバーレス クラスター間の TLS 接続の認証局 (CA) として暗号化しましょうの証明書を使用します。 TiDB サーバーレス証明書の有効期限が切れると、クラスターの通常の動作や確立された TLS セキュア接続に影響を与えることなく、自動的にローテーションされます。

注記:

TiDB サーバーレスは、CA ルート証明書のダウンロードを提供しません。これは、将来同じ CA が証明書の発行に使用されることが保証されず、CA ルート証明書が変更される可能性があるためです。

クライアントがJavaや Go などのシステムのルート CA ストアをデフォルトで使用する場合、CA ルートのパスを指定しなくても TiDB サーバーレス クラスターに安全に簡単に接続できます。それでも TiDB サーバーレス クラスターの CA 証明書を取得したい場合は、単一の CA 証明書の代わりにMozilla CA 証明書バンドルダウンロードして使用できます。

ただし、一部のドライバーと ORM はシステム ルート CA ストアを使用しません。このような場合は、ドライバーまたは ORM の CA ルート パスをシステムのルート CA ストアに構成する必要があります。たとえば、macOS 上の Python で TiDB サーバーレス クラスターにmysqlクライアントを使用して接続する場合、引数sslca: /etc/ssl/cert.pem設定する必要があります。

DBeaver など、内部に複数の証明書を含む証明書ファイルを受け入れない GUI クライアントを使用している場合は、 ISRG ルート X1証明書をダウンロードする必要があります。

ルート証明書のデフォルトのパス

さまざまなオペレーティング システムでのルート証明書のデフォルトのstorageパスは次のとおりです。

マックOS

/etc/ssl/cert.pem

Debian / Ubuntu / Arch

/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 ルート パスを指定するには、次の手順を実行します。

  1. Mozilla CA 証明書バンドルダウンロードし、 <path_to_mozilla_ca_cert_bundle>などの任意のパスに保存します。
  2. TiDB サーバーレス クラスターに接続する場合は、パス ( <path_to_mozilla_ca_cert_bundle> ) を CA ルート パスとして使用します。

よくある質問

TiDB サーバーレス クラスターへの接続ではどの TLS バージョンがサポートされていますか?

セキュリティ上の理由から、TiDB サーバーレスは TLS 1.2 と TLS 1.3 のみをサポートし、TLS 1.0 と TLS 1.1 バージョンはサポートしません。詳細については、IETF TLS 1.0 と TLS 1.1 の廃止を参照してください。

接続クライアントと TiDB サーバーレス間の双方向 TLS 認証はサポートされていますか?

いいえ。

TiDB サーバーレスは一方向の TLS 認証のみをサポートします。つまり、クラスターはクライアントを検証せずに、クライアントは公開鍵を使用してTiDB Cloudクラスター証明書の秘密鍵の署名を検証します。

TiDB サーバーレスは安全な接続を確立するために TLS を構成する必要がありますか?

標準接続の場合、TiDB サーバーレスは TLS 接続のみを許可し、非 SSL/TLS 接続を禁止します。その理由は、SSL/TLS は、インターネット経由で TiDB サーバーレス クラスターに接続するときに、データがインターネットに公開されるリスクを軽減するための最も基本的なセキュリティ対策の 1 つであるためです。

プライベート エンドポイント接続の場合、 TiDB Cloudサービスへの安全性の高い一方向アクセスがサポートされ、データがパブリック インターネットに公開されないため、TLS の構成はオプションです。

このページは役に立ちましたか?

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.