VPC Service Controls 审核日志记录

本文档介绍 Cloud Audit Logs 中由 VPC Service Controls 创建的审核日志。

概览

Google Cloud 服务会写入审核日志,便于您了解在您的 Google Cloud 资源中“谁在何时何地执行了什么操作”。

Google Cloud 项目只包含直接属于 Google Cloud 项目的资源的审核日志。其他 Google Cloud 资源(例如文件夹、组织和结算账号)包含实体本身的审核日志。

如需大致了解 Cloud Audit Logs,请参阅 Cloud Audit Logs 概览。如需深入了解审核日志格式,请参阅了解审核日志

可用的审核日志

VPC Service Controls 提供以下类型的审核日志:

  • 政策拒绝审核日志

    识别用户或服务账号因违反安全政策而被拒绝访问的时间。政策拒绝审核日志中的服务名称和方法名称表示用户或服务账号被拒绝访问的资源名称。

    您无法停用政策拒绝审核日志。但是,您可以将以下内容添加到 _Default 接收器上的排除过滤条件,以排除政策拒绝审核日志:LOG_ID("cloudaudit.googleapis.com/policy")。您还可以为 Cloud Logging 停用 _Default 接收器,以防止日志路由到 _Default 存储桶。

如需查看审核日志类型的更完整说明,请参阅审核日志类型

审核的操作

下表汇总了与 VPC Service Controls 中的每种审核日志类型相对应的 API 操作:

审核日志类别 VPC Service Controls 方法
政策拒绝审核日志 支持与 VPC Service Controls 集成的服务的方法。

审核日志记录内容

每个审核日志记录包含的信息主要可分为两大类:关于原始调用的信息以及关于违反安全政策的信息。VPC Service Controls API 会填充其内容,如下所示:

审核日志字段 说明
serviceName 访问权限受服务边界限制的服务。向此服务发出的请求违反了 VPC Service Controls 检查,导致创建了此审核日志。
methodName 造成该记录中描述的安全政策违规的方法调用的名称。通常,methodName 是与 serviceName 字段中指定的 Google Cloud 服务关联的方法。
authenticationInfo.principalEmail 发出请求的用户或服务账号的电子邮件地址。
部分电子邮件地址可能会隐去。如需了解详情,请参阅审核日志中的调用方身份
resourceName 客户端原始请求中指定的 Google Cloud 资源。 resourceName 可以是项目、文件夹、组织或 Google Cloud 存储桶等资源。
requestMetadata.callerIp

调用方的 IP 地址。

如果调用源自互联网,则 requestMetadata.callerIp 是公共 IPv4 或 IPv6 地址。

如果调用源自 Compute Engine 虚拟机,则 requestMetadata.callerIp 是虚拟机 IP 地址。虚拟机 IP 地址可以是内部 IP 地址,也可以是外部 IP 地址。

如果调用源自 Google 的内部生产网络,则此字段中的值为 private。当调用从一项 Google Cloud 服务发送到另一项 Google Cloud 服务时,就会发生这种情况。

request_metadata.caller_network 调用方网络的名称。只有在影音平台主机项目与所访问资源所属的 Google Cloud 组织或项目属于同一组织或项目时,才会设置此值。如需了解详情,请参阅 VPC 网络
status 该记录中描述的操作的总体处理状态。
metadata 有关违反安全政策的信息。
metadata.resourceNames 记录中描述的涉及违反安全政策的资源的名称。
metadata.dryRun 审核日志用于试运行政策检查时布尔值为 True
metadata.vpcServiceControlsUniqueId 记录中所述 VPC Service Controls 违规行为的唯一标识符。
metadata.violationReason 违规的原因。例如,RESOURCE_NOT_IN_SAME_SERVICE_PERIMETER 表示正在访问的资源不属于同一个服务边界。
metadata.securityPolicyInfo 发生违规的服务边界的名称,以及边界所属的组织的唯一标识符。
metadata.egressViolations 由于请求受服务边界保护,并且目标资源在边界外,因此请求失败时通常会发生出站流量违规行为。来源可以是项目或 VPC 网络。
metadata.ingressViolations 违规类型。通常,如果请求尝试访问受服务边界保护的目标资源,则会发生此违规行为。来源可以是项目或 VPC 网络。此字段包含一个说明入站流量违规行为的结构。
metadata.accessLevels 组织内属于同一访问权限政策的所有匹配访问权限级别。这些访问权限级别可能未在违规的边界中指定,因此可能会导致 NO_MATCHING_ACCESS_LEVEL 违规。
metadata.intermediateServices 请求链中涉及的服务列表。对于用户发起的请求,此字段为空。
metadata.deviceState 启用设备政策时创建请求的设备的状态。此字段的默认值为 Unknown

审核日志格式

审核日志条目包含以下对象:

  • 日志条目本身,即类型为 LogEntry 的对象。以下是一些实用的字段:

    • logName 包含资源 ID 和审核日志类型。
    • resource 包含所审核操作的目标。
    • timeStamp 包含所审核操作的时间。
    • protoPayload 包含审核的信息。
  • 审核日志记录数据,即保存在日志条目的 protoPayload 字段中的 AuditLog 对象。

  • (可选)服务专属的审核信息,即服务专属对象。对于早期集成,此对象保存在 AuditLog 对象的 serviceData 字段中;之后的集成使用 metadata 字段。

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

