Spanner Omni 审核日志记录

Spanner Omni 会写入审核日志,以记录 Spanner Omni 部署中的管理活动和数据访问。

审核日志可帮助您回答“哪些用户何时在何处执行过哪些操作?”这一问题。使用审核日志可帮助安全、审核和合规性实体监控 Spanner Omni 数据和系统,检查是否存在可能的漏洞或外部数据滥用。

准备工作

使用 TLS 或双向 TLS (mTLS) 加密配置 Spanner Omni 部署。如果您创建的部署未使用 TLS 或 mTLS 加密,则不会生成审核日志。如需了解如何创建使用 TLS 或 mTLS 加密的部署,请参阅以下内容:

审核日志类型

Spanner Omni 支持以下类型的审核日志。

管理员活动审核日志

管理员活动审核日志会记录修改部署配置或元数据的 API 调用。例如,当用户创建数据库时,Spanner Omni 会写入管理员活动审核日志。

对于配置了 TLS 和 mTLS 加密的部署,系统默认会生成管理员活动审核日志。您无法配置、排除或停用这些日志。

如需查看会写入管理员活动审核日志的方法列表,请参阅按权限类型列出的方法

数据访问审核日志

数据访问审核日志会记录读取部署配置或元数据的 API 调用,以及创建、修改或读取用户数据的 API 调用。例如,当用户描述数据库、运行 SQL 查询或执行数据操纵语言 (DML) 语句时,Spanner Omni 会写入数据访问审核日志。

数据访问审核日志默认处于停用状态,因为它们可能很大。如需记录数据访问事件,请明确启用并配置这些事件。数据访问审核日志可帮助 Google 支持团队排查问题,因此我们建议您启用这些日志。

如需了解如何配置这些日志,请参阅配置数据访问审核日志。如需查看会写入数据访问审核日志的方法列表,请参阅按权限类型列出的方法

系统事件审核日志

系统事件审核日志会记录系统在没有直接用户操作的情况下修改 Spanner Omni 资源配置的时间。例如,当系统自动优化新恢复的数据库或创建预定备份时,Spanner Omni 会写入系统事件审核日志。

对于配置了 TLS 和 mTLS 加密的部署,系统默认会生成系统事件审核日志。您无法配置、排除或停用这些日志。

如需详细了解生成这些日志的系统事件,请参阅系统事件

配置数据访问审核日志

如需启用数据访问审核日志,请使用 Spanner Omni CLI 或 API 为部署配置 Identity and Access Management (IAM) 政策。您可以针对特定权限类型启用日志记录,并豁免特定用户,使其免于被记录。

所需权限

如需配置数据访问审核日志,您需要拥有 spanner.instances.setIamPolicy 权限。

如需查看数据访问审核日志配置,您需要拥有 spanner.instances.getIamPolicy 权限。

权限类型

API 方法会检查 IAM 权限,每项权限都具有关联的权限类型。配置数据访问审核日志时,请指定要记录哪些权限类型。权限类型分为以下几类:

数据访问权限类型

  • ADMIN_READ:用于记录读取元数据或配置信息的 API 方法。例如,描述数据库。
  • DATA_READ:记录读取用户数据的 API 方法。例如,执行 SQL 查询。
  • DATA_WRITE:记录写入用户数据的 API 方法。例如,执行 DML 语句。

管理员活动权限类型

  • ADMIN_WRITE:对于写入元数据或配置信息(例如创建数据库)的 API 方法,系统会检查此权限。这些操作会生成管理员活动审核日志,且无法配置。

如需详细了解权限类型,请参阅 Cloud Audit Logs 文档中的权限类型

使用 Spanner Omni CLI 进行配置

如需使用 Spanner Omni CLI 配置数据访问审核日志,请创建一个 JSON 政策文件,其中列出要启用的日志类型和任何豁免的成员,然后应用该政策。

  1. 创建名为 policy.json 的政策文件:

    {
      "auditConfigs": [
        {
          "auditLogConfigs": [
            {
              "logType": "ADMIN_READ",
              "exemptedMembers": [
                "USER_NAME"
              ]
            },
            {
              "logType": "DATA_WRITE"
            },
            {
              "logType": "DATA_READ"
            }
          ],
          "service": "spanner.googleapis.com"
        }
      ]
    }
    
  2. 使用 spanner instances set-iam-policy 命令应用政策:

    spanner instances set-iam-policy default policy.json
    

如需查看当前的数据访问审核日志配置,请运行以下命令:

spanner instances get-iam-policy default

如需查看有关常见配置使用情形的更多示例,请参阅 Cloud Audit Logs 文档中的配置数据访问审核日志

系统事件

