Azure Database for PostgreSQL - Single Server の監査ログ

適用対象: Azure Database for PostgreSQL - 単一サーバー

重要

Azure Database for PostgreSQL - シングル サーバーは廃止パスにあります。 Azure Database for PostgreSQL - フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for PostgreSQL - フレキシブル サーバーへの移行の詳細については、Azure Database for PostgreSQL 単一サーバーの現状に関するページを参照してください。

Azure Database for PostgreSQL - Single Server でのデータベース アクティビティの監査ログは、PostgreSQL の監査拡張機能 pgAudit を介して利用できます。 pgAudit 拡張機能では、詳細なセッションとオブジェクトの監査ログが提供されます。

注意

pgAudit 拡張機能は Azure Database for PostgreSQL ではプレビュー段階にあります。 これは、汎用サーバーとメモリ最適化サーバー上でのみ有効にすることができます。

コンピューティングやストレージのスケーリングなどの操作に Azure リソースレベルのログが必要な場合は、「Azure プラットフォーム ログの概要」を参照してください。

使用に関する考慮事項

既定では、pgAudit ログ ステートメントは、Postgres の標準ログ記録機能を使用して、通常のログ ステートメントと共に出力されます。 Azure Database for PostgreSQL では、これらの .log ファイルを Azure portal または Azure CLI を介してダウンロードできます。 ファイルのコレクションの最大ストレージは 1 GB です。 各ファイルは最大 7 日間使用できます。 既定値は 3 日です。 このサービスは、短期的なストレージ オプションです。

または、Azure Monitor ログ ストアに送信されるすべてのログを、Log Analytics で後で分析できるように構成することもできます。 Monitor のリソース ログを有効にすると、選択した内容に応じて、ログが JSON 形式で Azure Storage、Azure Event Hubs、または Azure Monitor のログに自動的に送信されます。

pgAudit を有効にすると、サーバー上に大量のログ記録が生成され、パフォーマンスとログ ストレージに影響を与えます。 長期的なストレージ オプションおよび分析やアラートの機能を提供する、Monitor ログを使用することをお勧めします。 以下のように、追加のログ記録によるパフォーマンスへの影響を軽減するために、標準のログ記録を無効にします。

  1. パラメーター logging_collectorオフに設定します。
  2. この変更を適用するには、サーバーを再起動します。

Storage、Event Hubs、または Monitor ログへのログ記録を設定する方法については、「Azure Database for PostgreSQL - Single Server のログ」のリソース ログのセクションを参照してください。

pgAudit をインストールする

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

以下のようにポータルを使用します。

  1. Azure Database for PostgreSQL サーバーを選択します。

  2. 左側の [設定] の下で [サーバー パラメーター] を選択します。

  3. shared_preload_libraries を探します。

  4. [PGAUDIT] を選択します。

    Azure Database for PostgreSQL で PGAUDIT の shared_preload_libraries を有効にしていることを示すスクリーンショット。

  5. サーバーを再起動して変更を適用します。

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

    CREATE EXTENSION pgaudit;
    

ヒント

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

pgAudit の設定

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

注意

pgAudit 設定はグローバルに指定され、データベース レベルまたはロール レベルでは指定できません。

pgAudit のインストールが完了したら、ログ記録を開始するようそのパラメーターを構成できます。

pgAudit を構成するには、ポータルで以下を行います。

  1. Azure Database for PostgreSQL サーバーを選択します。

  2. 左側の [設定] の下で [サーバー パラメーター] を選択します。

  3. pgaudit パラメーターを探します。

  4. 編集する適切な設定パラメーターを選択してください。 たとえば、ログ記録を開始するには、pgaudit.logWRITE に設定します。

    pgAudit を使用した Azure Database for PostgreSQL の構成を示すスクリーンショット。

  5. [保存] を選択して変更を保存します。

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

  • 設定 pgaudit.log_client を ON にすると、ログはファイルに書き込まれるのではなく、psql などのクライアント プロセスにリダイレクトされます。 一般に、この設定を無効のままにします。
  • パラメーター pgaudit.log_level は、pgaudit.log_client がオンになっている場合にのみ、有効化されます。

注意

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

監査ログの形式

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

実際の監査要件を満たすためにその他のフィールドが必要な場合は、Postgres パラメーター log_line_prefix を使用します。 文字列 log_line_prefix は、各 Postgres ログ行の先頭に出力されます。 たとえば、次の log_line_prefix 設定では、タイムスタンプ、ユーザー名、データベース名、およびプロセス ID が提供されます。

t=%m u=%u db=%d pid=[%p]:

log_line_prefix の詳細を確認するには、PostgreSQL のドキュメントを参照してください。

はじめに

すぐに使用するには、pgaudit.logWRITE に設定します。 次に、ログを開いて出力を確認します。

監査ログの表示

.log ファイルを使用している場合、監査ログは、PostgreSQL エラー ログと同じファイルに含まれます。 ログ ファイルは、ポータルまたは CLI からダウンロードできます。

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

Monitor ログの場合は、選択したワークスペースにログが送信されます。 Postgres ログでは AzureDiagnostics コレクション モードが使用されるため、示されているように AzureDiagnostics テーブルからクエリを実行できます。 クエリとアラートの詳細については、「Azure Monitor でのクエリのログ」を参照してください。

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

次のように、過去 1 日の特定のサーバーに関するすべての Postgres ログを検索します。

AzureDiagnostics
| where LogicalServerName_s == "myservername"
| where TimeGenerated > ago(1d) 
| where Message contains "AUDIT:"

次のステップ