日志名称

Cloud Audit Logs 日志名称包含资源标识符,指明了审核日志所属的 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
   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

服务名称

VPC Service Controls 审核日志使用与 VPC Service Controls 集成的服务的服务名称。

如需查看所有 Cloud Logging API 服务名称及其相应受监控的资源类型的列表,请参阅服务与资源的映射

资源类型

VPC Service Controls 审核日志使用与 VPC Service Controls 集成的服务所支持的资源类型。

如需查看所有 Cloud Logging 受监控资源类型和说明信息的完整列表,请参阅受监控的资源类型

调用方身份

调用方的 IP 地址保存在 AuditLog 对象的 RequestMetadata.caller_ip 字段中。Logging 可能会隐去某些调用方身份和 IP 地址。

如需了解在审核日志中隐去的信息,请参阅审核日志中的调用方身份

启用审核日志记录

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

权限和角色

IAM 权限和角色决定了您能否访问 Google Cloud 资源中的审核日志数据。

在决定哪些特定于 Logging 的权限和角色适用于您的使用场景时,请考虑以下因素:

  • Logs Viewer 角色 (roles/logging.viewer) 为您提供对管理员活动、政策拒绝和系统事件审核日志的只读权限。如果您只具有此角色,则无法查看 _Default 存储桶中的数据访问审核日志。

  • Private Logs Viewer 角色 ((roles/logging.privateLogViewer) 包含 roles/logging.viewer 具有的权限,以及读取 _Default 存储桶中的数据访问审核日志的权限。

    请注意,如果这些私密日志存储在用户定义的存储桶中,有权读取这些存储桶中的日志的任何用户都可以读取这些私密日志。如需详细了解日志存储桶,请参阅路由和存储概览

如需详细了解适用于审核日志数据的 IAM 权限和角色,请参阅使用 IAM 进行访问权限控制

查看日志

您可以查询所有审核日志,也可以按其审核日志名称来查询日志。审核日志名称包含您要查看其审核日志记录信息的 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. 点击执行

查询示例

如需使用下表中的示例查询,请完成以下步骤:

  1. 将查询表达式中的变量替换为您自己的项目信息,然后使用剪贴板图标 复制表达式。

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

    前往 Logs Explorer

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

  3. 启用显示查询以打开查询编辑器字段,然后将表达式粘贴到查询编辑器字段中:

    输入示例查询的查询编辑器。

  4. 点击运行查询查询结果窗格中会列出与您的查询匹配的日志。

如需查找 VPC Service Controls 的审核日志,请在 Logs Explorer 中使用以下查询:

查询说明 表达式
基于拒绝 ID 的违规详情
log_id("cloudaudit.googleapis.com/policy") severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID" 

UNIQUE_ID 替换为拒绝的唯一 ID。

IP 地址违规情况
log_id("cloudaudit.googleapis.com/policy")
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.requestMetadata.callerIp="IP_ADDRESS"

IP_ADDRESS 替换为调用方的 IP 地址。

服务违规情况
log_id("cloudaudit.googleapis.com/policy")
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.serviceName="SERVICE_NAME"

SERVICE_NAME 替换为受限服务的名称。

对边界进行的访问权限级别更改
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName="google.identity.accesscontextmanager.v1.AccessContextManager.UpdateServicePerimeter"
-protoPayload.metadata.previousState:"ACCESS_LEVEL"
protoPayload.request.servicePerimeter.status.accessLevels:"ACCESS_LEVEL"

ORGANIZATION_ID 替换为您的组织的数字 ID,将 ACCESS_LEVEL 替换为访问权限级别的唯一名称。

边界 CRUD 操作
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.name=~".*PERIMETER_NAME$"
PERIMETER_NAME 替换为边界的名称。
访问权限级别 CRUD 操作
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*AccessLevel"
protoPayload.request.accessLevel.name=~".*ACCESS_LEVEL$"
为入站规则创建和更新操作
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.status.ingressPolicies:"*"
为出站规则创建和更新操作
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.status.egressPolicies:"*"

路由审核日志

您可以将审核日志路由到受支持的目标位置,方式与路由其他类型的日志相同。以下是您可能需要路由审核日志的一些原因:

  • 如需长时间保留审核日志或使用更强大的搜索功能,您可以将审核日志的副本路由到 Cloud Storage、BigQuery 或 Pub/Sub。您可以使用 Pub/Sub 将内容路由到其他应用、其他代码库和第三方工具。

  • 如需管理整个组织范围内与您相关的审核日志,您可以创建一个汇总接收器,以便从组织中的任意或所有 Google Cloud 项目路由日志。

如需了解如何路由日志,请参阅将日志路由到支持的目的地

价格

如需详细了解价格,请参阅 Cloud Logging 价格摘要