使用 IAM 进行访问权限控制

本文档将介绍如何使用 Identity and Access Management (IAM) 角色和权限, 控制对 Cloud Storage 中日志数据的访问权限, Logging APILogs ExplorerGoogle Cloud CLI

概览

IAM 权限角色决定您是否有权访问日志 Logging API 中的数据, Logs ExplorerGoogle Cloud CLI

角色是一组权限的集合。您不能直接向主账号授予权限,而是需要向主账号授予角色。为主账号授予一个角色就是授予该角色包含的所有权限。您可以为同一位主账号授予多个角色。

如需在 Google Cloud 资源(例如 Google Cloud 项目、文件夹、存储桶或组织,则主账号必须具有 包含相应权限的 IAM 角色。

预定义角色

IAM 提供预定义角色,授予 并防止对其他 Google Cloud 资源的 资源。Google Cloud 创建和维护这些角色,并根据需要自动更新其权限,例如 Logging 添加新功能时。

下表列出了 Logging 的预定义角色。对于 该表会显示角色标题、说明 权限以及可授予角色的最低级别的资源类型。 您可以在 Google Cloud 项目级别授予预定义角色,也可以在 大多数情况下 Google Cloud 层次结构。 如需将日志查看器角色的作用域更紧密地限定为存储桶级,请使用 IAM Conditions 的资源特性

要获取所有 角色中包含的个别权限,请参阅 获取角色元数据

Role Permissions

(roles/logging.admin)

Provides all permissions necessary to use all features of Cloud Logging.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.copyLogEntries

logging.buckets.create

logging.buckets.delete

logging.buckets.get

logging.buckets.list

logging.buckets.undelete

logging.buckets.update

logging.exclusions.*

  • logging.exclusions.create
  • logging.exclusions.delete
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.exclusions.update

logging.fields.access

logging.links.*

  • logging.links.create
  • logging.links.delete
  • logging.links.get
  • logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logEntries.*

  • logging.logEntries.create
  • logging.logEntries.download
  • logging.logEntries.list
  • logging.logEntries.route

logging.logMetrics.*

  • logging.logMetrics.create
  • logging.logMetrics.delete
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logMetrics.update

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.*

  • logging.logs.delete
  • logging.logs.list

logging.notificationRules.*

  • logging.notificationRules.create
  • logging.notificationRules.delete
  • logging.notificationRules.get
  • logging.notificationRules.list
  • logging.notificationRules.update

logging.operations.*

  • logging.operations.cancel
  • logging.operations.get
  • logging.operations.list

logging.privateLogEntries.list

logging.queries.*

  • logging.queries.deleteShared
  • logging.queries.getShared
  • logging.queries.listShared
  • logging.queries.share
  • logging.queries.updateShared
  • logging.queries.usePrivate

logging.settings.*

  • logging.settings.get
  • logging.settings.update

logging.sinks.*

  • logging.sinks.create
  • logging.sinks.delete
  • logging.sinks.get
  • logging.sinks.list
  • logging.sinks.update

logging.usage.get

logging.views.*

  • logging.views.access
  • logging.views.create
  • logging.views.delete
  • logging.views.get
  • logging.views.getIamPolicy
  • logging.views.list
  • logging.views.listLogs
  • logging.views.listResourceKeys
  • logging.views.listResourceValues
  • logging.views.setIamPolicy
  • logging.views.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/logging.bucketWriter)

Ability to write logs to a log bucket.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.write

(roles/logging.configWriter)

Provides permissions to read and write the configurations of logs-based metrics and sinks for exporting logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.create

logging.buckets.delete

logging.buckets.get

logging.buckets.list

logging.buckets.undelete

logging.buckets.update

logging.exclusions.*

  • logging.exclusions.create
  • logging.exclusions.delete
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.exclusions.update

logging.links.*

  • logging.links.create
  • logging.links.delete
  • logging.links.get
  • logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logMetrics.*

  • logging.logMetrics.create
  • logging.logMetrics.delete
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logMetrics.update

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.list

logging.notificationRules.*

  • logging.notificationRules.create
  • logging.notificationRules.delete
  • logging.notificationRules.get
  • logging.notificationRules.list
  • logging.notificationRules.update

