了解审核日志

本页面详细介绍了 Cloud Audit Logs 日志条目的结构、读取方式和解读方式。

Cloud Audit Logs 会为每个 Google Cloud 项目、文件夹和组织提供以下审核日志:

  • 管理员活动审核日志
  • 数据访问审核日志
  • 系统事件审核日志
  • 政策拒绝审核日志

如需大致了解 Cloud Audit Logs,请参阅 Cloud Audit Logs

审核日志条目的格式

审核日志条目是 Cloud Logging 日志条目中的一种。与其他所有 Cloud Logging 日志条目一样,审核日志条目同样存储在 LogEntry 对象中。审核日志条目与其他日志条目的区别在于 protoPayload 字段。在审核日志条目中,protoPayload 字段包含一个 AuditLog 对象,用于存储审核日志数据。

简而言之,每个审核日志条目都包含以下信息:

  • 日志条目所属的项目、文件夹或组织。
  • 日志条目所对应的资源。这些信息包括受监控资源列表中的资源类型以及表示特定实例的其他值。例如,您可以查看单个 Compute Engine 虚拟机实例或所有虚拟实例中的审核日志条目。
  • 时间戳。
  • 服务:服务是单独的 Google Cloud 产品,例如 Compute Engine、Cloud SQL 或 Pub/Sub。每项服务都由其名称标示:比如 Compute Engine 是 compute.googleapis.com,Cloud SQL 是 cloudsql.googleapis.com,等等。审核日志条目的 protoPayload.serviceName 字段中列出了此信息。

    资源类型属于单项服务,但一项服务可以有多种资源类型。如需查看服务和资源列表,请参阅将服务映射到资源

  • 类型为 protoPayload 的载荷。每个审核日志条目的载荷都是类型为 AuditLog 的对象,该对象了定义一组专用于 Cloud Audit Logs 记录的字段,例如 serviceNameauthenticationInfo。它还包含一个可选字段 metadata,Google Cloud 服务会使用该字段在审核日志条目中列出服务专属信息。一些 Google Cloud 服务仍然使用 旧的 serviceData 字段列出服务专属信息。如需查看使用 serviceData 字段的服务的列表,请参阅服务专属审核数据

  • 日志名称:审核日志条目属于项目、文件夹和组织内的日志。日志名称如下所示:

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

在一个项目、文件夹或组织内,这些日志名称通常缩写为 activitydata_accesssystem_eventpolicy

审核日志条目示例

本部分通过一个审核日志条目示例,介绍了如何查找审核日志条目中最重要的信息。

以下示例是由 App Engine 写入的管理员活动审核日志条目,用于记录对具有 PROJECT_ID my-gcp-project-id 的 身份和访问权限管理 (IAM) 政策的更改。为简便起见,此示例省略了日志条目的某些部分,并突出显示了某些字段:

    {
      protoPayload: {
        @type: "type.googleapis.com/google.cloud.audit.AuditLog",
        status: {},
        authenticationInfo: {
          principalEmail: "user@example.com"
        },
        serviceName: "appengine.googleapis.com",
        methodName: "SetIamPolicy",
        authorizationInfo: [...],
        serviceData: {
          @type: "type.googleapis.com/google.appengine.legacy.AuditData",
          policyDelta: { bindingDeltas: [
              action: "ADD",
              role: "roles/logging.privateLogViewer",
              member: "user:user@example.com"
          ], }
        },
        request: {
          resource: "my-gcp-project-id",
          policy: { bindings: [...], }
        },
        response: {
          bindings: [
            {
              role: "roles/logging.privateLogViewer",
              members: [ "user:user@example.com" ]
            }
          ],
        }
      },
      insertId: "53179D9A9B559.AD6ACC7.B40604EF",
      resource: {
        type: "gae_app",
        labels: { project_id: "my-gcp-project-id" }
      },
      timestamp: "2019-05-27T16:24:56.135Z",
      severity: "NOTICE",
      logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity",
    }

下面显示了用于选择上述示例审核日志条目的查询。该日志可在 Logs Explorer、Logging API 或 Google Cloud CLI 中使用。 项目标识符位于日志名称中,由于 logName 字段已编入索引,查询速度会很快:

    resource.type = "gae_app"
    logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

如果要查找来自某个资源类型(例如 gce_instance)的单个实例的审核日志,请添加实例限定符:

    resource.type = "gce_instance"
    resource.instance_id = "INSTANCE_ID"
    logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

解读示例审核日志条目

在上述审核日志条目示例中,显示的 protoPayloadinsertIdresourcetimestampseveritylogName 字段是 LogEntry 对象的一部分。protoPayload 字段的值为 AuditLog 对象。此对象用于封装审核日志数据。

在查看上述审核日志条目示例时,您可能有以下疑问:

  • 这是审核日志条目吗?是的,您可通过以下两种方式来辨认:

    • protoPayload.@type 字段为 type.googleapis.com/google.cloud.audit.AuditLog

    • logName 字段包含网域 cloudaudit.googleapis.com

  • 哪项服务写入了这条审核日志?这条日志由 App Engine 写入。审核日志条目的 protoPayload.serviceName 字段中列出了此信息。

  • 审核的是哪项操作?审核的是 SetIamPolicy,如 protoPayload.methodName 字段中所示。protoPayload.serviceData 中的 AuditData 对象列出了有关所审核操作的详细信息。

  • 审核的是哪项资源?审核的是在 App Engine 中运行且与 Google Cloud 项目 my-gcp-project-id 相关联的应用。您可以通过 resource 字段确定此信息,该字段指定了资源类型 gae_app 和项目标识符 my-gcp-project-id。在此示例中,您可以在受监控的资源类型列表中找到有关资源类型的详细信息。

