Azure Database for PostgreSQL 灵活服务器中的审核日志记录
适用于: Azure Database for PostgreSQL - 灵活服务器
Azure Database for PostgreSQL 灵活服务器中数据库活动的审核日志记录可以通过 PostgreSQL 审核扩展 pgAudit 来获取。 pgAudit 提供详细的会话和/或对象审核日志记录。
如果需要对计算和存储缩放之类的操作进行 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 门户:
- 选择 Azure Database for PostgreSQL 灵活服务器实例。
- 在侧栏中选择服务器参数。
- 搜索
azure.extensions
参数。 - 选择 pgAudit 作为要列入允许列表的扩展。
使用 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 CLI 或 REST API 更改参数。
使用 Azure 门户:
选择 Azure Database for PostgreSQL 灵活服务器实例。
在侧栏中选择服务器参数。
搜索
shared_preload_libraries
参数。选择 pgaudit。
通过在 pgaudit 中执行以下查询,可以检查 shared_preload_libraries 中是否加载了 pgaudit:
show shared_preload_libraries;
在将会返回 shared_preload_libraries 的查询结果中,你应该会看到 pgaudit。
使用客户端(例如 psql)连接到服务器并启用 pgAudit 扩展。
CREATE EXTENSION pgaudit;
提示
如果看到错误,请确认是否已在保存 shared_preload_libraries
后重启服务器。
pgAudit 设置
可以通过 pgAudit 配置会话或对象审核日志记录。 会话审核日志记录会发出已执行语句的详细日志。 对象审核日志记录是局限于特定关系的审核。 可以选择设置一个或两个类型的日志记录。
启用 pgAudit 以后,即可配置其参数,以便开始日志记录。 若要配置 pgAudit,可以遵循以下说明。 使用 Azure 门户:
- 选择你的 Azure Database for PostgreSQL 服务器。
- 在侧栏中选择服务器参数。
- 搜索
pgaudit
参数。 - 选择要编辑的相应设置参数。 例如,若要开始日志记录,请将
pgaudit.log
设置为WRITE
- 单击保存按钮,以保存更改
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 引擎设计所需的行为。 但是,你可以使用e 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:"