RDS(postgresql)にa5mk2で接続できないとき
タイトルの事象が発生しその解決策ドンピシャな記事がネットでヒットしなかったので記載。
前提としてセキュリティグループなどは正しく設定され、踏み台ec2にSSHでログインして踏み台内でpsqlコマンド実行で接続できるが、ローカルPCのa5mk2から踏み台ec2経由のSSHトンネルを利用してRDSへ接続できない場合の想定。
a5mk2は「no pg_hba.conf entry for host "xxx.xxx.xxx.xxx", user "xxx", database "xxx", no encryption」のエラーを吐く
解決
a5mk2のデータベースの接続設定でSSL接続するように設定する。
(写真は相手の証明書を信用するにしていますが、証明書を検証する場合はチェックを外し一致チェックする証明書をパス指定する模様。ちなみに証明書は以下で取得できる。)
原因
RDS(postgresql)はv15以降SSL通信がデフォルトでオンになっている。
参考:https://zenn.dev/ncdc/articles/bbc72e7522c144
a5mk2はデフォルトの設定値がSSLで接続しない。(エラーになる)
psqlコマンドはデフォルトでSSLで接続する。(エラーにならない)
参考:https://dev.classmethod.jp/articles/ssl-connection-to-amazon-rds-postgresql/
RDSのSSL通信については以下の公式ページが詳しい。どんな証明書が入ってるのか?などは以下参照のこと。
感想
エラーメッセージの「pg_hba.conf」を基準に調べていたのですが、単純にa5mk2の使い方が悪かったという話でした。
pg_hba.confは相手のIPによってログイン認証の挙動を変更できたりするファイルだそうです。
参考:https://qiita.com/kkk777/items/c3edab99821051ef3d57:
そもそもRDSではこのような設定ファイルはさわれないんだとか。
参考:https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html
Discussion