在日志存储桶上配置日志视图

本文档介绍如何使用 gcloud CLI 在 Cloud Logging 存储分区上创建和管理日志视图。通过日志视图,您可以高级、精细地控制谁有权访问日志存储分区中的日志。

如需了解 Logging 存储模型的一般信息,请参阅路由和存储概览

日志视图简介

通过日志视图,您可以仅向用户授予对日志存储桶中存储的部分日志的访问权限。例如,设想一个您将组织的日志存储在中心项目中的场景。您可以为向日志存储桶提供日志的每个项目创建一个日志视图。然后,您可以授予每个用户对一个或多个日志视图的访问权限,从而限制用户可以查看哪些日志。

Cloud Logging 会自动为每个日志存储桶创建一个 _AllLogs 视图,并为 _Default 日志存储桶创建一个 _Default 视图:

  • _AllLogs 视图:您可以查看日志存储桶中的所有日志。
  • _Default 视图:您可以在日志存储桶中查看所有非数据访问审核日志。

您无法修改 Cloud Logging 自动创建的视图;但是,您可以删除 _AllLogs 视图。

对于每个日志存储桶,您最多可为其创建 30 个日志视图。

每个日志视图都包含一个过滤条件,用于限制视图中显示的日志条目。过滤条件可以包含逻辑 ANDNOT 运算符,但不得包含逻辑 OR 运算符。过滤条件可以比较以下任何值:

  • 使用 source 函数的数据源。source 函数返回组织、文件夹和 Google Cloud 项目层次结构中特定资源的日志条目。

  • 使用 log_id 函数的日志 ID。log_id 函数返回与 logName 字段中的指定 LOG_ID 参数匹配的日志条目。

  • 使用 resource.type= FIELD_NAME 比较运算的有效资源类型。

例如,以下过滤条件从名为 myproject 的 Google Cloud 项目中捕获 Compute Engine stdout 日志条目:

source("projects/myproject") AND resource.type = "gce_instance" AND log_id("stdout")

如需详细了解过滤语法,请参阅比较

准备工作

在创建或更新日志视图之前,请完成以下步骤:

  1. 如果您尚未在相应的 Google Cloud 项目中创建 Logging 存储桶,请执行此操作,为其配置自定义日志视图。

  2. 如需获取创建、查看、更新和删除日志视图所需的权限,请让管理员授予您项目的 Logs Configuration Writer (roles/logging.configWriter) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  3. 安装 Google Cloud CLI

  4. 确定要在视图中包含的日志。您可以使用此信息指定日志视图的过滤条件

  5. 确定谁有权访问日志视图。具有 roles/logging.viewAccessor 角色的主账号可以在任何日志视图中查看日志。但是,Cloud Logging 支持 IAM 条件。通过设置条件,您可以授予主账号对特定日志视图的访问权限。如需了解详情,请参阅授予对日志视图的访问权限

创建日志视图

如需创建日志视图,请使用 gcloud logging views update 命令。对于每个日志存储桶,您最多可为其创建 30 个日志视图。

在使用下面的命令数据之前,请先进行以下替换:

  • VIEW_ID:日志视图的标识符。
  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。
  • FILTER:用于定义日志视图的过滤条件。如果留空,日志视图包含所有日志。例如,如需按 Compute Engine 虚拟机实例日志进行过滤,请输入 "resource.type=gce_instance"
  • DESCRIPTION:日志视图的说明。例如,您可以为说明 "Compute logs" 输入以下内容。

执行 gcloud logging views create 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows (PowerShell)

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows (cmd.exe)

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

此命令不会提供响应。如需确认更改,您可以运行 gcloud logging views list 命令。

列出日志存储桶上的日志视图

如需列出为日志存储桶创建的日志视图,请使用 gcloud logging views list 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。

执行 gcloud logging views list 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

Windows (PowerShell)

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

Windows (cmd.exe)

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

响应数据是日志视图列表。对于每个日志视图,系统都会显示过滤条件以及创建和上次更新日期。如果创建和更新日期为空,则日志视图是在创建 Google Cloud 项目时创建的。以下示例输出显示所查询的日志存储桶上的两个视图 ID:_AllLogscompute

VIEW_ID: _AllLogs
FILTER:
CREATE_TIME:
UPDATE_TIME:

VIEW_ID: compute
FILTER: resource.type="gce_instance"
CREATE_TIME: 2024-02-20T17:41:17.405162921Z
UPDATE_TIME: 2024-02-20T17:41:17.405162921Z

授予对日志视图的访问权限

对 Google Cloud 项目具有 roles/logging.viewAccessor 角色的主账号可以在任何日志视图中查看日志。但是,Cloud Logging 支持 IAM 条件。使用条件,您可以授予主账号对特定日志视图的访问权限。

