Aurora PostgreSQLへの接続をSSL限定にする方法

Aurora PostgerSQLに接続する際に、SSLの暗号化通信にて接続する方法を試します。公式のマニュアルはこちらです。

SSL を使用した DB インスタンスへの接続の暗号化 - Amazon Relational Database Service

環境情報

Aurora PostgerSQL 9.6.9

接続してみる

Auroraクラスターが作成される際に、SSL証明書が自動的に作成されています。クライアント側から接続するには、そのSSL証明書に対応するルート証明書をクライアント側にダウンロードしておく必要があります。

該当のルート証明書は、以下よりダウンロードできます。

https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

とりあえず、curlコマンドでダウンロードしてきて、

$ curl https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem -o rds-combined-ca-bundle.pem

psqlでの接続時に、利用する証明書を指定するオプション sslrootcer(ルート証明書パス)ssl通信を利用するオプション sslmode=verify-full を指定してあげます。sslmodeがverify-fullとなっていると、SSL証明書が信頼された機関から発行されたものであり、且つ接続先ホスト名が一致されていることを確認します。

$ psql "host=sample-postgre-cluster.cluster-xxxxxxx.ap-northeast-1.rds.amazonaws.com port=5432 user=masteruser dbname=sample sslrootcert=./rds-combined-ca-bundle.pem sslmode=verify-full"
psql (9.5.13, server 9.6.9)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

sample=>

DBへの接続をSSL限定にする

Postgreへの接続をSSLモード限定に制限することができます。

DB Cluster Parameter Grouprds.force_ssl の値を、「1」に変更します。

パラメータ名 デフォルト値 設定値
rds.force_ssl 0 1

変更したパラメータを適用するため、Auroraインスタンスを再起動してあげます。

で、非SSLモードで接続してみようと思ったのですが、psqlではデフォルトで必ずssl接続を試みてしまうため、検証できないのでした。。。考え方として、DBへの接続認証はDBユーザのパスワードを用いられている訳で、Postgre側の証明書が信頼されていない機関から発行されていたものであっても、通信が暗号化さえできるのであれば、確かに問題ないんですよね。