了解审核日志

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

Cloud Audit Logs 会为每个项目、文件夹和组织维护三类审核日志:

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

如需大致了解 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。它还包含一个可选字段 serviceData,某些 Google Cloud 服务会使用该字段在审核日志条目中列出服务专属信息。如需查看使用该字段的 Google Cloud 服务的列表,请参阅服务专属审核数据

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

   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

   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

   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

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

审核日志条目示例

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

以下示例是由 Resource Manager 写入的管理员活动审核日志条目,用于记录对具有 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",
    }

下面显示了用于选择上述示例审核日志条目的查询。它可在日志浏览器、Logging API 或 Cloud SDK 中使用。项目标识符位于日志名称中,由于 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 类型

大型审核日志条目或长时间运行的操作的审核日志条目

如果某项操作会异步运行或生成大型 AuditLog 记录,则该操作的审核日志会拆分成多个日志条目。当同一操作涉及多个日志条目时,LogEntry 对象将包含一个 operation 字段,并且同一操作的各个条目具有相同的 LogEntry.operation.id 值和 LogEntry.operation.producer 值。

在前面的审核日志条目示例中,operation 字段不存在,这意味着所有审核信息都包含在单个日志条目中。

服务专属审核数据

某些服务会将补充性的数据结构放入审核日志的 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

查看审核日志

如需查找和查看审核日志,您需要知道要查看的审核日志信息所属 Cloud 项目、文件夹或组织的标识符。您可以进一步指定其他已编入索引的 LogEntry 字段,如 resource.type;如需了解详情,请查看快速查找日志条目

以下是审核日志名称,其中含有 Cloud 项目、文件夹或组织的标识符变量:

   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

   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

   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

您可以通过多种方式来查看审核日志条目:

控制台

您可以使用 Cloud Console 中的日志浏览器来检索 Cloud 项目的审核日志条目:

  1. 在 Cloud Console 中,转到 Logging > 日志浏览器页面。

    转到“日志浏览器”页面

  2. 日志浏览器页面上,选择一个现有的 Cloud 项目。

  3. 查询构建器窗格中,执行以下操作:

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

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

      • 对于管理员活动审核日志,选择 activity
      • 对于数据访问审核日志,选择 data_access
      • 对于系统事件审核日志,选择 system_event

    如果您没有看到这些选项,则表示 Cloud 项目中没有该类型的审核日志。

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

gcloud

gcloud 命令行工具提供了用于 Cloud Logging API 的命令行界面。在每个日志名称中提供有效的 PROJECT_IDFOLDER_IDORGANIZATION_ID

如需读取 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

如需详细了解如何使用 gcloud 工具,请参阅读取日志条目

API

构建查询时,请用有效值替换变量,替换为适当的项目级层、文件夹级层或组织级层的审核日志名称或标识符(如审核日志名称中所列)。例如,如果您的查询包含 PROJECT_ID,则您提供的项目标识符必须引用当前选定的 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. 点击执行

如需详细了解查询,请参阅 Logging 查询语言

如需查看审核日志条目示例并了解如何在其中找到最重要的信息,请参阅了解审核日志