TiDB Cloud専用へのTLS接続

TiDB Cloudでは、TLS 接続を確立することが、 TiDB Cloud Dedicated クラスターに接続するための基本的なセキュリティ プラクティスの 1 つです。クライアント、アプリケーション、開発ツールからTiDB Cloud Dedicated クラスターへの複数の TLS 接続を構成して、データ転送のセキュリティを保護できます。セキュリティ上の理由から、 TiDB Cloud Dedicated は TLS 1.2 と TLS 1.3 のみをサポートし、TLS 1.0 と TLS 1.1 バージョンはサポートしていません。

データのセキュリティを確保するため、 TiDB Cloud Dedicated クラスターの TiDB クラスター CA はAWS 証明書マネージャー (ACM)でホストされ、TiDB クラスターの秘密キーはFIPS 140-2 レベル 3セキュリティ標準を満たす AWS 管理のハードウェアセキュリティモジュール (HSM) に保存されます。

前提条件

  • パスワード認証またはSSO認証でTiDB Cloudにログインし、次にTiDB Cloud専用クラスターを作成するログインします。

  • 安全な設定でクラスターにアクセスするためのパスワードを設定します。

    これを行うには、プロジェクトのクラスターページに移動し、 TiDB Cloud Dedicated クラスターの行で[...]をクリックして、 [パスワード設定]を選択します。パスワード設定で、 [パスワードの自動生成]クリックすると、数字、大文字と小文字、特殊文字を含む 16 文字の長さのルート パスワードが自動的に生成されます。

TiDB Cloud Dedicated クラスタへのセキュリティ接続

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

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

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

  3. 接続ダイアログで、 「接続タイプ」ドロップダウンリストから「パブリック」を選択します。

    IP アクセス リストを設定していない場合は、最初の接続の前に[IP アクセス リストの設定]クリックして設定してください。詳細については、 IPアクセスリストを構成するを参照してください。

  4. CA 証明書をクリックして、TiDB クラスターへの TLS 接続用の CA 証明書をダウンロードします。CA 証明書は、デフォルトで TLS 1.2 バージョンをサポートします。

    注記:

    • ダウンロードした CA 証明書は、オペレーティング システムのデフォルトのstorageパスに保存することも、別のstorageパスを指定することもできます。後続の手順では、コード例の CA 証明書パスを独自の CA 証明書パスに置き換える必要があります。
    • TiDB Cloud Dedicated では、クライアントに TLS 接続の使用を強制しません。また、 require_secure_transport変数のユーザー定義構成は現在、 TiDB Cloud Dedicated ではサポートされていません。
  5. 希望する接続方法を選択し、タブの接続文字列とサンプル コードを参照してクラスターに接続します。

次の例は、MySQL、MyCLI、JDBC、Python、Go、および Node.js の接続文字列を示しています。

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

MySQL CLI クライアントは、デフォルトで TLS 接続を確立しようとします。TiDB TiDB Cloud Dedicated クラスターに接続する場合は、 ssl-modessl-ca設定する必要があります。

mysql --connect-timeout 15 --ssl-mode=VERIFY_IDENTITY --ssl-ca=ca.pem --tls-version="TLSv1.2" -u root -h tidb.eqlfbdgthh8.clusters.staging.tidb-cloud.com -P 4000 -D test -p

パラメータの説明:

  • --ssl-mode=VERIFY_IDENTITYでは、MySQL CLI クライアントは TLS を有効にし、 TiDB Cloud Dedicated クラスターを検証することを強制します。
  • --ssl-ca=<CA_path>を使用して、ダウンロードした TiDB クラスターca.pemのローカル パスを指定します。
  • TLS プロトコルのバージョンを制限するには--tls-version=TLSv1.2使用します。TLS 1.3 を使用する場合は、バージョンをTLSv1.3に設定できます。

