PostgreSQL のパスワード暗号化に SCRAM を使用する
SCRAM (Salted Challenge Response Authentication Mechanism) は、パスワードを暗号化するための PostgreSQL のデフォルトのメッセージダイジェスト (MD5) アルゴリズムの代替手段です。SCRAM 認証メカニズムは MD5 よりも安全であると見なされます。これら 2 つの異なるパスワードを保護する方法の詳細については、PostgreSQL のドキュメントの「パスワード認証
Aurora PostgreSQL DB クラスターに対しては、パスワード暗号化方式として MD5 ではなく SCRAM を使用することをお勧めします。SCRAM は、Aurora PostgreSQL バージョン 10 および以降のすべてのメジャーバージョンとマイナーバージョンでサポートされています。これは、パスワード認証と暗号化のために scram-sha-256 アルゴリズムを使用する暗号化チャレンジレスポンスのメカニズムです。
SCRAM をサポートするために、クライアントアプリケーションのライブラリを更新する必要があります。例えば、42.2.0 より前の JDBC バージョンで SCRAM はサポートされていません。詳細については、PostgreSQL JDBC ドライバーのドキュメントの「PostgreSQL JDBC ドライバー
Aurora PostgreSQL バージョン 14 以上では、新しい DB クラスターに対してデフォルトでパスワード暗号化に scram-sha-256 をサポートしています。これらのバージョンでは、デフォルトの DB クラスターパラメータグループ (default.aurora-postgresql14
) が持っている password_encryption
値を scram-sha-256 に設定します。SCRAM は Aurora Serverless v1 ではサポートされていません。
SCRAM を要求するために Aurora PostgreSQL DB クラスターを設定する
Aurora PostgreSQL 14.3 以降のバージョンでは、scram-sha-256 アルゴリズムを使用するパスワードのみを受け入れるために、Aurora PostgreSQL DB クラスターに を要求できます。
重要
PostgreSQL データベースを使用する既存の RDS プロキシでは、SCRAM
のみを使用するようにデータベース認証を変更すると、プロキシは最大 60 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。
データベースが
SCRAM
とMD5
認証の両方を許可していることを確認します。SCRAM
認証のみを使用するには、新しいプロキシを作成し、アプリケーショントラフィックを新しいプロキシに移行してから、以前にデータベースに関連付けられていたプロキシを削除します。
システムに変更を加える前に、次の完全なプロセスを理解していることを確認してください。
すべてのデータベースユーザーのすべてのロールとパスワードの暗号化に関する情報を取得します。
パスワードの暗号化を制御するパラメータを指定するために、Aurora PostgreSQL DB クラスター のパラメータ設定を再確認してください。
Aurora PostgreSQL DB クラスター でデフォルトのパラメータグループを使用する場合は、カスタムの DB クラスターのパラメータグループ を作成して、それを Aurora PostgreSQL DB クラスター に適用し、必要なときにパラメータを変更できるようにする必要があります。Aurora PostgreSQL DB クラスター がカスタムパラメータグループを使用している場合、必要に応じて、プロセスの後で必要なパラメータを変更できます。
-
password_encryption
パラメータをscram-sha-256
に変更します。 -
パスワードを更新する必要があることをすべてのデータベースユーザーに通知します。
postgres
アカウントに同じ操作を行います。新しいパスワードは暗号化され、scram-sha-256 アルゴリズムを使用して保存されます。 暗号化の種類を使用して、すべてのパスワードが暗号化されていることを確認します。
-
すべてのパスワードで scram-sha-256 が使用されている場合、
rds.accepted_password_auth_method
パラメータをmd5+scram
からscram-sha-256
に変更できます。
警告
rds.accepted_password_auth_method
を scram-sha-256 のみに変更した後、md5
で暗号化されたパスワードを持つすべてのユーザー (ロール) は接続できなくなります。
Aurora PostgreSQL DB クラスターに SCRAM を要求する準備
お使いの Aurora PostgreSQL DB クラスター、に変更を加える前に、既存のデータベースユーザーアカウントをすべて確認します。また、パスワードに使用されている暗号化の種類を確認してください。確認するためには、rds_tools
拡張機能を使用します。rds_tools
をサポートする PostgreSQL バージョンを確認するには、「Extension versions for Amazon RDS for PostgreSQL」を参照してください。
データベースユーザー (ロール) とパスワードの暗号化方法のリストを取得するには
次のように、
psql
を使用して Aurora PostgreSQL DB クラスターのプライマリ インスタンスを に接続します。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordrds_tools
拡張機能をインストールします。postgres=>
CREATE EXTENSION rds_tools;
CREATE EXTENSION
ロールと暗号化のリストを取得します。
postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();以下のような出力結果が表示されます。
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)
カスタム DB クラスターのパラメータグループの作成
注記
Aurora PostgreSQL DB クラスター で既にカスタムパラメータグループを使用している場合、新しいパラメータグループを作成する必要はありません。
Aurora のパラメータグループの概要については、「Amazon Aurora での DB クラスターパラメータグループの作成」を参照してください。
パスワードに使用されるパスワード暗号化タイプは、1 つのパラメータ password_encryption
で設定します。Aurora PostgreSQL DB クラスター で許可される暗号化は、別のパラメータ rds.accepted_password_auth_method
で設定されます。これらのいずれかをデフォルト値から変更するには、カスタム DB クラスターのパラメータグループ を作成して、クラスター に適用する必要があります。
また、AWS Management Console または RDS API を使用して、カスタムの DB クラスターのパラメータグループ を作成することもできます。詳細については、「Amazon Aurora での DB クラスターパラメータグループの作成」を参照してください。
これで、カスタムパラメータグループを DB インスタンスに関連付けることができます。
カスタム DB クラスターのパラメータグループを作成するには
create-db-cluster-parameter-group
CLI コマンドを使用して、クラスターのカスタムパラメータグループを作成します。次の例ではaurora-postgresql13
をこのカスタムパラメータグループのソースとして使用します。Linux、macOS、Unix の場合:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name '
docs-lab-scram-passwords
' \ --db-parameter-group-family aurora-postgresql13 --description 'Custom DB cluster parameter group for SCRAM
'Windows の場合:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "
docs-lab-scram-passwords
" ^ --db-parameter-group-family aurora-postgresql13 --description "Custom DB cluster parameter group for SCRAM
"これで、カスタムパラメータグループをクラスターに関連付けることができます。
modify-db-cluster
CLI コマンドを使用して、このカスタムパラメータグループを Aurora PostgreSQL DB クラスターに適用します。Linux、macOS、Unix の場合:
aws rds modify-db-cluster --db-cluster-identifier '
your-instance-name
' \ --db-cluster-parameter-group-name "docs-lab-scram-passwords
Windows の場合:
aws rds modify-db-cluster --db-cluster-identifier "
your-instance-name
" ^ --db-cluster-parameter-group-name "docs-lab-scram-passwords
Aurora PostgreSQL DB クラスターとカスタム DB クラスターパラメータグループ、を再同期するには、プライマリインスタンスおよびクラスターの他のすべてのインスタンスを再起動します。
SCRAM を使用するためのパスワード暗号化の設定
Aurora PostgreSQL DB クラスター で使用されるパスワード暗号化メカニズムは、password_encryption
パラメータの DB クラスターのパラメータグループ に設定されています。指定できる値は、未設定、md5
または scram-sha-256
です。デフォルト値は、次のように Aurora PostgreSQL のバージョンによって異なります。
Aurora PostgreSQL 14 — デフォルトは
scram-sha-256
Aurora PostgreSQL 13 — デフォルトは
md5
Aurora PostgreSQL DB クラスター にアタッチされているカスタム DB クラスターパラメータグループ では、パスワード暗号化パラメータの値を変更できます。

