使用 IAM 进行访问权限控制

本文档介绍了如何使用 Identity and Access Management (IAM) 角色和权限来控制对 Logging API日志浏览器Google Cloud CLI 中日志数据的访问权限。

概览

IAM 权限角色决定了您能否在 Logging APILogs ExplorerGoogle Cloud CLI 中访问日志数据。

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

如需在 Google Cloud 资源(例如 Google Cloud 项目、文件夹、存储桶或组织)中使用 Logging,正文必须具有包含适当权限的 IAM 角色。

预定义角色

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

下表列出了 Logging 的预定义角色。对于每个角色,该表都会显示角色名称、说明、包含的权限以及可授予这些角色的最低级层资源类型。您可以在 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.createTagBinding

logging.buckets.delete

logging.buckets.deleteTagBinding

logging.buckets.get

logging.buckets.list

logging.buckets.listEffectiveTags

logging.buckets.listTagBindings

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.logScopes.*

  • logging.logScopes.create
  • logging.logScopes.delete
  • logging.logScopes.get
  • logging.logScopes.list
  • logging.logScopes.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.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.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

observability.scopes.get

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.createTagBinding

logging.buckets.delete

logging.buckets.deleteTagBinding

logging.buckets.get

logging.buckets.list

logging.buckets.listEffectiveTags

logging.buckets.listTagBindings

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.logScopes.*

  • logging.logScopes.create
  • logging.logScopes.delete
  • logging.logScopes.get
  • logging.logScopes.list
  • logging.logScopes.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.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.update

logging.views.create

logging.views.delete

logging.views.get

logging.views.getIamPolicy

logging.views.list

logging.views.update

observability.scopes.get

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

observability.scopes.get

resourcemanager.projects.get

(roles/logging.sqlAlertWriter)

Ability to write SQL Alerts.

logging.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.update

(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.logScopes.get

logging.logScopes.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

observability.scopes.get

resourcemanager.projects.get

以下部分提供了更多信息,可帮助您确定哪些角色适用于主账号的使用场景。

Logging 角色

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

  • 如需允许用户创建和修改日志记录配置,请授予 Logs Configuration Writer (roles/logging.configWriter) 角色。借助此角色,您可以创建或修改以下任一项:

    此角色不足以创建基于日志的指标基于日志的提醒政策。如需了解执行这些任务所需的角色,请参阅基于日志的指标的权限基于日志的提醒政策的权限

  • 如需允许用户读取 _Required_Default 存储分区中的日志,或使用 Logs ExplorerLog Analytics 页面,请授予以下角色之一:

    • 如需访问 _Required 存储桶中的所有日志,以及访问 _Default 存储桶上的 _Default 视图,请授予 Logs Viewer (roles/logging.viewer) 角色。
    • 如需访问 _Required_Default 存储分区中的所有日志(包括数据访问日志),请授予 Private Logs Viewer (roles/logging.privateLogViewer) 角色。
  • 如需允许用户读取项目中所有日志视图中的日志,请为其授予项目的 roles/logging.viewAccessor IAM 角色。

  • 如需让用户仅在特定日志视图中读取日志,您有两种方法可选:

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

    • 在包含日志视图的项目中向主账号授予 roles/logging.viewAccessor 的 IAM 角色,但附加一个 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 服务的访问权限,请授予“编辑者”(roles/editor) 角色。

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

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

正在授予角色

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

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

如果您尝试访问某个 Google Cloud 资源但缺少必要的权限,请与列为相应资源的 Owner 的主账号联系。

自定义角色

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

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

Cloud Logging 权限

下表列出了 Cloud Logging 的特定功能所需的部分权限。下表可帮助您确定使用日志浏览器等页面所需的权限。

在下表中,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.logEntries.{list, download}

您只需拥有以下其中一种权限,即可下载日志。必须在项目级授予具有下载日志权限的角色。如果在日志视图的 IAM 政策文件中授予了包含这些权限的角色,您将无法下载日志。

查看默认日志范围 observability.scopes.get
排除日志 logging.exclusions.{list, create, get, update, delete}

创建包含管理排除项过滤器的权限的自定义角色时,请向角色添加 logging.sinks.* 权限,而不是 logging.exclusions.* 权限。

创建和使用接收器 logging.sinks.{list, create, get, update, delete}

创建接收器时,您还必须向服务账号授予一个 IAM 角色,以便其将日志条目写入目标位置。如需了解详情,请参阅 设置目标位置权限

日志条目被路由到受支持的目标位置后,对日志条目的访问权限完全由目标位置的 IAM 权限和角色控制。

创建基于日志的提醒 请参阅创建和使用基于日志的提醒政策所需的角色
创建基于日志的指标 logging.logMetrics.{list, create, get, update, delete}

如需了解创建和使用基于日志的指标所需的其他 IAM 角色,请参阅创建和使用基于日志的指标所需的角色

保存和使用私有查询 logging.queries.usePrivate
logging.queries.{listShared,getShared}
保存和使用共享查询 logging.queries.{share, getShared, updateShared, deleteShared, listShared}
使用近期查询 logging.queries.{create, list}
设置和管理默认日志范围 observability.scopes.{get, update}

命令行的权限

gcloud logging 命令由 IAM 权限控制。

如需使用任何 gcloud logging 命令,正文必须拥有 serviceusage.services.use 权限。

正文还必须具有与日志的资源和使用场景相对应的 IAM 角色。如需了解详情,请参阅命令行界面权限

创建和使用基于日志的指标所需的角色

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

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

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

  • Monitoring Viewer (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 角色和权限:

  • 如需获得在“监控”中创建基于日志的提醒政策以及创建关联的日志记录通知规则所需的权限,请让管理员向您授予项目的以下 IAM 角色:

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

    这些预定义角色包含在 Monitoring 中创建基于日志的提醒政策以及创建关联的 Logging 通知规则所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    如需在 Monitoring 中创建基于日志的提醒政策并创建关联的 Logging 通知规则,您需要具备以下权限:

    • monitoring.alertPolicies.create
    • logging.notificationRules.create

    您也可以使用自定义角色或其他预定义角色来获取这些权限。

如果您在 Google Cloud CLI 中创建提醒政策,则还需要拥有以下角色或权限:

如果您的 Google Cloud 项目已具有通知渠道,则您可以将提醒政策配置为使用现有渠道,而无需任何其他角色或权限。不过,如果您需要为基于日志的提醒政策创建通知渠道,则需要具有以下角色或权限:

  • 如需获得为基于日志的提醒政策创建通知渠道所需的权限,请让您的管理员为您授予项目的 Monitoring NotificationChannel Editor (roles/monitoring.notificationChannelEditor) IAM 角色。

    此预定义角色包含 monitoring.notificationChannels.create 权限,该权限是针对基于日志的提醒政策创建通知渠道所必需的。

基于 SQL 的提醒政策的权限

基于 SQL 的提醒政策会评估针对一组日志条目中的数据运行的 SQL 查询的结果。如需了解创建和管理基于 SQL 的提醒政策所需的角色,请参阅使用提醒政策监控 SQL 查询结果中的开始前须知部分。

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 的完整访问权限。

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