Amazon Linux 2023からRDS MySQLに接続するときにMariaDBを使う方法

2023.08.25

こんにちは。CX事業本部Delivery部のakkyです。

以前、Amazon Linux 2023でMySQL Clientを使う記事を掲載しました。

多くの方にご覧いただいていますが、この方法で注意していただきたい点として、MySQLはAmazon Linux 2023のリポジトリ外のパッケージとなるため、AWSからのサポートが得られないということがあります。

AWSでは、RDS MySQLへの接続にはMariaDBを使用することをドキュメントで案内しています。

MariaDBは、クライアントプロトコルに関してはMySQLと互換性があることがドキュメントに記載されています。

また、認証プラグインに関しても、クライアント側でSHA-256がサポートされていますので、MySQL8.0への接続も問題ありません。

インストール方法

次のコマンドでインストールできます。

sudo dnf -y install mariadb105

RDSインスタンスへの接続

mysqlmariadbに置き換えて次のコマンドで接続できます。usernameとhostnameを置き換えてください。

mariadb -u username -p -h hostname

SSLを強制していた場合

RDS MySQLで、パラメータグループでrequire_secure_transport=1としている場合、またはユーザーごとの設定をしている場合には、上記コマンドで接続するとエラーになってしまいます。

これは、SSLでの接続がデフォルトでは無効になっているためです。MySQLでは勝手にSSL接続されるためハマりました。

$ mariadb -u admin -p -h XXXXXXXX.ap-northeast-1.rds.amazonaws.com
Enter password:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

エラーが発生した場合には、--sslというオプションを付けて実行してください。

$ mariadb -u admin -p -h XXXXXXXX.ap-northeast-1.rds.amazonaws.com --ssl

なお、この場合には、サーバ証明書の検証が行われません。

証明書を検証したい場合

証明書を検証したい場合は、まずホームディレクトリに.my.cnfというファイルを作成し、ssl-verify-server-cert=trueとします。

cat << EOF > ~/.my.cnf
[client-mariadb]
ssl=true
ssl-verify-server-cert=true
EOF

次にRDSのCA証明書をダウンロードしてインストールします。

sudo curl -O --output-dir /etc/pki/ca-trust/source/anchors/ https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
sudo update-ca-trust

この操作を行えば、--sslを指定しなくてもSSLが使用され、証明書が検証されます。

$ mariadb -u admin -p -h XXXXXXXX.ap-northeast-1.rds.amazonaws.com

以上