logging.operations.*

  • logging.operations.cancel
  • logging.operations.get
  • logging.operations.list

logging.settings.*

  • logging.settings.get
  • logging.settings.update

logging.sinks.*

  • logging.sinks.create
  • logging.sinks.delete
  • logging.sinks.get
  • logging.sinks.list
  • logging.sinks.update

logging.views.create

logging.views.delete

logging.views.get

logging.views.getIamPolicy

logging.views.list

logging.views.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/logging.fieldAccessor)

Ability to read restricted fields in a log bucket.

Lowest-level resources where you can grant this role:

  • Project

logging.fields.access

(roles/logging.linkViewer)

Ability to see links for a bucket.

logging.links.get

logging.links.list

(roles/logging.logWriter)

Provides the permissions to write log entries.

Lowest-level resources where you can grant this role:

  • Project

logging.logEntries.create

logging.logEntries.route

(roles/logging.privateLogViewer)

Provides permissions of the Logs Viewer role and in addition, provides read-only access to log entries in private logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.get

logging.buckets.list

logging.exclusions.get

logging.exclusions.list

logging.links.get

logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logEntries.list

logging.logMetrics.get

logging.logMetrics.list

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.list

logging.privateLogEntries.list

logging.queries.getShared

logging.queries.listShared

logging.queries.usePrivate

logging.sinks.get

logging.sinks.list

logging.usage.get

logging.views.access

logging.views.get

logging.views.list

resourcemanager.projects.get

(roles/logging.viewAccessor)

Ability to read logs in a view.

Lowest-level resources where you can grant this role:

  • Project

logging.logEntries.download

logging.views.access

logging.views.listLogs

logging.views.listResourceKeys

logging.views.listResourceValues

(roles/logging.viewer)

Provides access to view logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.get

logging.buckets.list

logging.exclusions.get

logging.exclusions.list

logging.links.get

logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logEntries.list

logging.logMetrics.get

logging.logMetrics.list

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.list

logging.operations.get

logging.operations.list

logging.queries.getShared

logging.queries.listShared

logging.queries.usePrivate

logging.sinks.get

logging.sinks.list

logging.usage.get

logging.views.get

logging.views.list

resourcemanager.projects.get

以下部分提供了更多信息来帮助您决定 哪些角色适用于您的主账号用例。

Logging 角色

  • 要允许用户在 Logging 中执行所有操作,请向该用户授予 Logging Admin (roles/logging.admin) 角色。

  • 允许用户创建和修改日志记录配置,例如 接收器、存储分区、数据视图、链接、基于日志的指标或排除项, Logs Configuration Writer (roles/logging.configWriter) 角色。

  • 如需允许用户读取 _Required_Default 存储分区中的日志, 使用日志浏览器,并使用 Log Analytics 页面, 授予以下角色之一:

    • 用于访问 _Required 存储桶中的所有日志,以及访问 针对 _Default 存储桶的 _Default 视图,授予 Logs Viewer (roles/logging.viewer) 角色。
    • 如需访问 _Required_Default 存储分区中的所有日志,请执行以下操作: 包括数据访问日志 授予 Private Logs Viewer (roles/logging.privateLogViewer) 角色。
  • 如需允许用户读取项目内所有日志视图中的日志,请授予该用户 项目的 roles/logging.viewAccessor 的 IAM 角色。

  • 如需允许用户仅读取特定日志视图中的日志,您有两个选择:

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

    • 向主账号授予以下 IAM 角色: 针对包含日志视图的项目的 roles/logging.viewAccessor 权限, 但需要在 IAM 条件 将授权范围限制为特定日志视图。

    如需了解如何创建日志视图和授予访问权限,请参阅 在日志存储桶上配置日志视图

  • 如需授予用户对受限 LogEntry 字段(如果有)的访问权限,请执行以下操作: 向指定的存储桶授予 Logs Field Accessor (roles/logging.fieldAccessor) 角色。 如需了解详情,请参阅 配置字段级访问权限

  • 如需允许用户使用 Logging API 写入日志,请授予 Logs Writer (roles/logging.logWriter) 角色。 此角色不授予查看权限。

  • 要让接收器的服务账号将日志路由到 其他 Google Cloud 项目,则向该服务账号授予 Logs Bucket Writer (roles/logging.bucketWriter) 角色。 有关向服务账号授予权限的说明,请参阅 设置目标位置权限