Spanner Omni 会针对 Spanner 的受管版本支持的大部分系统事件生成系统事件审核日志。如需了解详情,请参阅 Spanner 文档中的系统事件

Spanner Omni 支持 CreateScheduledBackupOptimizeRestoredDatabase 系统事件。不过,Spanner Omni 不支持 AutoscaleInstance 系统事件,因为 Spanner Omni 中没有自动扩缩功能。

审核日志文件和保留期限

Spanner Omni 会将审核日志写入 Spanner Omni 服务器的本地文件系统。

使用以下路径和命名惯例查找审核日志文件: BASE_DIR/logs/PROCESS/audit.log.BUCKET.TIMESTAMP.PROCESS_ID

  • BASE_DIR:启动 Spanner Omni 部署时指定的基本目录。对于 Kubernetes 部署,此值默认为 /spanner

  • PROCESS:Spanner Omni 在每个服务器上运行多个进程,例如 serverzone_serviceszonal_zone_serviceszonal_serverbase_services。审核日志会写入到生成它们的进程所对应的目录中。

  • BUCKET:管理员活动和系统事件审核日志会写入 required 存储桶,而数据访问审核日志会写入 default 存储桶。

  • TIMESTAMP:文件创建时的时间戳。

  • PROCESS_ID:写入审核日志的进程的进程 ID。

当当前文件超过 50 MiB 或服务器进程重启时,Spanner Omni 会创建新的审核日志文件。它还会自动维护从 BASE_DIR/logs/PROCESS/audit.log.BUCKET 到正在写入的审核日志文件的符号链接。

对本地审核日志文件的访问权限由文件系统访问控制列表 (ACL) 控制。有权登录服务器并访问这些文件的任何人都可以查看审核日志。

我们建议您限制对 Spanner Omni 虚拟机的访问权限(例如,通过限制 SSH 访问权限和配置文件系统 ACL),以便只有经过授权的人员才能查看日志。为了实现长期存储、审核和合规性,请使用日志记录代理(例如 Fluentd)收集审核日志并将其导出到外部日志记录系统,例如 AWS CloudWatchGrafana LokiElasticsearchDatadogSplunkCloud Monitoring

文件保留

Spanner Omni 会针对本地审核日志文件强制执行基于大小和基于期限的保留政策:

  • 大小限制:审核日志文件会一直保留,直到其总磁盘使用量超过 1 GB。如果日志目录使用单独的磁盘,则审核日志文件将分配到该磁盘总空间的 25% 作为配额。

  • 期限限制:审核日志文件最多保留 14 天,前提是未超出大小限制。

当达到任一限制时,Spanner Omni 会先删除最旧的日志文件。如果您需要将审核日志保留 14 天以上,请将其导出到外部日志记录系统。

审核日志条目结构

Spanner Omni 审核日志条目采用 JSON 格式,并使用与 Spanner 相同的结构定义。如需了解详情,请参阅 Cloud Audit Logs 文档中的审核日志条目结构

日志名称

与多租户托管版 Spanner 不同,Spanner Omni 在专用服务器上以单租户部署运行。由于这些服务器上没有其他租户或项目,因此所有审核日志条目都使用项目标识符 default

projects/default/logs/cloudaudit.googleapis.com/activity
projects/default/logs/cloudaudit.googleapis.com/data_access
projects/default/logs/cloudaudit.googleapis.com/system_event

调用方身份

审核日志会记录执行所记录操作的用户的身份。 调用者的身份存储在 AuditLog 对象的 AuthenticationInfo 字段中。

在 Spanner Omni 中,调用者的身份是执行 API 调用的已通过身份验证的用户的用户名。如需了解如何创建和管理用户,请参阅身份验证和授权

调用方的 IP 地址

Spanner Omni 不支持在审核日志中记录调用者的 IP 地址。

方法(按权限类型)

当您调用某个 API 方法时,Spanner Omni 会根据执行该方法所需的权限类型生成审核日志。需要 ADMIN_READDATA_READDATA_WRITE 权限的方法会生成数据访问审核日志,而需要 ADMIN_WRITE 权限的方法会生成管理员活动审核日志。

Spanner Omni 支持大多数 Cloud Spanner API 方法。如需了解 Spanner 和 Spanner Omni 共享的方法的审核日志记录分类,请参阅 Spanner 文档中的按权限类型列出的方法

Spanner Omni 还引入了可生成审核日志的独特 API 方法。标记为长时间运行的操作 (LRO) 的方法通常会生成两个审核日志条目:一个在操作开始时生成,另一个在操作结束时生成。如需了解详情,请参阅 Cloud Audit Logs 文档中的长时间运行的操作

