了解审核日志

本页面详细介绍了 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 的 Identity and Access Management (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",
    }

下面显示了用于选择上一个示例审核日志条目的查询。该查询可在日志浏览器、Logging API 或 Google Cloud CLI 中使用。项目标识符位于日志名称中:

    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 实现了 Operations 服务。此服务通常会在被调用时发出审核日志条目。protoPayload.methodName 是以下值之一,具体取决于调用的 API:

  • 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 Cloud 服务

流式传输 API 的审核日志

与长时间运行的操作类似,流式 API 会发出两个审核日志条目:一个在首次调用 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 CLI 或 Logging API。

控制台

在 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 项目、文件夹或组织中没有该类型的任何审核日志。

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

    如需详细了解如何使用日志浏览器进行查询,请参阅在日志浏览器中构建查询

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

REST

构建查询时,请在每个日志名称中提供有效的资源标识符。例如,如果您的查询包含 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. 点击执行