项目级角色

  • 如需授予对大多数 Google Cloud 服务的查看权限, 授予 Viewer (roles/viewer) 角色。

    此角色包含由 Logs Viewer (roles/logging.viewer) 角色。

  • 为了授予对大多数 Google Cloud 服务的编辑者访问权限, 授予 Editor (roles/editor) 角色。

    此角色包含由 Logs Viewer (roles/logging.viewer) 角色以及以下权限: 写入日志条目、删除日志以及创建基于日志的指标。不过, 此角色不允许用户创建 接收器,读取 _Default 存储桶中的数据访问审核日志, 或读取用户定义的日志存储分区中的日志。

  • 如需授予对大多数 Google Cloud 服务的完整访问权限, 授予 Owner (roles/owner) 角色。

正在授予角色

如需了解如何向主账号授予角色,请参阅 授予、更改和撤消访问权限

您可以为同一位用户授予多个角色。如需获取角色中包含的权限的列表,请参阅获取角色元数据

如果您正在尝试访问 Google Cloud 资源,但缺少必要的 请与列为 Owner 的主账号联系 资源。

自定义角色

要创建具备 Logging 权限的自定义角色,请执行以下操作:

如需详细了解自定义角色,请参阅了解 IAM 自定义角色

Google Cloud 控制台的权限

下表列出了使用日志浏览器所需的权限。

在下表中,a.b.{x,y} 表示 a.b.xa.b.y

控制台活动 所需权限
最小只读权限 logging.logEntries.list
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
resourcemanager.projects.get
添加查看数据访问审核日志的权限 添加logging.privateLogEntries.list
添加查看基于日志的指标的权限 添加 logging.logMetrics.{list, get}
添加查看接收器的权限 添加 logging.sinks.{list, get}
添加查看日志使用情况的权限 添加 logging.usage.get
添加排除日志的权限 添加 logging.exclusions.{list, create, get, update, delete}
添加使用接收器的权限 添加 logging.sinks.{list, create, get, update, delete}
添加创建基于日志的指标的权限 添加 logging.logMetrics.{list, create, get, update, delete}
添加使用已保存的不公开查询的功能 添加 logging.queries.{list, create, get, update, delete}
添加使用已保存的共享查询的功能 添加 logging.queries.{share, getShared, updateShared, deleteShared, listShared}
添加使用最近查询的权限 添加 logging.queries.{create, list}

命令行权限

gcloud logging 命令由 IAM 权限控制。

如需使用任何 gcloud logging 命令,主账号必须具有 serviceusage.services.use 权限。

主账号还必须具有 日志资源和用例。有关详情,请参阅 命令行界面权限

以下列表介绍了预定义角色和相应权限 (用于管理关联的 BigQuery 数据集):

前面列出的角色和权限仅适用于 Google Cloud Observability 页面,例如 Log Analytics 页面。 如果您使用 BigQuery 数据集管理,那么您可能需要单独的 BigQuery 角色和权限请参阅使用 IAM 进行访问权限控制 了解 BigQuery。

保存查询的权限

本部分介绍了预定义角色以及 保存、共享和使用查询日志浏览器日志分析页面中。使用私享 只有您可以看到的查询,以及使用共享的已保存查询 Google Cloud 项目的其他成员需要不同的权限:

  • 若要获得使用已保存的不公开查询所需的权限, 请让管理员向您授予 Logs Viewer (roles/logging.viewer) IAM 角色。

    此预定义角色包含 使用已保存的不公开查询所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    要使用不公开的已保存查询,您需要具备以下权限:

    • logging.queries.list
    • logging.queries.create
    • logging.queries.get
    • logging.queries.update
    • logging.queries.delete
  • 要获取创建、更新和删除共享查询所需的权限, 请让管理员向您授予 项目的 Logging Admin (roles/logging.admin) IAM 角色。

    此预定义角色包含 创建、更新和删除共享查询所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    如需创建、更新和删除共享查询,您需要具备以下权限:

    • logging.queries.share
    • logging.queries.updateShared
    • logging.queries.deleteShared
  • 要获取列出和获取共享查询所需的权限, 请让管理员向您授予 Logs Viewer (roles/logging.viewer) IAM 角色。

    此预定义角色包含 列出和获取共享查询所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    要列出并获取共享查询,您需要拥有以下权限:

    • logging.queries.listShared
    • logging.queries.getShared

