审核日志记录

您正在查看 Apigee X 文档。
查看 Apigee Edge 文档。

本页面介绍 Apigee 和 Apigee Hybrid 创建的审核日志,它们是 Cloud Audit Logs 的一部分。

概览

Google Cloud 服务会写入审核日志,便于您了解谁在何时何地执行了什么操作。每个 Apigee 和 Hybrid 项目的审核日志都只包含直接属于项目的资源的日志数据。其他实体(例如文件夹、组织和结算帐号)的审核日志都包含实体本身的日志数据。

如需大致了解 Cloud Audit Logs,请转到 Cloud Audit Logs。 如需深入了解 Cloud Audit Logs,请参阅了解审核日志

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

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

Apigee 和 Hybrid 会写入 管理员活动 审核日志,该日志记录了修改资源配置或元数据的操作。您无法停用管理员活动审核日志。

仅在明确启用时,Apigee 和 Hybrid 写入数据访问审核日志才会启用。数据访问审核日志包含用于读取资源配置或元数据的 API 调用。数据访问审核日志不会记录对公开共享的资源(所有用户所有经过身份验证的用户均可使用)或无需登录 Google Cloud 即可访问的资源执行的数据访问操作。

Apigee 和 Hybrid 不会写入系统事件审核日志。

审核的操作

下表汇总了与 Apigee 和 Hybrid 中的每种审核日志类型相对应的 API 操作:

审核日志类别 操作
DATA_READ GET
LIST
ADMIN CREATE
UPDATE
DELETE

审核日志格式

审核日志条目包含以下对象,您可以在 Cloud Logging 中使用日志查看器、Cloud Logging API 或 gcloud 命令行工具进行查看:

  • 日志条目本身,即类型为 LogEntry 的对象。以下是一些实用的字段:
  • logName 包含项目标识和审核日志类型
  • resource 包含所审核操作的目标
  • timeStamp 包含所审核操作的时间
  • protoPayload 包含审核信息
  • 审核日志记录数据,即保存在日志条目的 protoPayload 字段中的 AuditLog
  • (可选)服务专属的审核信息,即保存在 AuditLog 对象的 serviceData 字段中的服务专属对象。如需了解详情,请参阅服务专属审核数据

如需了解上述对象中的其他字段以及如何解读这些字段,请参阅了解审核日志

日志名称

Cloud Audit Logs 资源名称指明了审核日志所属的项目或其他实体,以及日志是包含管理员活动、数据访问还是系统事件审核日志数据。例如,下面显示的日志名称分别表示项目的管理员活动审核日志和组织的数据访问审核日志:

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

服务名称

Apigee 和 Hybrid 审核日志使用服务名称 apigee.googleapis.com

如需详细了解日志记录服务,请参阅将服务映射到资源

资源类型

Apigee 和 Hybrid 审核日志的审核日志全部都使用 audited_resource 资源类型。

如需查看完整列表,请转到受监控的资源类型

启用审核日志

系统在任何情况下都会启用管理员活动审核日志,无法停用。

数据访问审核日志默认处于停用状态,除非明确启用,否则无法向其中写入数据(BigQuery 数据访问审核日志是一个例外,无法停用)。

如需了解如何启用部分或全部数据访问审核日志,请参阅配置数据访问日志

配置数据访问审核日志可能会影响 Cloud Logging 中的日志价格。请参阅本页中的价格部分。

审核日志权限

Cloud Identity and Access Management 权限和角色决定您可以查看或导出哪些审核日志。日志位于项目以及组织、文件夹和结算帐号等一些其他实体中。如需了解详情,请参阅了解角色

如需查看管理员活动审核日志,您必须在审核日志所属的项目中拥有下列 IAM 角色之一:

  • Project OwnerProject EditorProject Viewer
  • Logging 的 Logs Viewer 角色。
  • 具有 logging.logEntries.list IAM 权限的 自定义 IAM 角色

如需查看数据访问审核日志,您必须在审核日志所属的项目中拥有以下某一角色:

如果您正在使用非项目实体(例如组织)的审核日志,请将项目角色更改为合适的组织角色。

查看日志

您可以使用以下选项来查看审核日志条目:

旧式日志查看器

您可以使用 Google Cloud Console 中的旧式日志查看器界面检索审核日志条目。

基本查看器

