オペレーターでは、データのアクセス制御を管理するために、データベース運用にかかわるロールの作成と権限の割り当てや、ログイン権限を持つデータベースロールの有効期限の管理を容易に実現することができます。
データべ―スには個人情報などの重要なデータが含まれており、データの保護が重要です。
データの保護は、セキュリティ規約で定められており、運用において大事な観点です。
データの保護において、第三者にデータを参照されないようにするため、データベースロールのアクセス制御が適切に設定されていることが必要です。
本機能では、下記のデータベースロールに分けることを推奨しています。
データベース管理者:データベースシステムの構築/運用
機密管理者:各データベース資源に対する適切な権限を設定
一般利用者:データベースのエンドユーザー
データベースの運用/管理者を複数用意し、それぞれに権限を割り当てることで、権限の分散を図ることができます。これにより、強い権限を持つユーザーによる、データの参照や改ざんなどを防ぐことが可能になります。
本機能で作成するデータベースロールの役割について説明します。
データベース管理者は、システムテーブルの参照/バックエンドの問い合わせのキャンセルなど、データベースの運用にかかわる操作を実行することができます。
機密管理者は、テーブルやロールに対して適切な権限を付与し、第三者によるデータの参照を防ぎます。本機能では機密管理者が“機密管理支援機能”を利用可能なように権限を付与し、各データベース資源に対する適切な権限を付与することが可能になります。
また、データの保護において、すべてのデータを参照できるSUPERUSERやBYPASSRLS権限が付与されたロールを利用することは推奨されません。そのため、本機能では、SUPERUSER(postgres)のパスワードを隠蔽することで隔離し、作成するデータベースロールにSUPERUSERやBYPASSRLS権限を付与しません。
データベース構築時にオペレーターがSUPERUSER権限を持つデータベースロール“postgres”を作成します。
FEPClusterカスタムリソースの“spec.fepChildCrVal.sysUsers.pgAdminPassword”を省略することで、postgresロールのパスワードはランダムな値で作成され、一般ユーザーがSUPERUSER権限を利用できなくなります。ただし、データベース運用において管理者がSUPERUSER権限を必要としたときに“postgres”ロールを利用する手段を別途提供するため、想定外の利用がされていないかpgAuditの監査機能を利用して監視してください。
データベースを管理するためのデータベースロールです。このロールの定義は必須です。
ユーザー名とパスワードは、FEPClusterカスタムリソースのspec.fepChildCrVal.sysUsers配下の“pguser”と“pgpassword”に定義します。CREATE DATABASE権限を持ち、システムテーブルの参照/バックエンドの問い合わせのキャンセルを実行することができます。
データベース管理者ロールは下記の権限を保持します。
NOSUPERUSER
NOREPLICATION
NOBYPASSRLS
CREATEDB
INHERIT
LOGIN
CREATEROLE
ただし、機密管理者ロールが作成された時は、NOCREATEROLEの権限が付与されます。
また、下記のロールに属しています。
pg_monitor
pg_signal_backend
機密管理支援機能を利用して、データベースの利用者に対して、各データベース資源に対する適切な権限を設定するデータベースロールです。このロールの作成は任意です。
ユーザー名とパスワードは、FEPClusterカスタムリソースの“spec.fepChildCrVal.sysUsers”配下の“pgSsecurityUser”と“pgSsecurityPassword”に定義します。
機密管理者ロールは、FEPCluster構築した後から定義することが可能です。ただし、このロールを定義した後にロール名の変更とロールの削除はできません。
このロールは下記の権限を保持します。
LOGIN
CREATEROLE
NOSUPERUSER
NOREPLICATION
NOBYPASSRLS
NOCREATEDB
NOINHERIT
機密管理者ロールはFEPClusterカスタムリソースの“spec.fepChildCrVal.sysUsers.pgdb”で定義されているデータベースに対してALL権限を与えられており、対象のデータベースに対してテーブルなどのデータベースオブジェクトを作成することができます。
機密管理者ロールは、Fujitsu Enterprise Postgresの「機密管理支援機能」を操作するために必要な下記の権限が割り当てられるため、ロールが作成された直後から機密管理支援機能を利用できます。
CREATEROLE権限
機密管理支援機能の拡張に含まれるすべてのテーブルへのSELECT権限、INSERT権限、UPDATE権限、および、DELETE権限
機密管理支援機能で管理するデータベースオブジェクトは機密管理者ロールに所有権を付与してください。
また、機密管理者ロールが機密管理支援機能を操作するために必要な権限を他のデータベースロールに付与することで機密管理を行うユーザーを増やし、権限を分散することができます。
ロールの有効期限を管理することで、データベースに接続できるユーザーを制御することができます。
ここでは、ロールの有効期限を管理するための以下の2つの方法について説明します。
ポリシーに基づいたパスワードの運用
VALID UNTIL句によるパスワードの運用
ポリシーに基づいたパスワードの運用では、ポリシーをプロファイルとして定義し、プロファイルをロールに割り当てます。下記のように、有効期限以外のポリシーを厳密に定義することが可能です。同一のプロファイルをロールに割り当てることで、一括して同じポリシーを適用することができます。
パスワードの有効期限
パスワードの再利用の制限
ログインに失敗し続けたユーザーのロック
VALID UNTIL句によるパスワードの運用では、有効期限のみを設定できます。オペレーターは、CREATE や ALTER ROLEコマンド実行時に指定した期間内のVALID UNTIL句の指定を強制することができます。
ポリシーを定義するプロファイルの作成と適用方法は、“Fujitsu Enterprise Postgres 運用ガイド”の“ポリシーに基づいたログインセキュリティの管理”を参照してください。
FEPClusterをデプロイしたとき、ストリーミングレプリケーション用のユーザー(FEPClusterカスタムリソースのspec.fepChildCrVal.sysUsers.pgrepluserに指定したユーザー)にpgx_update_profile_statusグループロールのメンバ資格が自動的に割り当てられます。これにより、FEPCluster構築直後から、スタンバイサーバで検出されたユーザーのロック状態、パスワードの状態がクラスタ全体に反映されます。
オペレーターはモニタリング機能を利用して、有効期限等のメトリクスを監視することができます。
FEPExporterをデプロイしたとき、下記のメトリクス収集とアラートルールが有効になります。
FEPExporterのデプロイ方法は、“4.3 FEPExporterのデプロイ”または“4.4 スタンドアロンモードでのFEPExporter”を参照してください。
メトリクスクエリとアラートルールの定義は、“オペレーターリファレンス”の“デフォルトのメトリクスクエリ”と“デフォルトのアラートルール”を参照してください。
全てのロール数
有効なロール数
猶予期間中のロール数
有効期限が切れたロール数
ロック中のロール数
また、メトリクスクエリを追加して、有効期限が指定日以内のロール数などを監視することができます。
有効期限が切れたロールが1以上のとき
猶予期間が切れたロールが1以上のとき
ロック中のロールが1以上のとき
アラートが通知された際には、システムカタログから該当のデータベースロールを確認することができます。
プロファイルの情報を管理するためのシステムカタログの詳細は、“Fujitsu Enterprise Postgres 運用ガイド”の“システムカタログ”を参照してください。
ログイン権限を持つデータベースロールのパスワード有効期限を管理することができます。
CREATE ROLE文、またはALTER ROLE文でログイン権限を持つデータベースロールのパスワードを定義するときに、指定した期間内の有効期限を指定することを強制することが可能です。
この機能を有効にするためにFEPClusterカスタムリソースに下記のパラメータを指定します。
spec.fepChildCrVal.customPgParamsのshared_preload_librariesに“fsep_operator_security”を指定
spec.fepChildCrVal.sysUsers.passwordValid.daysにパスワードを変更したタイミングから指定可能な有効期限の日数を指定
FEPClusterカスタムリソースの定義例
fepChildCrVal: customPgParams: | shared_preload_libraries='pgx_datamasking,pg_prewarm,pg_stat_statements,fsep_operator_security' … sysUsers: passwordValid: days: 30 pgdb: mydb pgpassword: mydbpassword pguser: mydbuser
この機能が有効な時には、FEPClusterカスタムリソースのspec.fepChildCrVal.sysUsersで定義される、pgpasswordとpgSecurityPasswordのパスワード有効期限は、パスワードが変更されたときからspec.fepChildCrVal.sysUsers.passwordValid.daysで指定した期間後に定義されます。
ただし、pgAdminPassword、pgreplpassword、pgRewindUserPassword、pgMetricsUserPasswordで定義されるパスワードはデータベースの運用管理をするために必要なデータベースロールのパスワードであるため、有効期限は管理しません。
また、CREATE ROLE文、またはALTER ROLE文でログイン権限を持つデータベースロールのパスワードを定義/変更するときに、対象のデータベースロールのパスワードの有効期限が指定されていない、または、spec.fepChildCrVal.sysUsers.passwordValid.daysで指定された期間より長い場合は、実行したSQLが失敗します。
spec.fepChildCrVal.sysUsers.passwordValid.daysは、FEPClusterを構築したあとに、定義や変更をすることができます。このパラメータを変更すると、有効期限が切れていないすべての管理しているデータベースロールのパスワード有効期限が更新されます。
spec.fepChildCrVal.sysUsers.passwordValid.daysを削除、または0にするとパスワードの有効期限管理は停止します。
FEPExporterカスタムリソースの機能を利用して、データベースロールのパスワード有効期限の監視や有効期限が近いまたは過ぎたデータベースロールがあるときにAlertManagerを利用してアラートを通知することが可能です。