PostgreSQL のパスワード暗号化に SCRAM を使用する - Amazon Aurora

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 ドライバー」を参照してください。その他の PostgreSQL ドライバーおよび SCRAM サポートの一覧については、PostgreSQL のドキュメントの「ドライバーの一覧」を参照してください。

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 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。

  • データベースが SCRAMMD5 認証の両方を許可していることを確認します。

  • 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」を参照してください。

データベースユーザー (ロール) とパスワードの暗号化方法のリストを取得するには
  1. 次のように、psql を使用して Aurora PostgreSQL DB クラスターのプライマリ インスタンスを に接続します。

    psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. rds_tools 拡張機能をインストールします。

    postgres=> CREATE EXTENSION rds_tools; CREATE EXTENSION
  3. ロールと暗号化のリストを取得します。

    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 クラスターのパラメータグループを作成するには
  1. 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"

    これで、カスタムパラメータグループをクラスターに関連付けることができます。

  2. 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 クラスターパラメータグループ では、パスワード暗号化パラメータの値を変更できます。

次では、RDS コンソールには、Aurora PostgreSQL の password_encryption パラメータのデフォルト値が表示されます。
パスワード暗号化の設定を 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 に移行するには
  1. 次のように、管理者ユーザーとしてログインします (デフォルトのユーザー名、postgres)。

    psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. 次のコマンドを使って、RDS for PostgreSQL DB インスタンスの password_encryption パラメータの設定を確認します。

    postgres=> SHOW password_encryption; password_encryption --------------------- md5 (1 row)
  3. このパラメータの値を scram-sha-256 に変更します。これは動的パラメータであるため、この変更を行った後でインスタンスを再起動する必要はありません。値をもう一度チェックして、次のように scram-sha-256 に設定されていることを確認します。

    postgres=> SHOW password_encryption; password_encryption --------------------- scram-sha-256 (1 row)
  4. パスワードの変更をすべてのデータベースユーザーに通知します。アカウント postgres (rds_superuser 権限を持つデータベースユーザー) のパスワードも必ず変更してください。

    labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me'; ALTER ROLE
  5. Aurora PostgreSQL DB クラスターのすべてのデータベースに対してこの処理を繰り返します。

SCRAM を要求するようにパラメータを変更する

これがプロセスの最後のステップです。次の手順で変更した後、パスワードに引き続き md5 暗号化を使用するユーザーアカウント (ロール) は Aurora PostgreSQL DB クラスターにログインできません。

rds.accepted_password_auth_method は、ログインプロセス中に Aurora PostgreSQL DB クラスターがユーザーパスワードに対して受け入れる暗号化方式を指定します。デフォルト値は md5+scram です。つまり、どちらの方法も受け入れられます。次の画像では、このパラメータのデフォルト設定が表示されています。

rds.accepted_password_auth_method パラメータに対してデフォルト値と許可された値が表示されている RDS コンソール。

このパラメータに指定できる値は、md5+scram または scram のみです。このパラメータの値を scram に変更すると、これが要件となります。

パスワードの SCRAM 認証を要求するようにパラメータ値を変更するには
  1. 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)
  2. Aurora PostgreSQL DB クラスターのすべての DB インスタンスでクエリを繰り返します。

    すべてのパスワードで scram-sha-256 が使用されている場合は続行できます。

  3. 次のように、受け入れたパスワード認証の値を 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"