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

本文档介绍了如何在 Google Cloud 控制台中创建和管理 日志浏览量 使用 gcloud CLI 管理 Cloud Logging 存储分区。 日志视图让你可以 谁有权访问您的日志存储分区中的日志。

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

日志视图简介

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

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

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

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

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

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

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

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

  • 向主账号授予以下 IAM 角色: 针对包含日志视图的项目的 roles/logging.viewAccessor 权限, 但需要在 IAM 条件 将授权范围限制为特定日志视图。如果您省略 条件,您就可以向主账号授予对所有日志视图的访问权限。 您最多只能创建 20 个 政策文件中的角色绑定 角色和主账号相同,但条件表达式不同。

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

自动创建的日志视图

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

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

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

日志视图过滤条件

每个日志视图都包含一个过滤条件,用于确定该视图中显示哪些日志条目。过滤条件可以包含逻辑 ANDNOT 运算符;但不能包含逻辑 OR 运算符。过滤条件可以比较以下任一值:

例如,以下过滤器会捕获名为 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 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 命令。

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

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

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

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

  • 您可以使用 存储日志存储桶的 Google Cloud 项目,以及 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 项目中,请完成以下步骤。

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. 更新 Google Cloud 项目的 IAM 政策,方法是 调用 gcloud projects add-iam-policy-binding 方法。

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

    • 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. 选择角色下拉菜单中,选择日志查看访问者

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

    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 项目,确保日志视图 。请考虑检查以下内容:

    • 日志浏览器日志分析页面运行的查询 保存或共享的文件。
    • 自定义信息中心。
  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'

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

如需在日志视图中查看日志,请确保您拥有 日志视图访问器 (roles/logging.viewAccessor) 角色:

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

    前往 Logs Explorer

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

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

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

后续步骤

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