マイクリ 、 TLS 関連のパラメータを使用するときに TLS を自動的に有効にします。TiDB TiDB Cloud Dedicated クラスターに接続する場合は、 ssl-cassl-verify-server-cert設定する必要があります。

mycli --ssl-ca=ca.pem --ssl-verify-server-cert -u root -h tidb.eqlfbdgthh8.clusters.staging.tidb-cloud.com -P 4000 -D test

パラメータの説明:

  • --ssl-ca=<CA_path>使用して、ダウンロードした TiDB クラスターca.pemのローカル パスを指定します。
  • --ssl-verify-server-certでTiDB Cloud Dedicated クラスターを検証します。

ここでは例としてMySQL コネクタ/Jの TLS 接続構成を使用します。

TiDB クラスター CA をダウンロードした後、それをオペレーティング システムにインポートする場合は、 keytool -importcert -alias TiDBCACert -file ca.pem -keystore <your_custom_truststore_path> -storepass <your_truststore_password>コマンドを使用できます。

/* Be sure to replace the parameters in the following connection string. */ /* version >= 8.0.28 */ jdbc:mysql://tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com:4000/test?user=root&password=<your_password>&sslMode=VERIFY_IDENTITY&tlsVersions=TLSv1.2&trustCertificateKeyStoreUrl=file:<your_custom_truststore_path>&trustCertificateKeyStorePassword=<your_truststore_password>

詳細なコード例を表示するには、 「使用例を表示」をクリックします。

import com.mysql.jdbc.Driver; import java.sql.*; class Main { public static void main(String args[]) throws SQLException, ClassNotFoundException { Class.forName("com.mysql.cj.jdbc.Driver"); try { Connection conn = DriverManager.getConnection("jdbc:mysql://tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com:4000/test?user=root&password=<your_password>&sslMode=VERIFY_IDENTITY&tlsVersions=TLSv1.2&trustCertificateKeyStoreUrl=file:<your_custom_truststore_path>&trustCertificateKeyStorePassword=<your_truststore_password>"); Statement stmt = conn.createStatement(); try { ResultSet rs = stmt.executeQuery("SELECT DATABASE();"); if (rs.next()) { System.out.println("using db:" + rs.getString(1)); } } catch (Exception e) { System.out.println("exec error:" + e); } } catch (Exception e) { System.out.println("connect error:" + e); } } }

パラメータの説明:

  • TLS を有効にしてTiDB Cloud Dedicated クラスターを検証するには、 sslMode=VERIFY_IDENTITY設定します。
  • TLS プロトコルのバージョンを制限するにはenabledTLSProtocols=TLSv1.2設定します。TLS 1.3 を使用する場合は、バージョンをTLSv1.3に設定できます。
  • カスタム トラストストア パスにtrustCertificateKeyStoreUrl設定します。
  • トラストストアのパスワードをtrustCertificateKeyStorePasswordに設定します。

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

host="tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com", user="root", password="<your_password>", port=4000, database="test", ssl_mode="VERIFY_IDENTITY", ssl={"ca": "ca.pem"}

詳細なコード例を表示するには、 「使用例を表示」をクリックします。

import MySQLdb connection = MySQLdb.connect(host="tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com", port=4000, user="root", password="<your_password>", database="test", ssl_mode="VERIFY_IDENTITY", ssl={"ca": "ca.pem"}) with connection: with connection.cursor() as cursor: cursor.execute("SELECT DATABASE();") m = cursor.fetchone() print(m[0])

パラメータの説明:

  • TLS を有効にしてTiDB Cloud Dedicated クラスターを検証するには、 ssl_mode="VERIFY_IDENTITY"設定します。
  • ssl={"ca": "<CA_path>"}を使用して、ダウンロードした TiDB クラスターca.pemのローカル パスを指定します。

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