IAM 条件是在 Google Cloud 项目的角色绑定中指定的。一项允许政策中,包含相同角色和同一主账号但条件表达式不同但最多不能超过 20 个角色绑定。

要将用户添加到视图以允许用户访问日志,请完成以下步骤。

gcloud

  1. 获取项目的 IAM 政策,并将其写入 JSON 格式的本地文件。在运行以下命令之前,请将 PROJECT_ID 替换为包含日志存储桶的项目的 ID:

    gcloud projects get-iam-policy PROJECT_ID --format json > output.json
    
  2. 修改您创建的 JSON 文件,并添加 IAM 条件,以允许用户从您创建的日志存储桶中读取数据。

    例如,以下示例指定一个绑定,用于向指定成员授予 "roles/logging.viewAccessor" 角色,但仅限于单个日志视图:

    {
      "bindings": [
        {
          "members": [
            "user:username@gmail.com"
          ],
          "role": "roles/logging.viewAccessor",
          "condition": {
              "title": "Bucket reader condition example",
              "description": "Grants logging.viewAccessor role to user username@gmail.com for the VIEW_ID log view.",
              "expression":
                "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
          }
        }
      ],
      "etag": "BwWd_6eERR4=",
      "version": 3
    }
  3. 更新 IAM 政策:

    gcloud projects set-iam-policy PROJECT_ID output.json
    

控制台

在您创建日志存储桶的项目中,执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 IAM

    前往 IAM

  2. 点击 授予访问权限

  3. 新的主账号字段中,添加用户的电子邮件帐号。

  4. 选择角色下拉菜单中,选择 Logs View Accessor

    此角色为用户提供所有视图的读取权限。如需限制用户对特定视图的访问权限,请根据资源名称添加条件。

    1. 点击添加 IAM 条件

    2. 输入条件的标题说明

    3. 条件类型下拉菜单中,选择资源 > 名称

    4. 运算符下拉菜单中,选择

    5. 字段中,输入日志视图的 ID,包括视图的完整路径。

      例如:

      projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID
    6. 点击保存以添加该条件。

  5. 点击保存以设置权限。

更新日志视图

如需更新或修改日志视图,请使用 gcloud logging views update 命令。如果您不知道数据视图 ID,请参阅列出日志视图

在使用下面的命令数据之前,请先进行以下替换:

  • VIEW_ID:日志视图的标识符。
  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。
  • FILTER:用于定义日志视图的过滤条件。如果留空,日志视图包含所有日志。例如,如需按 Compute Engine 虚拟机实例日志进行过滤,请输入 "resource.type=gce_instance"
  • DESCRIPTION:日志视图的说明。例如,您可以为说明 "New description for the log view" 输入以下内容。

执行 gcloud logging views update 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows (PowerShell)

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows (cmd.exe)

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

此命令不会提供响应。如需确认更改,您可以运行 gcloud logging views describe 命令。

删除日志视图

如需删除某个日志视图,请使用 gcloud logging views delete 命令。如果您不知道数据视图 ID,请参阅列出日志视图

在使用下面的命令数据之前,请先进行以下替换:

  • VIEW_ID:日志视图的标识符。
  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。

执行 gcloud logging views delete 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows (PowerShell)

gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows (cmd.exe)

gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

响应会确认删除。例如,下面显示了对删除名为 tester 的日志视图的响应:

Deleted [tester].

描述日志视图

如需检索有关日志视图的详细信息,请使用 gcloud logging views describe 命令。如果您不知道数据视图 ID,请参阅列出日志视图

在使用下面的命令数据之前,请先进行以下替换:

  • VIEW_ID:日志视图的标识符。
  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。

执行 gcloud logging views describe 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows (PowerShell)

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows (cmd.exe)

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

响应始终包含日志视图的说明和完全限定名称。如果过滤条件字段不为空,则过滤器还会包含过滤条件。以下是一个示例响应:

createTime: '2024-02-20T17:41:17.405162921Z'
filter: resource.type="gce_instance"
name: projects/my-project/locations/global/buckets/my-bucket/views/compute
updateTime: '2024-02-20T17:41:17.405162921Z'

查看与日志视图关联的日志

如需在日志视图中查看日志,请确保您拥有日志视图的 Logs View Accessor (roles/logging.viewAccessor) 角色:

  1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择 Logs Explorer

    前往 Logs Explorer

  2. 点击优化范围以显示优化范围面板。在这里,您可以选择要用于查看日志的日志存储桶和日志视图。

“优化范围”面板

如需了解详情,请参阅 Logs Explorer 文档。

后续步骤

配置字段级访问权限