Spanner Omni 审核日志记录

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

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

准备工作

为 Spanner Omni 部署配置 TLS 或双向 TLS (mTLS) 加密。如果您创建的部署未使用 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 支持 CreateScheduledBackup 和 OptimizeRestoredDatabase 系统事件。不过,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 在每个服务器上运行多个进程,例如 server、zone_services、zonal_zone_services、zonal_server 和 base_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 CloudWatch、Grafana Loki、Elasticsearch、Datadog、Splunk 或 Cloud 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_READ、DATA_READ 或 DATA_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 审核日志会根据您的 Cloud Logging 保留设置保留在 Cloud Logging 中。Spanner Omni 会将本地审核日志文件保留最多 14 天,或者直到达到磁盘大小限制为止,并依靠您将日志导出到外部系统以进行长期存储。

相似之处

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

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

后续步骤