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

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

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

日志视图简介

借助日志视图,您可以向用户授予对日志存储桶中部分日志的访问权限。例如,考虑这样一个场景,您在一个中央项目中存储组织的日志。您可以为向日志存储桶提供日志的每个项目创建一个日志视图。然后,您可以向每位用户授予对一个或多个日志视图的访问权限,从而限制用户可以查看哪些日志。

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

控制对日志视图的访问权限

Cloud Logging 使用 IAM 政策来控制哪些人有权访问日志视图。IAM 政策可在资源、项目、文件夹和组织级别存在。对于 Cloud Logging,您可以为每个日志视图创建 IAM 政策。为了确定主账号是否有权执行操作,IAM 会评估所有适用的政策,其中第一次评估是在资源级别进行的。

在 Google Cloud 项目中具有 roles/logging.viewAccessor 角色的主账号可以访问项目中任何日志存储桶中的视图和日志。

如需向主账号授予仅对特定日志视图的访问权限,请执行以下操作之一:

  • 为日志视图创建 IAM 政策,然后向该政策添加 IAM 绑定,以向主账号授予对日志视图的访问权限。

    如果您要创建大量日志视图,我们建议您采用这种方法。

  • 在包含日志视图的项目中向主账号授予 roles/logging.viewAccessor 的 IAM 角色,但附加一个 IAM 条件,以将授予权限限制为特定日志视图。如果您省略条件,则会向主账号授予对所有日志视图的访问权限。Google Cloud 项目的政策文件中,包含同一角色和同一主账号但条件表达式不同的角色绑定数不得超过 20 个。

如需了解详情,请参阅本文档中标题为授予对日志视图的访问权限的部分。

自动创建的日志视图

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

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

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

日志视图过滤器

每个日志视图都包含一个过滤条件,用于确定该视图中显示哪些日志条目。过滤条件可以包含逻辑 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. 如需获得创建和管理日志视图以及授予对日志视图的访问权限所需的权限,请让您的管理员向您授予项目的以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

  3. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

  5. 确定哪些人应有权访问日志视图,以及您是想向日志视图的 IAM 政策还是 Google Cloud 项目添加绑定。如需了解详情,请参阅控制对日志视图的访问权限

创建日志视图

如需创建日志视图,请使用 gcloud logging views create 命令。对于每个日志存储桶,您最多可为其创建 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 命令。

接下来,向主账号授予对日志视图的访问权限。

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

如需将主账号限制为只能查看用户定义的日志存储桶中的特定日志视图,您可以采用以下两种方法:

  • 您可以使用日志视图的 IAM 政策文件。

  • 您可以使用存储日志存储桶的 Google Cloud 项目的 IAM 政策文件,以及 IAM 条件。

创建大量日志视图时,我们建议您使用日志视图的 IAM 政策文件来控制访问权限。

日志视图:添加角色绑定

本部分介绍了如何使用日志视图的 IAM 政策文件来控制哪些用户有权访问该日志视图中的日志条目。使用此方法时,您需要向日志视图的政策文件添加绑定,该绑定会向指定的主账号授予对日志视图的访问权限。

本部分还介绍了如何为日志视图列出 IAM 政策文件中包含的角色绑定。

向日志视图添加角色绑定

如需更新日志视图的 IAM 政策文件,请完成以下步骤。

gcloud

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

  • VIEW_ID:日志视图的标识符。
  • PRINCIPAL:您要授予该角色的主账号的标识符。主账号标识符通常采用以下格式:PRINCIPAL-TYPE:ID。例如 user:my-user@example.com。 如需查看 PRINCIPAL 可采用的格式的完整列表,请参阅主账号标识符
  • BUCKET_NAME:日志存储桶的名称。
  • LOCATION:日志存储桶的位置。

执行 gcloud logging views add-iam-policy-binding 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

Windows (PowerShell)

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

Windows (cmd.exe)

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

下面说明了添加单个绑定时的响应:

Updated IAM policy for logging view [projects/PROJECT_ID/locations/global/buckets/BUCKET_NAME/views/VIEW_ID].
bindings:
- members:
  - PRINCIPAL
  role: roles/logging.viewAccessor
etag: BwYXfSd9-Gw=
version: 1

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。 如需了解详情,请参阅 Terraform 提供程序参考文档

如需使用 Terraform 为日志视图预配 IAM 关联,可以使用几种不同的资源:

  • google_logging_log_view_iam_policy
  • google_logging_log_view_iam_binding
  • google_logging_log_view_iam_member

如需了解详情,请参阅 Cloud Logging LogView 的 IAM 政策

控制台

不受支持。如需向日志视图添加绑定,请使用 Google Cloud CLI。

