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

ドキュメントのバージョンを選択してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

セキュリティ標準に準拠し、セキュリティ レコメンデーションのガイダンスに沿って、プライマリ適用フラグを ON に構成して、3 つのオプションすべてを有効にする必要があります。

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

これらの 3 つのフラグのいずれかを OFF に設定するか省略すると、セキュリティ Recommender は、パスワード ポリシーが有効になっていないインスタンスにフラグを設定します。

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

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 をインストールした場合は、次のコマンドを実行します。

    sh docker exec -it CONTAINER-NAME psql -h localhost -U postgres

  2. postgres=# プロンプトで、次のコマンドを実行します。

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

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

内部管理者アカウントにパスワードベースの認証を適用する

管理者アカウントのパスワード適用により、重要なシステム パスワードの安全なローテーションと更新が自動化され、一元化されます。通常は、Vaultなどの外部ツールを使用します。この機能により、AlloyDB Omni がさまざまな内部プロセスの管理に使用する重要な管理者アカウントにパスワードベースの認証を適用することで、ゼロトラスト ポリシーを遵守できます。

パスワードの適用は、次のデータベース アカウントでサポートされています。

  • alloydbadmin: Kubernetes(K8s)コントローラのスーパーユーザー アカウント。
  • alloydbmonitor: データベース指標を収集するための読み取り専用アカウント。

適用を有効にするには、これらのアカウントのパスワードを保存する Kubernetes Secret オブジェクトを参照するようにデータベース クラスタの仕様を構成します。 このプロセスにより、セキュリティが強化され、データベースの内部管理アカウントの認証情報の管理に必要な手動オーバーヘッドが削減されます。

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

クラスタの作成時にパスワードの適用を有効にする手順は次のとおりです。

  1. AlloyDB Omni Kubernetes オペレーター 1.7.0 以降を実行する Kubernetes クラスタがあることを確認します。
  2. systemUserPasswordRefs 属性を DBCluster 仕様に追加します。この属性には、各内部システム アカウント名(alloydbadminalloydbmonitor など)を対応する Kubernetes Secret オブジェクト名にリンクするキーと値のペアを含める必要があります。
  3. データベースを作成する前に、参照される Kubernetes Secret にユーザーのシード パスワードが含まれており、属性形式が次の構造に従っていることを確認します。

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

パスワードのローテーションを安全に管理する

適用を有効にした後、Vault などの外部ツールを使用して、継続的なパスワードのローテーションを安全に管理します。

  1. データベース パスワードを更新します。外部ツールは、AlloyDB Omni でシステム アカウントのパスワードを直接更新します。
  2. Kubernetes Secret を更新します。外部ツールは、関連付けられた Kubernetes Secret オブジェクトを新しいパスワードで更新します。

    • Secret オブジェクトのコンテンツは、キーがデータベース名、値が base64 エンコードされた新しいパスワードであるキーと値のペアにする必要があります。
    • Secret 名には次の命名規則を使用することをおすすめします。

      USER_NAME-pw-DATABASE_NAME
      

    AlloyDB Omni Operator は、Kubernetes Secret の変更を検出し、データベース Pod で実行されているデータベース エージェントが使用するパスワード キャッシュを自動的に更新します。エージェントは、この新しいキャッシュされたパスワードを以降のすべてのデータベース オペレーションに使用します。

特定のユーザーのパスワードの適用を無効にする

特定のシステム アカウントのパスワードの適用を無効にするには、DBCluster 仕様の systemUserPasswordRefs リストからそのユーザーを削除する必要があります。

  1. ユーザーを削除します。DBCluster 仕様で、パスワードの適用から除外するユーザーに対応するキーと値のペアを削除します。たとえば、alloydbadmin で無効にする場合は、 alloydbadmin: alloydbadmin-pw-dbcluster-sample を削除します。
  2. kubectl apply を使用して、変更した DBCluster 仕様を適用します。

    更新された仕様を適用すると、そのユーザーのパスワードの適用が無効になります。

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

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

  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';

次のステップ