rootCertPool := x509.NewCertPool() pem, err := ioutil.ReadFile("ca.pem") if err != nil { log.Fatal(err) } if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { log.Fatal("Failed to append PEM.") } mysql.RegisterTLSConfig("tidb", &tls.Config{ RootCAs: rootCertPool, MinVersion: tls.VersionTLS12, ServerName: "tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com", }) db, err := sql.Open("mysql", "root:<your_password>@tcp(tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com:4000)/test?tls=tidb")

詳細なコード例を表示するには、 「使用例を表示」をクリックします。

package main import ( "crypto/tls" "crypto/x509" "database/sql" "fmt" "io/ioutil" "log" "github.com/go-sql-driver/mysql" ) func main() { rootCertPool := x509.NewCertPool() pem, err := ioutil.ReadFile("ca.pem") if err != nil { log.Fatal(err) } if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { log.Fatal("Failed to append PEM.") } mysql.RegisterTLSConfig("tidb", &tls.Config{ RootCAs: rootCertPool, MinVersion: tls.VersionTLS12, ServerName: "tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com", }) db, err := sql.Open("mysql", "root:<your_password>@tcp(tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com:4000)/test?tls=tidb") if err != nil { log.Fatal("failed to connect database", err) } defer db.Close() var dbName string err = db.QueryRow("SELECT DATABASE();").Scan(&dbName) if err != nil { log.Fatal("failed to execute query", err) } fmt.Println(dbName) }

パラメータの説明:

  • TLS を有効にしてTiDB Cloud Dedicated クラスターを検証するには、TLS 接続構成にtls.Config登録します。
  • TLS プロトコルのバージョンを制限するにはMinVersion: tls.VersionTLS12設定します。
  • TiDB Cloud Dedicated のホスト名を確認するにはServerName: "<host>"設定します。
  • 新しい TLS 構成を登録したくない場合は、接続文字列にtls=true設定するだけです。

ここでは例としてマイSQL2の TLS 接続構成を使用します。

var connection = mysql.createConnection({ host: 'tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com', port: 4000, user: 'root', password: '<your_password>', database: 'test', ssl: { ca: fs.readFileSync('ca.pem'), minVersion: 'TLSv1.2', rejectUnauthorized: true } });

詳細なコード例を表示するには、 「使用例を表示」をクリックします。

var mysql = require('mysql2'); var fs = require('fs'); var connection = mysql.createConnection({ host: 'tidb.srgnqxji5bc.clusters.staging.tidb-cloud.com', port: 4000, user: 'root', password: '<your_password>', database: 'test', ssl: { ca: fs.readFileSync('ca.pem'), minVersion: 'TLSv1.2', rejectUnauthorized: true } }); connection.connect(function(err) { if (err) { throw err } connection.query('SELECT DATABASE();', function(err, rows) { if (err) { throw err } console.log(rows[0]['DATABASE()']); connection.end() }); });

パラメータの説明:

  • TLS プロトコルのバージョンを制限するにはssl: {minVersion: 'TLSv1.2'}設定します。TLS 1.3 を使用する場合は、バージョンをTLSv1.3に設定できます。
  • ダウンロードした TiDB クラスターca.pemのローカル CA パスを読み取るにはssl: {ca: fs.readFileSync('<CA_path>')}設定します。

TiDB Cloud Dedicatedのルート証明書を管理する

TiDB Cloud Dedicated は、クライアントとTiDB Cloud Dedicated クラスター間の TLS 接続に、 AWS 証明書マネージャー (ACM)の証明書を認証局 (CA) として使用します。通常、ACM のルート証明書は、 FIPS 140-2 レベル 3セキュリティ標準を満たす AWS 管理のハードウェアセキュリティモジュール (HSM) に安全に保存されます。

よくある質問

TiDB Cloud Dedicated クラスターに接続するためにサポートされている TLS バージョンはどれですか?

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

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

いいえ。

TiDB Cloud Dedicated は片方向 TLS 認証のみをサポートしており、現在双方向 TLS 認証はサポートしていません。双方向 TLS 認証が必要な場合は、 TiDB Cloudサポートお問い合わせください。

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