如需了解详情,请参阅 LogEntry 类型AuditLog 类型IAM AuditData 类型

长时间运行的操作的审核日志

长时间运行的操作的 API 会发出两个 审核日志;在调用 API 且操作开始时执行一次, 在操作完成时执行一次操作

在本例中,LogEntry 对象包含 operation 字段。同一操作的日志条目具有相同的 LogEntry.operation.idLogEntry.operation.producer 值。写入的第一条日志为 LogEntry.operation.first=true, 且完成日志包含 LogEntry.operation.last=true

如果操作立即完成,则只有一个日志 同时包含 LogEntry.operation.first=trueLogEntry.operation.last=true

这些 API 实现操作 服务。此服务通常会在被调用时发出审核日志。根据调用的 API, protoPayload.methodName 是以下值之一:

  • google.longrunning.Operations.ListOperations
  • google.longrunning.Operations.GetOperation
  • google.longrunning.Operations.CancelOperation
  • google.longrunning.Operations.WaitOperation
  • google.longrunning.Operations.DeleteOperation

在本例中,未指定 LogEntry.operation,因为此 API 会返回有关长时间运行的操作的元数据,但本身并不是长时间运行的操作。

如需详细了解哪些 API 会接受审核(具体取决于服务),请参阅具有审核日志的 Google 服务

流式传输 API 的审核日志

与长时间运行的操作类似,流式 API 也会发出两项审核 logs;一次在首次调用 API 时执行,另一次在流式传输连接结束时执行。

在这种情况下,LogEntry 对象包含一个 operation 字段,并且同一操作的日志条目具有相同的 LogEntry.operation.idLogEntry.operation.producer 值。写入的第一条日志为 LogEntry.operation.first=true, ,完成日志将显示 LogEntry.operation.last=true

此 API 还可能会发出未设置 LogEntry.operation.firstLogEntry.operation.last 的接续日志,以指示数据流保持打开状态。

服务专属审核数据

某些服务会将补充性的数据结构放入审核日志的 serviceData 字段中,以此扩充其 AuditLog 中存储的信息。下表列出了使用 serviceData 字段的服务,并提供了指向其 AuditData 类型的链接。

服务 服务数据类型
App Engine type.googleapis.com/google.appengine.v1.AuditData
App Engine(旧版) type.googleapis.com/google.appengine.legacy.AuditData
BigQuery type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData
IAM type.googleapis.com/google.iam.v1.logging.AuditData

查看审核日志

您可以查询所有审核日志,也可以按其审核日志名称来查询日志。审核日志名称包含您要查看其审核日志记录信息的 Google Cloud 项目、文件夹、结算账号或组织的资源标识符。您的查询可以指定已编入索引的 LogEntry 字段,如果您使用支持 SQL 查询的 Log Analytics 页面,则您可以以图表形式查看查询结果

如需详细了解如何查询日志,请参阅以下页面:

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Logging API 查看 Cloud Logging 中的审核日志。

控制台

在 Google Cloud 控制台中,您可以使用 Logs Explorer 来检索 Google Cloud 项目、文件夹或组织的审核日志条目:

  1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面。

    前往 Logs Explorer

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 选择现有的 Google Cloud 项目、文件夹或组织。

  3. 如需显示所有审核日志,请在查询编辑器字段中输入以下任一查询,然后点击运行查询

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 如需显示特定资源和审核日志类型的审核日志,请在查询构建器窗格中执行以下操作:

    • 资源类型中,选择要查看其审核日志的 Google Cloud 资源。

    • 日志名称中,选择要查看的审核日志类型:

      • 对于管理员活动审核日志,选择 activity
      • 对于数据访问审核日志,选择 data_access
      • 对于系统事件审核日志,选择 system_event
      • 对于政策拒绝审核日志,选择 policy
    • 点击运行查询

    如果您没有看到这些选项,则表示 Google Cloud 项目、文件夹或组织中没有该类型的任何审核日志。

    如果您在尝试从 Logs Explorer 中查看日志时遇到问题,请参阅问题排查信息。

    如需详细了解如何使用 Logs Explorer 进行查询,请参阅在 Logs Explorer 中构建查询。 如需了解如何使用 Gemini 在 Logs Explorer 中汇总日志条目,请参阅在 Gemini 协助下汇总日志条目

gcloud

Google Cloud CLI 为 Logging API 提供了命令行界面。在每个日志名称中提供有效的资源标识符。例如,如果您的查询包含 PROJECT_ID,则您提供的项目标识符必须引用当前选择的 Google Cloud 项目。

如需读取 Google Cloud 项目级层审核日志条目,请运行以下命令:

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \
    --project=PROJECT_ID

如需读取文件夹级审核日志条目,请运行以下命令:

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \
    --folder=FOLDER_ID

如需读取组织级审核日志条目,请运行以下命令:

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \
    --organization=ORGANIZATION_ID

如需读取 Cloud Billing 账号级层审核日志条目,请运行以下命令:

gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \
    --billing-account=BILLING_ACCOUNT_ID

在命令中添加 --freshness 标志可读取超过 1 天的日志。

如需详细了解如何使用 gcloud CLI,请参阅 gcloud logging read

API

构建查询时,请在每个日志名称中提供有效的资源标识符。例如,如果您的查询包含 PROJECT_ID,则您提供的项目标识符必须引用当前选择的 Google Cloud 项目。

例如,要使用 Logging API 查看项目级的审核日志条目,请执行以下操作:

  1. 转到 entries.list 方法文档中的试用此 API 部分。

  2. 将以下内容添加到试用此 API 表单的请求正文部分。点击此预填充的表单后,系统会自动填充请求正文,但您需要在每个日志名称中提供一个有效的 PROJECT_ID

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 点击执行