パスワード ポリシーを使用して組み込み認証を管理する

このページでは、AlloyDB Omni のパスワード ポリシーを設定して管理する方法について説明します。

パスワード ポリシーについて

アプリケーションのデータベース ユーザーが、組み込みのパスワードベースの方法を使用して AlloyDB Omni で認証する場合は、安全なパスワードを適用することで認証をより安全にできます。AlloyDB Omni パスワード ポリシーを設定することで、パスワードの適用を定義して有効にできます。

パスワード ポリシーの制限事項

AlloyDB Omni のパスワード ポリシーには次の制限があります。

  • パスワード ポリシーは、ポリシーの設定後に作成されたパスワードにのみ適用されます。既存のユーザー パスワードは、パスワード ポリシーの変更の影響を受けません。

  • パスワード ポリシーは、プレーンテキストとして入力されたパスワードにのみ適用されます。パスワード ポリシーは、暗号化された文字列として入力されたパスワードには適用されません。

AlloyDB Omni のパスワード ポリシーを設定する

パスワード ポリシーを設定するには、postgresql.conf 構成ファイルで Grand Unified Configuration(GUC)パスワード パラメータを更新します。GUC パラメータを設定する方法については、AlloyDB Omni データベース フラグを構成するをご覧ください。

AlloyDB Omni のパスワード ポリシーには、次のオプションを含めることができます。

  • パスワードにユーザー名を許可しない: パスワードにユーザー名を使用できないようにします。

  • パスワードの複雑さ: パスワードに小文字、大文字、数字、英数字以外の文字が許可されている数含まれているかどうかを確認します。パスワードの長さが有効かどうかも確認します。

  • パスワードの有効期限: パスワードが定期的にローテーションされるようにします。

AlloyDB Omni でサポートされているパスワード ポリシー フラグのリストについては、パスワード ポリシー フラグをご覧ください。

パスワード検証ライブラリをプリロードする

AlloyDB Omni でパスワード ポリシーを有効にするには、alloydb_password_validation ライブラリを読み込む必要があります。このライブラリを読み込む手順は次のとおりです。

  1. AlloyDB Omni のインストールの postgresql.conf 構成ファイルを探し、テキスト エディタで開きます。

  2. shared_preload_libraries 行を見つけて、alloydb_password_validation が含まれているかどうかを確認します。ない場合は、追加する必要があります。完了すると、shared_preload_libraries 行は次のようになります。

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

パスワードの複雑さを適用する

パスワードの複雑さに関するポリシーを適用する手順は次のとおりです。

  1. postgresql.conf ファイルがパスワード検証ライブラリをプリロードしていることを確認します。

  2. password.enforce_complexity フラグを ON に設定します。

  3. パスワード ポリシー フラグを使用して、パスワード ポリシーを定義します。

たとえば、パスワードに少なくとも 1 つの大文字と 1 つの数字を含め、10 文字以上である必要があるというパスワード ポリシーを適用するには、postgresql.conf ファイルに次のように設定します。

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

これらのフラグが設定されると、このパスワード ポリシーに準拠していないデータベース ユーザー パスワードの設定は失敗します。たとえば、このポリシーを設定すると、パスワード foo が 10 文字未満で、数字や大文字が含まれていないため、次の psql クライアント コマンドは失敗します。

CREATE USER USERNAME WITH PASSWORD foo;

パスワードの有効期限を適用する

パスワードの有効期限ポリシーを適用する手順は次のとおりです。

  1. postgresql.conf ファイルがパスワード検証ライブラリをプリロードしていることを確認します。

  2. password.enforce_expiration フラグを ON に設定します。

  3. password.expiration_in_days フラグを、パスワードの設定から有効期限が切れるまでの日数に設定します。

  4. password.notify_expiration_in_days フラグを、パスワードの有効期限が切れる前にユーザーにパスワードの有効期限の通知を開始する日数に設定します。

たとえば、パスワードの有効期限が 30 日で、パスワードの有効期限が切れる 15 日前にユーザーに通知するパスワード ポリシーを適用するには、postgresql.conf ファイルに次のように設定する必要があります。

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

ユーザーのパスワードの有効期限が切れると、そのユーザーは AlloyDB Omni に接続できなくなります。ユーザーのパスワードを再設定する手順は次のとおりです。

  1. psql を使用して AlloyDB Omni に接続します。たとえば、Docker を使用して AlloyDB Omni をインストールした場合は、次のコマンドを実行します。

    docker exec -it CONTAINER-NAME psql -h localhost -U postgres
    
  2. postgres=# プロンプトで、次のコマンドを実行します。

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

ユーザーのパスワードの変更の詳細については、PostgreSQL ドキュメントの ALTER ROLE をご覧ください。

パスワードにユーザー名を許可しない

パスワードにユーザー名を含めないようにするポリシーを適用するには、次のようにします。

  1. postgresql.conf ファイルがパスワード検証ライブラリをプリロードしていることを確認します。

  2. password.enforce_password_does_not_contain_usernameON に設定します。

たとえば、パスワードにユーザー名がサブストリングとして含まれていないことを確認するには、postgresql.conf ファイルに次のように設定します。

  • password.enforce_password_does_not_contain_username = ON

このフラグが設定されている場合、パスワード alex-secret にユーザー名 alex が含まれているため、次のオペレーションは失敗します。

CREATE USER alex WITH PASSWORD 'alex-secret';

次のステップ