次の方法で共有


Azure Database for PostgreSQL - フレキシブル サーバーでの監査ログ

適用対象: Azure Database for PostgreSQL - フレキシブル サーバー

Azure Database for PostgreSQL フレキシブル サーバーでのデータベース アクティビティの監査ログは、PostgreSQL の監査拡張機能 pgAudit を使用して入手できます。 pgAudit は、セッションまたはオブジェクトの詳細な監査ログを提供します。

コンピューティングやストレージのスケーリングなどの操作に Azure リソースレベルのログが必要な場合は、Azure アクティビティ ログに関する記事を参照してください。

使用に関する考慮事項

既定では、pgAudit ログ ステートメントは、Postgres の標準ログ記録機能を使用して、通常のログ ステートメントと共に出力されます。 Azure Database for PostgreSQL フレキシブル サーバーで、Azure Monitor ログ ストアに送信されるすべてのログを、Log Analytics で後で分析できるように構成できます。 Azure Monitor のリソース ログを有効にすると、選択した内容に応じて、ログが (JSON 形式で) Azure Storage、Event Hubs、または Azure Monitor ログに自動的に送信されます。

Azure Storage、Event Hubs、または Azure Monitor ログへのログ記録を設定する方法については、サーバー ログに関する記事のリソース ログのセクションを参照してください。

pgAudit のインストール

Azure Database for PostgreSQL フレキシブル サーバーに pgAudit 拡張機能をインストールするには、使用する pgAudit 拡張機能を許可リストに追加する必要があります。

Azure portal を使用して以下を実行します。

  1. Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。
  2. サイドバーから、 [サーバー パラメーター] を選択します。
  3. azure.extensions パラメーターを検索します。
  4. 許可リストに追加する拡張機能として pgAudit を選択します。 Azure Database for PostgreSQL のインストールする許可リスト拡張機能を示すスクリーンショット。

Azure CLI を使用:

CLI の parameter set コマンドを使用して、拡張機能を許可リストに追加できます。

az postgres flexible-server parameter set --resource-group <your resource group>  --server-name <your server name> --subscription <your subscription id> --name azure.extensions --value pgAudit

pgAudit をインストールするには、それをサーバーの共有プリロード ライブラリに含める必要があります。 Postgres の shared_preload_libraries パラメーターへの変更を有効にするには、サーバーの再起動が必要です。 パラメーターを変更するには、Azure portalAzure CLI、または REST API を使用できます。

Azure portal を使用して以下を実行します。

  1. Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。

  2. サイドバーから、 [サーバー パラメーター] を選択します。

  3. shared_preload_libraries パラメーターを検索します。

  4. [pgaudit] を選択します。 pgaudit の shared_preload_libraries を有効にする Azure Database for PostgreSQL フレキシブル サーバーを示すスクリーンショット。

  5. psql で次のクエリを実行することで、pgaudit が shared_preload_libraries に読み込まれていることを確認できます。

    show shared_preload_libraries;
    

    shared_preload_libraries を返すクエリ結果に pgaudit が表示されます。

  6. クライアント (psql など) を使用してサーバーに接続し、pgAudit 拡張機能を有効にします。

    CREATE EXTENSION pgaudit;
    

ヒント

エラーが表示される場合は、shared_preload_libraries を保存した後にサーバーを再起動したことを確認してください。

pgAudit の設定

pgAudit では、セッションまたはオブジェクトの監査ログを構成できます。 セッション監査ログでは、実行されたステートメントの詳細なログが出力されます。 オブジェクト監査ログは、特定の関係だけを対象にした監査です。 設定するログ記録の種類を 1 つにするか両方にするか選択できます。

pgAudit を有効にした後は、ログ記録を開始するようそのパラメーターを構成できます。 pgAudit は下の手順で構成できます。 Azure portal を使用して以下を実行します。

  1. Azure Database for PostgreSQL サーバーを選択します。
  2. サイドバーから、 [サーバー パラメーター] を選択します。
  3. pgaudit パラメーターを探します。
  4. 編集する適切な設定パラメーターを選択してください。 たとえば、ログ記録を開始するには、pgaudit.logWRITE に設定します。Azure Database for PostgreSQL のスクリーンショット - pgaudit でログ記録を構成します
  5. [保存] ボタンをクリックして変更を保存します

pgAudit のドキュメントには、各パラメーターの定義が記載されています。 まずパラメーターをテストし、期待どおりに動作することを確認します。

Note

pgaudit.log_client を ON に設定すると、ログはファイルに書き込まれるのではなく、クライアント プロセス (psql など) にリダイレクトされます。 通常、この設定は無効のままにしておく必要があります。

pgaudit.log_level が有効になるのは、pgaudit.log_client がオンになっている場合のみです。

Note

pgAudit のドキュメントで説明されているように、Azure Database for PostgreSQL フレキシブル サーバーでは、- (マイナス) 記号のショートカットを使用して、pgaudit.log を設定することはできません。 必要なステートメント クラス (READ、WRITE など) はすべて、個別に指定する必要があります。

注意

log_statement パラメーターを DDL または ALL に設定し、CREATE ROLE/USER ... WITH PASSWORD ... ; または ALTER ROLE/USER ... WITH PASSWORD ... ; コマンドを実行した場合、PostgreSQL によって PostgreSQL ログにエントリが作成され、パスワードがクリア テキストで記録されます。これにより、セキュリティ上のリスクが生じる可能性があります。 これは、PostgreSQL エンジンの設計によって想定されている動作です。 ただし、PGAudit 拡張機能を使い、サーバー パラメーター ページで pgaudit.log='DDL' パラメーターを設定することができます。この場合、Postgres の log_statement='DDL' 設定とは異なり、Postgres ログに CREATE/ALTER ROLE ステートメントは記録されません。 これらのステートメントをログに記録する必要がある場合は、さらに pgaudit.log ='ROLE' を追加できます。こうすると、ログの記録時に、'CREATE/ALTER ROLE' によってログのパスワードが編集されます。

監査ログの形式

各監査エントリは、ログ行の先頭付近の AUDIT: によって示されます。 エントリの残りの部分の形式については、pgAudit のドキュメントで詳しく説明されています。

作業の開始

すぐに始めるには、pgaudit.logWRITE に設定し、サーバー ログを開いて出力を確認します。

監査ログの表示

ログへのアクセス方法は、選択したエンドポイントによって異なります。 Azure Storage については、ログ ストレージ アカウントに関する記事を参照してください。 Event Hubs の場合は、Azure ログのストリーミングに関する記事を参照してください。

Azure Monitor ログの場合は、選択したワークスペースにログが送信されます。 Postgres ログでは AzureDiagnostics コレクション モードが使用されるため、AzureDiagnostics テーブルからクエリを実行できます。 表内のフィールドについては、以下で説明します。 クエリとアラートの詳細については、Azure Monitor のログ クエリの概要に関する記事を参照してください。

このクエリを使用して作業を開始できます。 クエリに基づいてアラートを構成できます。

過去 1 日の特定のサーバーに関するすべての pgAudit エントリを Postgres ログで検索する

AzureDiagnostics
| where Resource =~ "myservername"
| where Category == "PostgreSQLLogs"
| where TimeGenerated > ago(1d)
| where Message contains "AUDIT:"

次のステップ