本文档介绍了如何使用 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
视图。
日志视图过滤器
每个日志视图都包含一个过滤条件,用于确定该视图中显示哪些日志条目。过滤条件可以包含逻辑 AND
和 NOT
运算符;但不能包含逻辑 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")
如需详细了解过滤语法,请参阅比较。
准备工作
在创建或更新日志视图之前,请完成以下步骤:
如果您尚未创建,请在相应的 Google Cloud 项目中创建一个 Logging 存储桶,并为其配置自定义日志视图。
-
如需获得创建和管理日志视图以及授予对日志视图的访问权限所需的权限,请让您的管理员向您授予项目的以下 IAM 角色:
-
Logs Configuration Writer (
roles/logging.configWriter
) -
如需向项目添加角色绑定,请使用 Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
如需向日志视图添加角色绑定,请执行以下操作:Logging Admin (
roles/logging.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
Logs Configuration Writer (
-
In the Google Cloud console, 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.
确定要在视图中包含的日志。您可以使用这些信息指定日志视图的过滤条件。
确定哪些人应有权访问日志视图,以及您是想向日志视图的 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
创建包含条件的 JSON 或 YAML 文件。
例如,您可以创建一个名为
condition.yaml
的文件,其中包含以下内容:expression: "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\"" title: "My title" description: "My description"
可选:如需验证 JSON 或 yaml 文件的格式是否正确,请运行以下命令:
gcloud alpha iam policies lint-condition --condition-from-file=condition.yaml
通过调用
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 政策。
控制台
在创建日志存储桶的项目中,执行以下操作:
-
在 Google Cloud 控制台中,进入 IAM 页面:
如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。
点击
授予访问权限。在新主账号字段中,添加用户的电子邮件账号。
在选择角色下拉菜单中,选择 Logs View Accessor。
此角色为用户提供所有视图的读取权限。如需限制用户对特定视图的访问权限,请根据资源名称添加条件。
点击添加 IAM 条件。
输入条件的标题和说明。
在条件类型下拉菜单中,依次选择资源 > 名称。
在运算符下拉菜单中,选择 是。
在值字段中,输入日志视图的 ID,包括视图的完整路径。
例如:
projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID
点击保存以添加该条件。
点击保存以设置权限。
列出项目的角色绑定
如需列出 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 角色以及与这些角色关联的任何条件。
列出日志存储桶中的日志视图
如需列出为日志存储桶创建的日志视图,请使用 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,即 _AllLogs
和 compute
:
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
日志视图。
如需删除日志视图,请执行以下操作:
建议:检查您的 Google Cloud 项目,确保未引用日志视图。不妨考虑检查以下方面:
- 从已保存或共享的 Logs Explorer 或 Log Analytics 页面运行的查询。
- 自定义信息中心。
使用
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
) 角色:
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面。
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
在工具栏中,点击优化范围,点击日志视图,然后选择日志视图。
如需了解详情,请参阅 Logs Explorer 文档。
后续步骤
如需了解如何控制对日志条目中特定字段的访问权限,请参阅配置字段级访问权限。