权限类型 方法
ADMIN_READ google.spanner.omni.v1.OmniAdmin.GetLocation
google.spanner.omni.v1.OmniAdmin.ListLocation
google.spanner.omni.v1.OmniAdmin.GetLocationDistance
google.spanner.omni.v1.OmniAdmin.ListLocationDistance
google.spanner.omni.v1.OmniAdmin.GetZone
google.spanner.omni.v1.OmniAdmin.ListZones
google.spanner.omni.v1.OmniAdmin.GetServer
google.spanner.omni.v1.OmniAdmin.ListServers
google.spanner.omni.v1.OmniAdmin.GetDeployment
google.spanner.omni.v1.OmniAdmin.ListBackupDescriptors
google.spanner.omni.v1.OmniAdmin.GetExternalStorage
google.spanner.omni.v1.OmniAdmin.ListExternalStorages
google.spanner.omni.v1.OmniAdmin.GetIamPolicy
google.spanner.omni.v1.UsersService.GetUser
google.spanner.omni.v1.UsersService.ListUsers
google.spanner.omni.v1.UsersService.GetRole
google.spanner.omni.v1.UsersService.ListRoles
ADMIN_WRITE google.spanner.omni.v1.OmniAdmin.CreateLocation
google.spanner.omni.v1.OmniAdmin.DeleteLocation
google.spanner.omni.v1.OmniAdmin.CreateLocationDistance
google.spanner.omni.v1.OmniAdmin.UpdateLocationDistance
google.spanner.omni.v1.OmniAdmin.DeleteLocationDistance
google.spanner.omni.v1.OmniAdmin.CreateZone
google.spanner.omni.v1.OmniAdmin.DeleteZone
google.spanner.omni.v1.OmniAdmin.CreateServer
google.spanner.omni.v1.OmniAdmin.DeleteServer
google.spanner.omni.v1.OmniAdmin.CreateExternalStorage
google.spanner.omni.v1.OmniAdmin.DeleteExternalStorage
google.spanner.omni.v1.OmniAdmin.SetIamPolicy
google.spanner.omni.v1.OmniAdmin.ImportBackup (LRO)
google.spanner.omni.v1.UsersService.CreateUser
google.spanner.omni.v1.UsersService.DeleteUser
google.spanner.omni.v1.UsersService.UpdateUser
DATA_READ google.spanner.omni.v1.ImportExportService.ExportDatabase (LRO)
DATA_WRITE google.spanner.omni.v1.ImportExportService.ImportDatabase (LRO)

不会生成审核日志的方法

与 Spanner 一样,Spanner Omni 也会从审核日志记录中排除相同的方法。排除这些方法的原因是,它们是高容量方法,涉及较高的日志生成和存储费用,审核价值较低,或者其他审核日志或平台日志已提供方法覆盖功能。如需查看这些排除方法的完整列表,请参阅 Spanner 文档中的豁免方法

此外,由于 google.spanner.omni.v1.LoginService.Login 方法在身份验证和授权检查之前执行,因此不会生成审核日志。

处理用时

审核日志中的“处理时长”字段记录的是 API 的处理时长,例如 SQL 查询的执行时长,而不是写入审核日志的延迟时间。如需了解详情,请参阅 Spanner 文档中的处理时长

与 Spanner 的托管版本比较

虽然 Spanner Omni 中的审核日志记录与 Spanner 共享核心概念和格式,但在日志的存储、配置和管理方式方面存在几个关键区别。

不同之处

  • 日志目的地:Spanner Omni 会将审核日志直接写入 Spanner Omni 服务器的本地文件系统,而不是将其导出到 Cloud Logging。

  • 配置:在 Spanner 中,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Identity and Access Management API 在项目级配置数据访问审核日志。在 Spanner Omni 中,您可以使用 Spanner Omni CLI 或 Spanner Omni API 配置数据访问审核日志。

  • TLS 和 mTLS 加密:Spanner 默认强制执行 TLS 加密,且无法停用。在 Spanner Omni 中,如果您选择在不使用 TLS 或 mTLS 加密的情况下进行部署,则系统不会生成审核日志。

  • 保留:Spanner 审核日志会根据您的 Logging 保留设置保留在 Logging 中。Spanner Omni 会将本地审核日志文件保留最多 14 天,或者直到达到磁盘大小限制为止,并依靠您将日志导出到外部系统以进行长期存储。

相似之处

  • 日志格式:两款产品均以 JSON 格式写入审核日志,遵循标准的 Google Cloud AuditLog 结构。

  • 数据访问配置:这两款产品都允许您按权限类型(ADMIN_READDATA_READDATA_WRITE)精细地启用数据访问审核日志,并支持免于记录特定用户。

后续步骤