路由日志的权限

了解如何在创建和管理接收器时设置访问权限控制 来路由日志,请参阅 设置目标位置权限

请注意,管理排除项过滤条件与配置接收器相集成。与管理接收器相关的所有权限(包括设置排除项过滤条件)都包含在 logging.sinks.* 权限中。创建包含管理排除项过滤器的权限的自定义角色时,请向角色添加 logging.sinks.* 权限,而不是 logging.exclusions.* 权限。

日志条目被路由到受支持的目标位置后,对日志副本的访问权限完全由目标的 IAM 权限和角色控制:Cloud Storage、BigQuery 或 Pub/Sub。

基于日志的指标的权限

下面简要介绍了主账号访问基于日志的指标所需的常见角色和权限:

  • Logs Configuration Writer (roles/logging.configWriter) 角色可让主账号列出、创建、获取 更新和删除基于日志的指标

  • Logs Viewer (roles/logging.viewer) 角色 包含查看现有指标的权限。具体来说,主账号 需要 logging.logMetrics.getlogging.logMetrics.list 权限 查看现有指标

  • Monitoring 查看者 (roles/monitoring.viewer) 角色包含读取权限 TimeSeries 数据。具体来说,主账号需要 monitoring.timeSeries.list 权限,用于读取时序数据。

  • Logging Admin (roles/logging.admin), Project Editor (roles/editor),以及 Project Owner (roles/owner) 角色 包含创建基于日志的指标的权限。具体而言, 主账号需要 logging.logMetrics.create 权限才能创建 基于日志的指标。

基于日志的提醒政策的权限

要创建和管理基于日志的提醒政策,主账号需要 以下 Logging 和 Monitoring 角色以及 权限:

  • 如需获取读取日志和管理 Logging 通知规则所需的权限, 请让管理员向您授予 项目的 Logging Admin (roles/logging.admin) IAM 角色。

    此预定义角色包含 读取日志和管理 Logging 通知规则所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    读取日志和管理 Logging 通知规则需要以下权限:

    • logging.queries.listShared
    • logging.queries.getShared
  • 如需获取管理基于日志的提醒政策及其通知渠道所需的权限, 请让管理员向您授予 项目的以下 IAM 角色:

    这些预定义角色包含 管理基于日志的提醒政策及其通知渠道所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    如需管理基于日志的提醒政策及其通知渠道,您需要拥有以下权限:

    • logging.queries.listShared
    • logging.queries.getShared
  • 如需获取在 Google Cloud CLI 中创建提醒政策所需的权限, 请让管理员向您授予 您的项目的 Service Usage Consumer (roles/serviceusage.serviceUsageConsumer) IAM 角色。

    此预定义角色包含 拥有在 Google Cloud CLI 中创建提醒政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    如需在 Google Cloud CLI 中创建提醒政策,您需要具备以下权限:

    • logging.queries.listShared
    • logging.queries.getShared

Logging 访问权限范围

访问权限范围是为 Compute Engine 虚拟机实例上的服务账号指定权限的旧版方法。

以下访问权限范围适用于 Logging API:

访问权限范围 授予的权限
https://www.googleapis.com/auth/logging.read roles/logging.viewer
https://www.googleapis.com/auth/logging.write roles/logging.logWriter
https://www.googleapis.com/auth/logging.admin 对 Logging API 的完整访问权限。
https://www.googleapis.com/auth/cloud-platform 对 Logging API 和其他所有已启用的 Google Cloud API 的完整访问权限。

如需了解如何使用此旧版方法设置服务账号的访问权限级别,请参阅服务账号权限