Amazon RDS for PostgreSQL 16.1 から TLS 1.3 がサポートされていたので確認してみた

2024.02.22

いわさです。

2023 年 11 月に Amazon RDS for PostgreSQL 16.1 がリリースされています。
先日こちらを調べていて気がついたのですが、PostgreSQL 16.1 リリースのタイミングで TLS 1.3 がサポートされるようになっていました。

今回以下の記事のように psql から TLS 接続を確認する機会がありましたので紹介したいと思います。

RDS for PostgreSQL 16.1 から TLS 1.3 が使える

最新バージョンの RDS for PostgreSQL 16.1 を作成します。

早速 psql で接続してみると、TLS 1.3 が使用されていることが確認出来ます。

% psql -h hoge0222tls.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
Password for user postgres: 
psql (14.11 (Homebrew), server 16.1)
WARNING: psql major version 14, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

次の方法でもバージョン確認を行いました。

postgres=> CREATE EXTENSION sslinfo;
CREATE EXTENSION
postgres=> select ssl_version();
 ssl_version 
-------------
 TLSv1.3
(1 row)

postgres=> select ssl_cipher();
       ssl_cipher       
------------------------
 TLS_AES_256_GCM_SHA384
(1 row)

postgres=>

あるいはconninfoから確認も可能です。

postgres=> \conninfo
You are connected to database "postgres" as user "postgres" on host "hoge0222tls.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com" (address "35.74.177.14") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)

TLS_AES_256_GCM_SHA384が使われていました。TLS 1.3用の暗号スイートです。 IPA の「TLS 暗号設定ガイドライン」「TLS 暗号設定 暗号スイートの設定例」などでは、高セキュリティ型の暗号スイートとして挙げられています。

また、パラメータグループのssl_max_protocol_versionssl_min_protocol_versionでもTLSv1.3が設定出来るようになっていました。

RDS for PostgreSQL 15.5 までは TLS 1.2 が最大だった

一方で RDS for PostgreSQL 15.5 までは TLS 1.3 がサポートされていませんでした。

% psql -h hoge0222tls2.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
Password for user postgres: 
psql (14.11 (Homebrew), server 15.5)
WARNING: psql major version 14, server major version 15.
         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.

また、パラメータグループのssl_max_protocol_versionssl_min_protocol_versionでもTLSv1.3は指定が出来ず、TLSv1.2までが指定可能です。

RDS for PostgreSQL 15 以降からデフォルトでは TLS 必須になっていた

今回気がついたのですが、最近の RDS for PostgreSQL はデフォルトパラメータで TLS の必須設定が有効になっていました。
確認してみると RDS for PostgreSQL 14 まではrds.force_ssl0、つまり必須ではありませんでした。

そのため RDS for PostgreSQL 15 以降でパラメータの変更を行わなかった場合は TLS 接続が必須となっています。

% PGSSLMODE=disable psql -h hoge0222tls.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
psql: error: connection to server at "hoge0222tls.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com" (35.74.177.14), port 5432 failed: FATAL:  no pg_hba.conf entry for host "203.0.113.1", user "postgres", database "postgres", no encryption

% PGSSLMODE=require psql -h hoge0222tls.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres
Password for user postgres: 
psql (14.11 (Homebrew), server 16.1)
WARNING: psql major version 14, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

さいごに

本日は Amazon RDS for PostgreSQL 16.1 から TLS 1.3 がサポートされていたので確認してみました。

RDS for MySQL が 8.0 から TLS 1.3 をサポートしていたのですが、RDS for PostgreSQL でもいつのまにか使えるようになってました。
TLS 1.3 が必須となるケースはまだ限られていると思いますが、データベース接続の場合は接続クライアントが限られていることが多いので積極的に TLS 1.3 を採用してパフォーマンス面などのメリットを得ても良いのではと思いました。