TiDB 専用の TLS 接続

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

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

前提条件

  • パスワード認証またはSSO認証介してTiDB Cloudにログインし、次にTiDB 専用クラスターの作成実行します。

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

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

TiDB 専用クラスターへのセキュリティ接続

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

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

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

  3. このダイアログの「標準接続」タブで、3 つの手順に従って TLS 接続を設定します。

    • ステップ 1:トラフィックフィルターを作成する
    • ステップ 2:TiDB クラスター CA をダウンロードする
    • ステップ 3:SQL クライアントに接続する
  4. ダイアログの「ステップ 1: トラフィック フィルターを作成する」で、クラスターへのアクセスを許可する IP アドレスを構成します。詳細については、 標準接続でのIPアクセスリストの設定を参照してください。

  5. [ステップ 2: TiDB クラスター CA をダウンロードする][TiDB クラスター CA をダウンロード] をクリックして、クライアント TLS 構成用にローカルにダウンロードします。 TiDB クラスター CA は、TLS 接続が安全で信頼できることを保証します。

    注記:

    TiDB 専用クラスター CA をダウンロードした後、それをオペレーティング システムのデフォルトのstorageパスに保存することも、別のstorageパスを指定することもできます。後続の手順では、コード例の CA パスを独自のクラスター CA パスに置き換える必要があります。

  6. ダイアログの「ステップ 3: SQL クライアントに接続する」で、希望する接続方法のタブをクリックし、タブ上の接続文字列とサンプル コードを参照してクラスターに接続します。

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

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

MySQL CLI クライアントは、デフォルトで TLS 接続の確立を試みます。 TiDB 専用クラスターに接続する場合は、 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 専用クラスターを検証します。
  • --ssl-ca=<CA_path>を使用して、ダウンロードした TiDB クラスターのローカル パスを指定します。 ca.pem
  • TLS プロトコルのバージョンを制限するには、 --tls-version=TLSv1.2を使用します。 TLS 1.3 を使用する場合は、バージョンをTLSv1.3に設定できます。

MyCLI TLS 関連パラメータを使用するときに TLS を自動的に有効にします。 TiDB 専用クラスターに接続する場合は、 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 専用クラスターが検証されます。

ここでは例として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 専用クラスターを検証するには、 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 専用クラスターを検証するには、 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 接続構成にtls.Config登録して、TLS を有効にし、TiDB 専用クラスターを検証します。
  • TLS プロトコルのバージョンを制限するには、 MinVersion: tls.VersionTLS12を設定します。
  • TiDB Dended のホスト名を検証するにはServerName: "<host>"を設定します。
  • 新しい TLS 構成を登録したくない場合は、接続文字列にtls=trueを設定するだけで済みます。

ここでは例としてMySQL2の 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 パスを読み取るには、 ssl: {ca: fs.readFileSync('<CA_path>')}を設定します。 ca.pem

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

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

よくある質問

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

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

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

いいえ。

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

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

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