如要使用基本查看器,请执行以下操作:

  1. 在 Google Cloud Console 中,转到 日志记录 > 旧式日志查看器 页面。

    转到旧式日志查看器

  2. 在页面顶部选择一个现有 Google Cloud 项目,或者创建一个新项目。
  3. 在第一个下拉菜单中,选择您要查看其审核日志的资源类型。
  4. 在第二个下拉菜单中,选择您要查看的日志类型:activity 表示管理员活动审核日志,data_access 表示数据访问审核日志,system_events 表示系统事件审核日志。

    如果上述选项均未显示,则表示项目中没有该类型的审核日志。

如需详细了解旧式日志查看器,请参阅在旧式日志查看器中查看日志

高级查看器

如需使用高级查看器,请执行以下操作:

  1. 在 Google Cloud Console 中,转到 日志记录 > 旧式日志查看器 页面。

    转到旧式日志查看器

  2. 在页面顶部选择一个现有 Google Cloud 项目,或者创建一个新项目。
  3. 在第一个下拉菜单中,选择您要查看其审核日志的资源类型。
  4. 点击搜索查询框最右侧的下拉箭头,然后选择转换为高级过滤条件

  5. 您还可以创建一个查询,以进一步指定您要查看的日志条目。例如,如需检索项目中的所有审核日志,请复制以下查询,并将其粘贴到查询框中,然后点击运行查询。将 PROJECT_ID 替换为有效的项目 ID 名称。

    logName = ("projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    OR
    "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_events"
    OR
    "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

如需详细了解查询,请转到高级日志查询

日志浏览器

您可以使用 Google Cloud Console 中的日志浏览器界面检索审核日志条目。执行以下操作:

  1. 在 Google Cloud Console 中,转到 日志记录 > 旧式日志查看器 页面。

    转到旧式日志查看器

  2. 在页面顶部选择一个现有 Google Cloud 项目,或者创建一个新项目。
  3. 通过从资源日志名称严重程度下拉菜单中选择来构建查询,然后点击运行查询
  4. 您还可以创建一个查询,以进一步指定您要查看的日志条目。例如,如需检索项目中的所有审核日志,请复制以下查询,并将其粘贴到查询框中,然后点击运行查询。将 PROJECT_ID 替换为有效的项目 ID 名称。
    logName = ("projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    OR
    "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_events"
    OR
    "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

如需详细了解日志浏览器,请参阅 日志浏览器

如需详细了解查询,请转到高级日志查询

API

如需使用 Cloud Logging API 查看审核日志条目,请执行以下操作:

  1. 使用试用此 API 选项:
    1. 转到 entries.list 方法文档中的 试用此 API 部分。
    2. 将以下内容加入试用此 API 表单的请求正文部分。将 PROJECT_ID 替换为有效的项目 ID 名称。
      {
        "resourceNames": [
          "projects/PROJECT_ID"
        ],
        "pageSize": 5,
        "filter": "logName=(projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_events OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access)"
      }
    3. 点击执行
  2. 或者使用以下 curl 命令:
  3. curl "https://logging.googleapis.com/v2/entries:list" \
      -X POST \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer $TOKEN" \
      -d  \
      '{
          "resourceNames":["projects/PROJECT_ID"],
           "pageSize":5,
           "filter":"logName=(projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
           OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_events
           OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access)"
      }'
    

    按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

    下面显示了响应输出的示例。

    {
      "entries": [
        {
          "protoPayload": {
            "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
            "authenticationInfo": {
              "principalEmail": "system:serviceaccount:cert-manager:cert-manager-cainjector"
            },
            "authorizationInfo": [
              {
                "granted": true,
                "permission": "io.k8s.core.v1.configmaps.update",
                "resource": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core"
              }
            ],
            "methodName": "io.k8s.core.v1.configmaps.update",
            "requestMetadata": {
              "callerIp": "35.226.36.25",
              "callerSuppliedUserAgent": "cainjector/v0.0.0 (linux/amd64) kubernetes/$Format"
            },
            "resourceName": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core",
            "serviceName": "k8s.io",
            "status": {
              "code": 0
            }
          },
          "insertId": "f87d6dd2-c661-47f7-ad70-699cb322090d",
          "resource": {
            "type": "k8s_cluster",
            "labels": {
              "project_id": "apigee-eda-experiments",
              "cluster_name": "sautest",
              "location": "us-central1"
            }
          },
          "timestamp": "2020-02-04T21:05:29.792617Z",
          "labels": {
            "authorization.k8s.io/decision": "allow",
            "authorization.k8s.io/reason": "RBAC: allowed by RoleBinding \"cert-manager-cainjector:leaderelection/kube-system\" of Role \"cert-manager-cainjector:leaderelection\" to ServiceAccount \"cert-manager-cainjector/cert-manager\""
          },
          "logName": "projects/apigee-eda-experiments/logs/cloudaudit.googleapis.com%2Factivity",
          "operation": {
            "id": "f87d6dd2-c661-47f7-ad70-699cb322090d",
            "producer": "k8s.io",
            "first": true,
            "last": true
          },
          "receiveTimestamp": "2020-02-04T21:05:46.819543686Z"
        },
        {
          "protoPayload": {
            "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
            "authenticationInfo": {
              "principalEmail": "system:serviceaccount:cert-manager:cert-manager-cainjector"
            },
            "authorizationInfo": [
              {
                "granted": true,
                "permission": "io.k8s.core.v1.configmaps.update",
                "resource": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election"
              }
            ],
            "methodName": "io.k8s.core.v1.configmaps.update",
            "requestMetadata": {
              "callerIp": "35.226.36.25",
              "callerSuppliedUserAgent": "cainjector/v0.0.0 (linux/amd64) kubernetes/$Format"
            },
            "resourceName": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election",
            "serviceName": "k8s.io",
            "status": {
              "code": 0
            }
          },
          "insertId": "dffd916f-6b4d-464d-b0a2-3cc6c2b3f6c7",
          "resource": {
            "type": "k8s_cluster",
            "labels": {
              "location": "us-central1",
              "project_id": "apigee-eda-experiments",
              "cluster_name": "sautest"
            }
          },
          "timestamp": "2020-02-04T21:05:29.792689Z",
          "labels": {
            "authorization.k8s.io/reason": "RBAC: allowed by RoleBinding \"cert-manager-cainjector:leaderelection/kube-system\" of Role \"cert-manager-cainjector:leaderelection\" to ServiceAccount \"cert-manager-cainjector/cert-manager\"",
            "authorization.k8s.io/decision": "allow"
          },
          "logName": "projects/apigee-eda-experiments/logs/cloudaudit.googleapis.com%2Factivity",
          "operation": {
            "id": "dffd916f-6b4d-464d-b0a2-3cc6c2b3f6c7",
            "producer": "k8s.io",
            "first": true,
            "last": true
          },
          "receiveTimestamp": "2020-02-04T21:05:46.237944230Z"
        },
        {
          "protoPayload": {
            "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
            "authenticationInfo": {
              "principalEmail": "system:serviceaccount:apigee-system:default"
            },
            "authorizationInfo": [
              {
                "granted": true,
                "permission": "io.k8s.core.v1.configmaps.update",
                "resource": "core/v1/namespaces/apigee-system/configmaps/controller-leader-election-helper"
              }
            ],
            "methodName": "io.k8s.core.v1.configmaps.update",
            "requestMetadata": {
              "callerIp": "35.232.81.27",
              "callerSuppliedUserAgent": "manager/v0.0.0 (linux/amd64) kubernetes/$Format"
            },
            "resourceName": "core/v1/namespaces/apigee-system/configmaps/controller-leader-election-helper",
            "serviceName": "k8s.io",
            "status": {
              "code": 0
            }
          },
          "insertId": "79d6f436-c05d-4ecd-bbb8-908caf4515c3",
          "resource": {
            "type": "k8s_cluster",
            "labels": {
              "location": "us-central1",
              "project_id": "apigee-eda-experiments",
              "cluster_name": "russo"
            }
          },
          "timestamp": "2020-02-04T21:05:29.811603Z",
          "labels": {
            "authorization.k8s.io/decision": "allow",
            "authorization.k8s.io/reason": "RBAC: allowed by RoleBinding \"apigee-leader-election-rolebinding/apigee-system\" of Role \"apigee-leader-election-role\" to ServiceAccount \"default/apigee-system\""
          },
          "logName": "projects/apigee-eda-experiments/logs/cloudaudit.googleapis.com%2Factivity",
          "operation": {
            "id": "79d6f436-c05d-4ecd-bbb8-908caf4515c3",
            "producer": "k8s.io",
            "first": true,
            "last": true
          },
          "receiveTimestamp": "2020-02-04T21:05:34.526854453Z"
        },
        {
          "protoPayload": {
            "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
            "authenticationInfo": {
              "principalEmail": "system:serviceaccount:cert-manager:cert-manager-cainjector"
            },
            "authorizationInfo": [
              {
                "granted": true,
                "permission": "io.k8s.core.v1.configmaps.update",
                "resource": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election"
              }
            ],
            "methodName": "io.k8s.core.v1.configmaps.update",
            "requestMetadata": {
              "callerIp": "35.232.81.27",
              "callerSuppliedUserAgent": "cainjector/v0.0.0 (linux/amd64) kubernetes/$Format"
            },
            "resourceName": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election",
            "serviceName": "k8s.io",
            "status": {
              "code": 0
            }
          },
          "insertId": "56f901e3-dbc4-445a-82e4-69ff793927ca",
          "resource": {
            "type": "k8s_cluster",
            "labels": {
              "project_id": "apigee-eda-experiments",
              "cluster_name": "russo",
              "location": "us-central1"
            }
          },
          "timestamp": "2020-02-04T21:05:29.987492Z",
          "labels": {
            "authorization.k8s.io/reason": "RBAC: allowed by RoleBinding \"cert-manager-cainjector:leaderelection/kube-system\" of Role \"cert-manager-cainjector:leaderelection\" to ServiceAccount \"cert-manager-cainjector/cert-manager\"",
            "authorization.k8s.io/decision": "allow"
          },
          "logName": "projects/apigee-eda-experiments/logs/cloudaudit.googleapis.com%2Factivity",
          "operation": {
            "id": "56f901e3-dbc4-445a-82e4-69ff793927ca",
            "producer": "k8s.io",
            "first": true,
            "last": true
          },
          "receiveTimestamp": "2020-02-04T21:05:30.501196305Z"
        },
        {
          "protoPayload": {
            "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
            "authenticationInfo": {
              "principalEmail": "system:serviceaccount:cert-manager:cert-manager-cainjector"
            },
            "authorizationInfo": [
              {
                "granted": true,
                "permission": "io.k8s.core.v1.configmaps.update",
                "resource": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core"
              }
            ],
            "methodName": "io.k8s.core.v1.configmaps.update",
            "requestMetadata": {
              "callerIp": "35.232.81.27",
              "callerSuppliedUserAgent": "cainjector/v0.0.0 (linux/amd64) kubernetes/$Format"
            },
            "resourceName": "core/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core",
            "serviceName": "k8s.io",
            "status": {
              "code": 0
            }
          },
          "insertId": "b3a2926d-27e7-414c-afce-de104a4f6cce",
          "resource": {
            "type": "k8s_cluster",
            "labels": {
              "location": "us-central1",
              "cluster_name": "russo",
              "project_id": "apigee-eda-experiments"
            }
          },
          "timestamp": "2020-02-04T21:05:30.011159Z",
          "labels": {
            "authorization.k8s.io/reason": "RBAC: allowed by RoleBinding \"cert-manager-cainjector:leaderelection/kube-system\" of Role \"cert-manager-cainjector:leaderelection\" to ServiceAccount \"cert-manager-cainjector/cert-manager\"",
            "authorization.k8s.io/decision": "allow"
          },
          "logName": "projects/apigee-eda-experiments/logs/cloudaudit.googleapis.com%2Factivity",
          "operation": {
            "id": "b3a2926d-27e7-414c-afce-de104a4f6cce",
            "producer": "k8s.io",
            "first": true,
            "last": true
          },
          "receiveTimestamp": "2020-02-04T21:05:30.642048673Z"
        }
      ],
      "nextPageToken": "EAA43KyVlIDih_pdSoAIIjYiJwolYjNhMjkyNmQtMjdlNy00MTRjLWFmY2UtZGUxMDRhNGY2Y2NlACoLCJq55_EFENiLqQVKxQcKmQdKlgcA0C8gBg0KHKVKT9NI8-QwzATkKBOVymR2R8TBZkfOUGuODDzwuXqNpxcHRu6XC6rCnJ1FifaCeib8nQdWcEjvFOr2WRDBXjTGAV4KG2zn1FBrdDDl_jxWzSBIUIiuMr83AZD4PFYQSpDRdXSJ0XRIe_C1ZiduH231NvBqKf2q1NLqUg9s8okp0sxubdMPSh2NPdmzK_5O6A9wD2DdJN0ClepqsAxru6qrqn9_eyPSrEk9ri2k2LEdT3Vf_Dp-0puBoits_i3AR-_XVJ2i1jmW1fYpiWrXu3IsxwSyOIOep3BSlw6z6B5fQKMxY_e0DnhBF3uNUC-El377Bqg6x7tSu9lg8D8qSXDl77E_1MsqIHQIZJqAVAlOJNE3MW_uaa_gvpwQxGFJ45CtMhgVW8AKPsxZzkbZtBobE-2OlB85D77eb_Z4aTbHyBh0VfDFq9Wsp857UvMxpNZxUKQe233D952Hkca2HrMi4l52xC6USXAx9l9b8pOlB_t5pK8ILKfmyPCqlAtECChavcX0WbYT_9CDgz2wy_yFa_Agw6l6vEJhenyfnmuXY3BQE08C3TmmhHx4AYhI8n-ee2PtBD9OSHzRuRlHRSWrnnDHoAMHtNBL1Lg1-6UUPVs5ROW4BUV1RbW3ZA0oXSRd8XGWlNZKqL1ruj6rGk0EARRC380-63zFQ0hpeeVNDWLhzhmg_UuS-IAE0a9iK_0tjrr0UNMxX2oBNn5yXG9oUFx0sCwVGEBI5z6GyBl-x4-Ck6vWiS1gy1PPl81U5U03D5vFiKHA0t6BS9JHrgx72Fhez0x1LNMnOOk6zSED7-FSZMBa8ERNLYnF6fBxqQS0UG1qN0ZLtRwVwXrdKgDwGlG1s7Cgfr5WkUX9L-aNL9oe4f_FYO5DhZlynfos74ToUtCRcQBDtRHOYGx7cqUNvkcv66EO6pIiePPOjhzstfGNdVMwVyRebTZl9RD4qOPBRAc_uWEkIDpjdiBRDg9uGfofnv6BFTmPNpQ4L-cBy7kF-F-M-KipHif7qzDHzz8lUgHGfbeMdbcb7UBCvoCGA8SLAHUMLw_J2-ny9kWB1aglmJlSVeKyrgLwYLiR85gtOdNgcbuKfeI6yCpIEZNDsyYg_LLR8o98FzaO26MWfCbYFaU9l2z9d_Y4LI1GLoR6pCKzDXsvwgtgWcARoSUDfiJ6rRu9EzFiLIlS6dKcphQVlFPRsNTIDXv5WpMSHBoMCJm55_EFEJW5-asCIgwI_-vp8QUQ_5Pr3ANQ2Neh4Nn0uoSwAVIHCLv_29ORHWC-sv2mmrbe5fMBahsKDAiZ6aSCBhCxjsbNARIHCAIQ1IPULhgFIAA"
    }
    
如需详细了解查询,请转到 高级日志查询.

gcloud

如需使用 gcloud 命令行工具读取日志条目,请运行以下命令。将 PROJECT_ID 替换为有效的项目 ID 名称。

gcloud logging read "logName=(projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_events OR projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access)"

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

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

导出审核日志

您可以按照导出其他类型日志的方式导出审核日志。如需详细了解如何导出日志,请参阅日志导出概览。以下是用于导出审核日志的一些应用:

  • 如需长时间保留审核日志或使用更强大的搜索功能,您可以将审核日志的副本导出到 Cloud Storage、BigQuery 或 Pub/Sub。使用 Pub/Sub,您可以将内容导出到其他应用、其他代码库和第三方。
  • 如需管理整个组织范围内的审核日志,您可以创建一个汇总导出接收器,以便从组织中的任何项目或所有项目导出日志。
  • 如果启用的数据访问审核日志会导致项目超出其日志配额,您可以从 Logging 导出日志并排除数据访问审核日志。如需了解详情,请参阅日志排除项

价格

Cloud Logging 不会针对无法停用的审核日志(包括所有管理员活动审核日志)收费,

Cloud Logging 会针对您明确请求的数据访问审核日志向您收费。