Azure Database for PostgreSQL 灵活服务器中的审核日志记录

适用于: Azure Database for PostgreSQL 灵活服务器

Azure Database for PostgreSQL 灵活服务器中数据库活动的审核日志记录可以通过 PostgreSQL 审核扩展来获取:pgauditpgaudit 提供详细的会话和/或对象审核日志记录。

如果需要对计算和存储缩放之类的操作进行 Azure 资源级别的日志记录,请参阅 Azure 活动日志

使用注意事项

默认情况下,通过使用 Postgres 的标准日志记录设备将 pgaudit 日志语句与常规日志语句一起发出。 在 Azure Database for PostgreSQL 灵活服务器中,可将所有日志配置为发送到 Azure Monitor 日志存储,以供将来在 Log Analytics 中进行分析。 如果启用 Azure Monitor 资源日志记录,系统会将日志(以 JSON 格式)自动发送到 Azure 存储、事件中心和/或 Azure Monitor 日志,具体取决于你的选择。

若要了解如何设置将日志记录到 Azure 存储、事件中心或 Azure Monitor 日志的功能,请访问服务器日志文章的资源日志部分。

安装 pgaudit

需要先将 pgaudit 扩展列入允许列表以供使用,然后才能在 Azure Database for PostgreSQL 灵活服务器中安装 pgaudit 扩展。

使用 Azure 门户

  1. 选择 Azure Database for PostgreSQL 灵活服务器实例。
  2. 在侧栏中选择服务器参数
  3. 搜索 azure.extensions 参数。
  4. 选择 pgaudit 作为要添加到允许列表的扩展。

Azure Database for PostgreSQL 中的允许列表的屏幕截图。

使用 Azure CLI

可以通过 CLI 参数集命令将扩展添加到允许列表。

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 门户Azure CLIREST API 更改参数。

使用 Azure 门户

  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 配置会话或对象审核日志记录。 会话审核日志记录会发出已执行语句的详细日志。 对象审核日志记录是局限于特定关系的审核。 可以选择设置一个或两个类型的日志记录。

启用 pgaudit 以后,即可配置其参数,以便开始日志记录。
若要配置 pgaudit,可以按照以下说明进行操作。
使用 Azure 门户

  1. 选择你的 Azure Database for PostgreSQL 服务器。

  2. 在侧栏中选择服务器参数

  3. 搜索 pgaudit 参数。

  4. 选择适当的设置参数进行编辑。 例如,若要开始日志记录,请将 pgaudit.log 设置为 WRITE

  5. 选择“保存”按钮以保存更改

pgaudit 文档提供每个参数的定义。 请先测试参数,确认获取的是预期行为。

pgaudit.log_client 设置为 ON 会将日志重定向到客户端进程(例如 psql)而不是写入文件。 通常应让此设置保持禁用状态。

pgaudit.log_level 只有在 pgaudit.log_client 为 on 的情况下启用。

在 Azure Database for PostgreSQL 灵活服务器中,不能使用 -(减号)快捷方式来设置 pgaudit.log(如 pgaudit 文档中所述)。 所有必需的语句类(READ、WRITE 等)均应单独指定。

如果将 log_statement 参数设置为 DDL 或 ALL,并运行 CREATE ROLE/USER ... WITH PASSWORD ... ; ALTER ROLE/USER ... WITH PASSWORD ... ; 命令,则 PostgreSQL 会在 PostgreSQL 日志中创建一个条目,其中密码以明文记录,这可能会导致潜在的安全风险。 这是每个 PostgreSQL 引擎设计所需的行为。

但是,你可以使用 pgaudit 扩展,并在服务器参数页中设置 pgaudit.log=DDL 参数,它不会在 Postgres 日志中记录任何 CREATE/ALTER ROLE 语句,这与 Postgres log_statement=DDL 设置有所不同。 如果确实需要记录这些语句,你可以另外添加 pgaudit.log ='ROLE',这会在记录 CREATE/ALTER ROLE 的同时修改日志中的密码。

审核日志格式

每个审核条目通过靠近日志行开头的 AUDIT: 进行指示。 条目其余部分的格式详见 pgaudit 文档

入门

若要快速开始,请将 pgaudit.log 设置为 WRITE,并打开服务器日志来查看输出。

查看审核日志

访问日志的方式取决于所选的终结点。 有关 Azure 存储,请参阅日志存储帐户一文。 有关事件中心,请参阅流式传输 Azure 日志一文。

Azure Monitor 日志将发送到所选的工作区。 Postgres 日志使用 AzureDiagnostics 收集模式,因此可以从 AzureDiagnostics 表查询它们。 下面描述了该表中的字段。 在 Azure Monitor 日志查询概述中详细了解查询和警报。

可以通过此查询开始使用。 可以基于查询配置警报。

搜索特定服务器在过去一天生成的 Postgres 日志中的所有 pgaudit 条目

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