PostgreSQL のパスワード暗号化に SCRAM を使用する
SCRAM (Salted Challenge Response Authentication Mechanism) は、パスワードを暗号化するための PostgreSQL のデフォルトのメッセージダイジェスト (MD5) アルゴリズムの代替手段です。SCRAM 認証メカニズムは MD5 よりも安全であると見なされます。これら 2 つの異なるパスワードを保護する方法の詳細については、PostgreSQL のドキュメントの「パスワード認証
に対しては、パスワード暗号化方式として MD5 ではなく SCRAM を使用することをお勧めします。RDS for PostgreSQL DB インスタンス。これは、パスワード認証と暗号化のために scram-sha-256 アルゴリズムを使用する暗号化チャレンジレスポンスのメカニズムです。
SCRAM をサポートするために、クライアントアプリケーションのライブラリを更新する必要があります。例えば、42.2.0 より前の JDBC バージョンで SCRAM はサポートされていません。詳細については、PostgreSQL JDBC ドライバーのドキュメントの「PostgreSQL JDBC ドライバー
注記
RDS for PostgreSQL 13.1 以降のバージョンは scram-sha-256 をサポートします。これらのバージョンでは、次の手順で説明するように、DB インスタンスに SCRAM を要求するように設定することもできます。
SCRAM を要求するために RDS for PostgreSQL DB インスタンスを設定する
では、scram-sha-256 アルゴリズムを使用するパスワードのみを受け入れるために、に RDS for PostgreSQL DB インスタンスを要求できます。
重要
PostgreSQL データベースを使用する既存の RDS プロキシでは、SCRAM
のみを使用するようにデータベース認証を変更すると、プロキシは最大 60 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。
データベースが
SCRAM
とMD5
認証の両方を許可していることを確認します。SCRAM
認証のみを使用するには、新しいプロキシを作成し、アプリケーショントラフィックを新しいプロキシに移行してから、以前にデータベースに関連付けられていたプロキシを削除します。
システムに変更を加える前に、次の完全なプロセスを理解していることを確認してください。
すべてのデータベースユーザーのすべてのロールとパスワードの暗号化に関する情報を取得します。
パスワードの暗号化を制御するパラメータを指定するために、 RDS for PostgreSQL DB インスタンスのパラメータ設定を再確認してください。
RDS for PostgreSQL DB インスタンスでデフォルトのパラメータグループを使用する場合は、カスタムの DB パラメータグループを作成して、それを RDS for PostgreSQL DB インスタンスに適用し、必要なときにパラメータを変更できるようにする必要があります。 RDS for 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
で暗号化されたパスワードを持つすべてのユーザー (ロール) は接続できなくなります。
RDS for PostgreSQL DB インスタンスに SCRAM を要求する準備
お使いの 、RDS for PostgreSQL DB インスタンスに変更を加える前に、既存のデータベースユーザーアカウントをすべて確認します。また、パスワードに使用されている暗号化の種類を確認してください。確認するためには、rds_tools
拡張機能を使用します。この拡張機能は、 RDS for PostgreSQL 13.1 以上のリリースでサポートされています。
データベースユーザー (ロール) とパスワードの暗号化方法のリストを取得するには
次のように、
psql
を使用して を RDS for PostgreSQL DB インスタンスに接続します。psql --host=
db-name.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 パラメータグループの作成
注記
RDS for PostgreSQL DB インスタンスで既にカスタムパラメータグループを使用している場合、新しいパラメータグループを作成する必要はありません。
Amazon RDS のパラメータグループの概要については、「RDS for PostgreSQL DB インスタンスでのパラメータの使用」を参照してください。
パスワードに使用されるパスワード暗号化タイプは、1 つのパラメータ password_encryption
で設定します。 RDS for PostgreSQL DB インスタンスで許可される暗号化は、別のパラメータ rds.accepted_password_auth_method
で設定されます。これらのいずれかをデフォルト値から変更するには、カスタム DB パラメータグループを作成して、 インスタンスに適用する必要があります。
また、AWS Management Console または RDS API を使用して、カスタムの DB パラメータグループを作成することもできます。詳細については、「」を参照してください。
これで、カスタムパラメータグループを DB インスタンスに関連付けることができます。
カスタム DB パラメータグループを作成するには
create-db-parameter-group
CLI コマンドを使用して、カスタムの DB パラメータグループを作成します。この例ではpostgres13
をこのカスタムパラメータグループのソースとして使用します。Linux、macOS、Unix の場合:
aws rds create-db-parameter-group --db-parameter-group-name '
docs-lab-scram-passwords
' \ --db-parameter-group-family postgres13 --description 'Custom parameter group for SCRAM
'Windows の場合:
aws rds create-db-parameter-group --db-parameter-group-name "
docs-lab-scram-passwords
" ^ --db-parameter-group-family postgres13 --description "Custom DB parameter group for SCRAM
"modify-db-instance
CLI コマンドを使用して、このカスタムパラメータグループを RDS for PostgreSQL DB クラスターに適用します。Linux、macOS、Unix の場合:
aws rds modify-db-instance --db-instance-identifier '
your-instance-name
' \ --db-parameter-group-name "docs-lab-scram-passwords
Windows の場合:
aws rds modify-db-instance --db-instance-identifier "
your-instance-name
" ^ --db-parameter-group-name "docs-lab-scram-passwords
PostgreSQL DB インスタンスとカスタム DB クラスターパラメータグループと再同期するには、プライマリインスタンスとクラスターの他のすべてのインスタンスを再起動する必要があります。ユーザーへの影響を最小限に抑えるため、定期的なメンテナンス期間中に実施するように計画してください。
SCRAM を使用するためのパスワード暗号化の設定
RDS for PostgreSQL DB インスタンスで使用されるパスワード暗号化メカニズムは、password_encryption
パラメータの DB パラメータグループに設定されています。指定できる値は、未設定、md5
または scram-sha-256
です。デフォルト値は、次のように RDS for PostgreSQL のバージョンによって異なります。
RDS for PostgreSQL 14 以上 – デフォルトは
scram-sha-256
RDS for PostgreSQL 13 – デフォルトは
md5
RDS for PostgreSQL DB インスタンスにアタッチされているカスタム DB パラメータグループでは、パスワード暗号化パラメータの値を変更できます。
パスワード暗号化の設定を scram-sha-256 に変更するには
次のように、パスワード暗号化の値を scram-sha-256 に設定します。パラメータが動的であるため、変更をすぐに適用できます。そのため、変更を有効にするために再起動は不要です。
Linux、macOS、Unix の場合:
aws rds modify-db-parameter-group --db-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=
db-name.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
のすべてのデータベースに対してこの処理を繰り返します。RDS for PostgreSQL DB インスタンス。
SCRAM を要求するようにパラメータを変更する
これがプロセスの最後のステップです。次の手順で変更した後、パスワードに引き続き md5
暗号化を使用するユーザーアカウント (ロール) は にログインできません。RDS for PostgreSQL DB インスタンス。
rds.accepted_password_auth_method
は、ログインプロセス中に RDS for PostgreSQL DB インスタンスがユーザーパスワードに対して受け入れる暗号化方式を指定します。デフォルト値は md5+scram
です。つまり、どちらの方法も受け入れられます。次の画像では、このパラメータのデフォルト設定が表示されています。
このパラメータに指定できる値は、md5+scram
または scram
のみです。このパラメータの値を scram
に変更すると、これが要件となります。
パスワードの SCRAM 認証を要求するようにパラメータ値を変更するには
RDS for 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)
のすべての DB インスタンスでクエリを繰り返します。RDS for PostgreSQL DB インスタンス。
すべてのパスワードで scram-sha-256 が使用されている場合は続行できます。
次のように、受け入れたパスワード認証の値を scram-sha-256 に設定します。
Linux、macOS、Unix の場合:
aws rds modify-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
Windows の場合:
aws rds modify-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"