列出日志视图中的角色绑定

如需列出日志视图的 IAM 绑定,请完成以下步骤。

gcloud

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

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

执行 gcloud logging views get-iam-policy 命令:

Linux、macOS 或 Cloud Shell

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

Windows (PowerShell)

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

Windows (cmd.exe)

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

如果日志视图不包含任何绑定,则响应仅包含 etag 字段。下面说明了日志视图包含单个绑定时的响应:

bindings:
- members:
  - PRINCIPAL
  role: roles/logging.viewAccessor
etag: BwYXfSd9-Gw=
version: 1

Terraform

如需使用 Terraform 列出日志视图的 IAM 关联,请使用数据源 google_logging_log_view_iam_policy

控制台

不受支持。如需列出日志视图的绑定,请使用 Google Cloud CLI。

Google Cloud 项目:添加角色绑定

本部分介绍了如何向 Google Cloud 项目添加角色绑定,以及如何列出与项目关联的绑定。使用此方法时,若要限制某个主账号对存储在特定日志视图中的日志条目的访问权限,您必须向授予中添加 IAM 条件。

向项目添加角色绑定

如需向 Google Cloud 项目的 IAM 政策文件添加角色绑定,请完成以下步骤。

gcloud

  1. 创建包含条件的 JSON 或 YAML 文件。

    例如,您可以创建一个名为 condition.yaml 的文件,其中包含以下内容:

    expression: "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
    title: "My title"
    description: "My description"
    
  2. 可选:如需验证 JSON 或 yaml 文件的格式是否正确,请运行以下命令:

    gcloud alpha iam policies lint-condition --condition-from-file=condition.yaml
    
  3. 通过调用 gcloud projects add-iam-policy-binding 方法更新 Google Cloud 项目的 IAM 政策。

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

    • PROJECT_ID:项目的标识符。
    • PRINCIPAL:您要授予该角色的主账号的标识符。主账号标识符通常采用以下格式:PRINCIPAL-TYPE:ID。例如 user:my-user@example.com。 如需查看 PRINCIPAL 可采用的格式的完整列表,请参阅主账号标识符

    执行 gcloud projects add-iam-policy-binding 命令:

    gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --condition-from-file=condition.yaml
    

    对上述命令的响应包含所有角色绑定。

    - condition:
        description: My description
        expression: resource.name == "projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID"
        title: My title
      members:
      - PRINCIPAL
      role: roles/logging.viewAccessor
    

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。 如需了解详情,请参阅 Terraform 提供程序参考文档

如需使用 Terraform 为项目预配 IAM 关联,可以使用几种不同的资源:

  • google_project_iam_policy
  • google_project_iam_binding
  • google_project_iam_member

如需了解详情,请参阅适用于项目的 IAM 政策

控制台

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

  1. 在 Google Cloud 控制台中,进入 IAM 页面:

    前往 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. 点击保存以设置权限。

列出项目的角色绑定

如需列出 Google Cloud 项目中的角色绑定,请完成以下步骤。

gcloud

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

  • PROJECT_ID:项目的标识符。

执行 gcloud projects get-iam-policy 命令:

gcloud projects get-iam-policy PROJECT_ID

对上述命令的响应包含所有角色绑定。

- condition:
    description: My description
    expression: resource.name == "projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID"
    title: My title
  members:
  - PRINCIPAL
  role: roles/logging.viewAccessor

Terraform

如需使用 Terraform 列出项目的 IAM 关联,请使用数据源 google_project_iam_policy

控制台

在 Google Cloud 控制台中,进入 IAM 页面:

前往 IAM

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

IAM 页面会列出所有主账号、其 IAM 角色以及与这些角色关联的任何条件。

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

如需列出为日志存储桶创建的日志视图,请使用 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

更新日志视图

如需更新或修改日志视图,请使用 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 命令。

删除日志视图

如果您不再需要自己创建的日志视图,可以将其删除。不过,在删除日志视图之前,我们建议您先验证该日志视图是否未被其他资源(例如已保存的查询)引用。

您无法删除 _Default 日志存储桶中的 _Default 日志视图。

如需删除日志视图,请执行以下操作:

  1. 建议:检查您的 Google Cloud 项目,确保未引用日志视图。不妨考虑检查以下方面:

    • 从已保存或共享的 Logs ExplorerLog Analytics 页面运行的查询。
    • 自定义信息中心。
  2. 使用 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 控制台中,转到 Logs Explorer 页面。

    前往 Logs Explorer

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

  2. 在工具栏中,点击优化范围,点击日志视图,然后选择日志视图。

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

后续步骤

如需了解如何控制对日志条目中特定字段的访问权限,请参阅配置字段级访问权限