SSL/TLS を使用した MySQL DB インスタンスへのクライアント接続の暗号化 - Amazon Relational Database Service

SSL/TLS を使用した MySQL DB インスタンスへのクライアント接続の暗号化

Secure Sockets Layer (SSL) は、クライアントとサーバー間のネットワーク接続を安全に保つための業界標準のプロトコルです。SSL バージョン 3.0 以降では、名前が Transport Layer Security (TLS) に変更されています。Amazon RDS は、MySQL DB インスタンス向けに SSL/TLS 暗号化をサポートしています。SSL/TLS を使用して、アプリケーションクライアントと MySQL DB インスタンス間の接続を暗号化できます。SSL/TLS サポートは、MySQL のすべての AWS リージョン で提供されています。

MySQL DB インスタンスで SSL を使用する

Amazon RDS によって、Amazon RDS によるインスタンスのプロビジョニング時、SSL/TLS 証明書が作成され、DB インスタンスにインストールされます。これらの証明書は認証局によって署名されます。SSL/TLS 証明書には、なりすまし攻撃から保護するために、SSL/TLS 証明書の共通名 (CN) として DB インスタンスのエンドポイントが含まれています。

Amazon RDS によって作成された SSL/TLS 証明書は信頼されたルートエンティティであり、ほとんどの場合は使用できますが、アプリケーションが証明書チェーンを受け入れていない場合は使用できない可能性があります。アプリケーションが証明書チェーンを受け入れていない場合は、AWS リージョン に接続している中間証明書の使用が必要になる場合があります。たとえば、SSL/TLS を使用して AWS GovCloud (US) に接続するには、中間証明書を使用する必要があります。

証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。MySQL での SSL/TLS の使用の詳細については、「新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新する」を参照してください。

MySQL は、セキュアな接続に OpenSSL を使用します。Amazon RDS for MySQL は Transport Layer Security (TLS) バージョン 1.0、1.1、1.2 および 1.3 をサポートしています。TLS のサポートは MySQL のバージョンによって異なります。次の表は、MySQL バージョンの TLS サポートを示しています。

MySQL のバージョン TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3

MySQL 8.0

サポート外

サポート外

サポート対象

サポート対象

MySQL 5.7

サポート対象

サポート対象

サポート対象

サポート外

特定のユーザーアカウントに対して SSL/TLS 接続を要求できます。例えば、MySQL バージョンに応じて以下のいずれかのステートメントを使用し、ユーザーアカウント encrypted_user に対する SSL/TLS 接続を要求できます。

これを行うには、以下のステートメントを実行します。

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

MySQL での SSL/TLS 接続の詳細については、MySQL ドキュメントで「暗号化された接続の使用」を参照してください。

MySQL DB インスタンスへのすべての接続に SSL/TLS を要求する

MySQL DB インスタンスへのすべてのユーザー接続で SSL/TLS を使用するように、require_secure_transport パラメータを使用して要求します。デフォルトでは、require_secure_transport パラメータが OFF に設定されています。require_secure_transport パラメータを ON に設定すれば、DB インスタンスへの接続で SSL/TLS を必須にすることができます。

require_secure_transport パラメータの値は、DB インスタンスの DB パラメータグループを更新することで設定できます。変更を有効にするために、DB インスタンスを再起動する必要はありません。

DB インスタンスに対して require_secure_transport パラメータが ON に設定されている場合、データベースクライアントが暗号化された接続を確立できれば、データベースクライアントはそのクラスターに接続できます。それ以外の場合は、次のようなエラーメッセージがクライアントに返されます。

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

パラメータの設定の詳細については、「DB パラメータグループのパラメータの変更」を参照してください。

require_secure_transport パラメータの詳細については、MySQL のドキュメントを参照してください。

SSL/TLS を使用した MySQL コマンドラインクライアントからの接続 (暗号化)

MySQL 5.7 バージョン、MySQL 8.0 バージョン、または MariaDB バージョンを使用している場合は、mysql クライアントプログラムのパラメータが若干異なります。

使用しているバージョンを確認するには、--version オプションを指定しながら mysql コマンドを実行します。次の例の出力では、MariaDB のクライアントプログラムが使用されていることが確認できます。

$ mysql --version mysql Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1

Amazon Linux、CentOS、SUSE、Debianなど、ほとんどのLinux ディストリビューションでは、MySQL をMariaDB に置き換えており、mysql バージョンは MariaDB と同じものを使用しています。

SSL/TLS を使用して DB インスタンスに接続するには、以下のステップを実行します。

MySQL コマンドラインクライアントを使用して SSL/TLS で DB インスタンスに接続するには
  1. すべての AWS リージョン で使用できるルート証明書をダウンロードします。

    証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。

  2. MySQL コマンドラインクライアントを使用して、SSL/TLS 暗号化を使用して DB インスタンスに接続します。-h パラメータは、DB インスタンスの DNS 名 (エンドポイント) に置き換えます。--ssl-ca パラメータは、必要に応じて SSL/TLS 証明書のファイル名に置き換えます。-P パラメータは、使用中の DB インスタンスのポートに置き換えます。-u パラメータでは、マスターユーザーなどの有効なデータベースユーザーのユーザー名に置き換えます。プロンプトが表示されたら、マスターユーザーパスワードを入力します。

    次の例は、MySQL 5.7 以降で --ssl-ca パラメータを使用しながら、クライアントを起動する方法を示しています。

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p

    SSL/TLS 接続で DB インスタンスのエンドポイントを SSL/TLS 証明書のエンドポイントと照合することを義務付けるには、次のコマンドを入力します。

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p

    次の例は、MariaDB で --ssl-ca パラメータを使用しながら、クライアントを起動する方法を示しています。

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
  3. プロンプトが表示されたら、マスターユーザーパスワードを入力します。

以下のような出力結果が表示されるはずです。

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9738 Server version: 8.0.28 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>