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 インスタンスに接続するには
-
すべての AWS リージョン で使用できるルート証明書をダウンロードします。
証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。
-
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 -umyadmin
-pSSL/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 -umyadmin
-p次の例は、MariaDB で
--ssl-ca
パラメータを使用しながら、クライアントを起動する方法を示しています。mysql -h
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
--ssl-ca=global-bundle.pem
--ssl -P 3306 -umyadmin
-p -
プロンプトが表示されたら、マスターユーザーパスワードを入力します。
以下のような出力結果が表示されるはずです。
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>