パスワード暗号化の設定を scram-sha-256 に変更するには
次のように、パスワード暗号化の値を scram-sha-256 に設定します。パラメータが動的であるため、変更をすぐに適用できます。そのため、変更を有効にするために再起動は不要です。
Linux、macOS、Unix の場合:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'
Windows の場合:
aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"
ユーザーロールのパスワードを SCRAM に移行する
以下に説明するように、ユーザーロールのパスワードを SCRAM に移行できます。
データベースユーザー (ロール) のパスワードを MD5 から SCRAM に移行するには
次のように、管理者ユーザーとしてログインします (デフォルトのユーザー名、
postgres
)。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password次のコマンドを使って、RDS for PostgreSQL DB インスタンスの
password_encryption
パラメータの設定を確認します。postgres=>
SHOW password_encryption;
password_encryption --------------------- md5 (1 row)
このパラメータの値を scram-sha-256 に変更します。これは動的パラメータであるため、この変更を行った後でインスタンスを再起動する必要はありません。値をもう一度チェックして、次のように
scram-sha-256
に設定されていることを確認します。postgres=>
SHOW password_encryption;
password_encryption --------------------- scram-sha-256 (1 row)
パスワードの変更をすべてのデータベースユーザーに通知します。アカウント
postgres
(rds_superuser
権限を持つデータベースユーザー) のパスワードも必ず変更してください。labdb=>
ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';ALTER ROLE
Aurora PostgreSQL DB クラスターのすべてのデータベースに対してこの処理を繰り返します。
SCRAM を要求するようにパラメータを変更する
これがプロセスの最後のステップです。次の手順で変更した後、パスワードに引き続き md5
暗号化を使用するユーザーアカウント (ロール) は Aurora PostgreSQL DB クラスターにログインできません。
rds.accepted_password_auth_method
は、ログインプロセス中に Aurora PostgreSQL DB クラスターがユーザーパスワードに対して受け入れる暗号化方式を指定します。デフォルト値は md5+scram
です。つまり、どちらの方法も受け入れられます。次の画像では、このパラメータのデフォルト設定が表示されています。

このパラメータに指定できる値は、md5+scram
または scram
のみです。このパラメータの値を scram
に変更すると、これが要件となります。
パスワードの SCRAM 認証を要求するようにパラメータ値を変更するには
Aurora PostgreSQL DB クラスター の上のすべてのデータベースに対するすべてのデータベースユーザーパスワードが、パスワード暗号化に
scram-sha-256
を使用していることを確認します。そのためには、rds_tools
にロール (ユーザー) と暗号化タイプについて、次のようにクエリします。postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
Aurora PostgreSQL DB クラスターのすべての DB インスタンスでクエリを繰り返します。
すべてのパスワードで scram-sha-256 が使用されている場合は続行できます。
次のように、受け入れたパスワード認証の値を scram-sha-256 に設定します。
Linux、macOS、Unix の場合:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
Windows の場合:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"