使用 IAM 控制 Bigtable 访问权限控制

本页面介绍了 Bigtable 中的访问权限控制选项。

概览

Bigtable 使用 Identity and Access Management (IAM) 进行访问权限控制。您可以针对资源设置 IAM 政策,以控制谁对哪些资源具有什么访问权限。

Bigtable 资源按层次结构进行组织。Google Cloud 项目是 Bigtable 实例的父级,而该实例是其集群和表的父级。表是其授权视图的父级,而集群是其备份的父级。您可以在每个级别配置访问权限控制。

如果您在某个级别拥有权限,则系统会自动拥有该级别以下的权限。例如,如果您拥有项目级访问权限,则有权访问该项目中的实例、集群、表和已获授权的视图。如果您有权访问某个已获授权的视图,则不会自动获得对该授权视图的父级的更高级资源(例如表和实例)的访问权限。这种行为称为政策沿用

如需详细了解 IAM 层次结构,请参阅 IAM 政策继承

以下是在项目级别使用访问权限控制的一些示例:

  • 允许用户从项目内的任何表中读取数据,但不允许他们写入数据。
  • 允许用户从项目内的任何表中读取数据以及向表中写入数据,但不允许他们管理实例。
  • 允许用户从项目内的任何表中读取数据以及向表中写入数据,并且允许他们管理实例。

以下示例展示了如何在实例级别使用访问权限控制:

  • 允许用户从具有多个实例的项目中仅读取一个实例中任何表的数据。
  • 允许用户仅管理具有多个实例的项目中的一个实例。

以下示例展示了如何在表级别使用访问权限控制:

  • 允许用户向表中写入数据,但不允许其从表中读取数据。
  • 允许用户从表中读取内容,但不允许其向表中写入数据。

以下是在 backup 级别使用访问权限控制的示例:

  • 防止用户删除备份。
  • 防止用户使用备份进行恢复。

已获授权的视图级别使用访问权限控制的示例包括:

  • 允许用户读取已获授权的视图,但不能修改该视图。
  • 允许用户仅查看来自一个表的多个授权视图之一的数据。

如需详细了解 IAM 及其功能,请参阅 IAM 开发者指南。尤其是授予、更改和撤消访问权限部分。

在 Bigtable 中,您无法向以下主账号类型授予访问权限:

有关 Bigtable 支持的权限和角色的列表,请参阅以下各部分。

启用 Bigtable API

如需查看和分配 Bigtable IAM 角色,您必须为项目启用 Bigtable API。在启用该 API 之前,您无法在 Google Cloud 控制台中查看 Bigtable 角色。

启用 API

权限

本部分总结了 Bigtable 支持的权限。

权限允许用户对 Bigtable 资源执行特定操作。例如,拥有 bigtable.instances.list 权限的用户可以列出项目中的所有 Bigtable 实例。您不能直接向用户授予权限;不过,您可以为每个用户分配预定义角色自定义角色,这些角色会向用户授予一项或多项权限。

下表列出了与 Bigtable 关联的 IAM 权限:

应用配置文件权限名称 说明
bigtable.appProfiles.create 创建 Bigtable 应用配置文件。
bigtable.appProfiles.delete 删除 Bigtable 应用配置文件。
bigtable.appProfiles.get 获取有关 Bigtable 应用配置文件的信息。
bigtable.appProfiles.list 列出实例的 Bigtable 应用配置文件。
bigtable.appProfiles.update 更新 Bigtable 应用配置文件的设置。
备份权限名称 说明
bigtable.backups.create 创建 Bigtable 备份。
bigtable.backups.delete 删除 Bigtable 备份。
bigtable.backups.get 获取有关 Bigtable 备份的信息。
bigtable.backups.getIamPolicy 读取备份的访问权限控制列表 (ACL)。以 IAM 政策的形式返回。
bigtable.backups.list 列出 Bigtable 备份。
bigtable.backups.restore 使用 Bigtable 备份进行恢复。
bigtable.backups.testIamPermissions 获取对指定备份的调用方权限。
bigtable.backups.read 从 Bigtable 备份中读取。
bigtable.backups.setIamPolicy 更新备份 ACL。
bigtable.backups.update 修改 Bigtable 备份的到期时间。
集群权限名称 说明
bigtable.clusters.create 创建 Bigtable 集群。
bigtable.clusters.delete 删除 Bigtable 集群。
bigtable.clusters.get 获取有关 Bigtable 集群的信息。
bigtable.clusters.list 列出实例的 Bigtable 集群。
bigtable.clusters.update 更新 Bigtable 集群的设置。
热门平板电脑权限名称 说明
bigtable.hotTablets.list 列出集群的热片。
实例权限名称 说明
bigtable.instances.create 创建 Bigtable 实例。
bigtable.instances.createTagBinding 创建标记。
bigtable.instances.delete 删除 Bigtable 实例。
bigtable.instances.deleteTagBinding 删除标记。
bigtable.instances.get 获取有关 Bigtable 实例的信息。
bigtable.instances.getIamPolicy 读取实例访问控制列表 (ACL)以 IAM 政策的形式返回。
bigtable.instances.list 列出项目的 Bigtable 实例。
bigtable.instances.listEffectiveTagBindings 列出实例的所有有效标记。
bigtable.instances.listTagBindings 列出实例的标记。
bigtable.instances.ping 发送频道准备请求。
bigtable.instances.setIamPolicy 更新 ACL。
bigtable.instances.update 更新 Bigtable 实例的设置。
Key Visualizer 权限名称 说明
bigtable.keyvisualizer.get 获取有关表的 Key Visualizer 的信息,包括有关访问模式和行键分布的元数据。
bigtable.keyvisualizer.list 列出表的可用 Key Visualizer 信息。
位置权限名称 说明
bigtable.locations.list 列出 Bigtable 位置。
表权限名称 说明
bigtable.tables.checkConsistency 检查复制表是否是最新的。
bigtable.tables.create 创建表。
bigtable.tables.delete 删除表。
bigtable.tables.generateConsistencyToken 生成令牌以检查复制表是否是最新的。
bigtable.tables.get 获取有关表的信息,包括列族及其各自的设置。
bigtable.tables.getIamPolicy 读取表 ACL。以 IAM 政策的形式返回。
bigtable.tables.list 列出实例中的表。
bigtable.tables.mutateRows 修改表中的行,或截断表。
bigtable.tables.readRows 从表中读取行。这包括有关该表的信息,例如列族及其各自的设置。
bigtable.tables.sampleRowKeys 获取表中使用的行键示例。
bigtable.tables.setIamPolicy 更新表 ACL。
bigtable.tables.undelete 恢复已删除的表。
bigtable.tables.update 更新表的设置,包括列族及其各自的设置。
位置权限名称 说明
bigtable.locations.list 列出 Bigtable 位置。
已获授权的查看权限名称 说明
bigtable.authorizedViews.create 创建已获授权的视图。
bigtable.authorizedViews.delete 删除已获授权的视图。
bigtable.authorizedViews.get 获取有关授权视图的信息。
bigtable.authorizedViews.getIamPolicy 对已获授权的视图的查看访问权限控制。以 IAM 政策的形式返回。
bigtable.authorizedViews.list 在表中列出已获授权的视图。
bigtable.authorizedViews.mutateRows 修改授权视图中的行。
bigtable.authorizedViews.readRows 从已获授权的视图中读取行。
bigtable.authorizedViews.sampleRowKeys 获取授权视图中使用的行键示例。
bigtable.authorizedViews.setIamPolicy 更新授权视图的访问权限控制政策。
bigtable.authorizedViews.update 更新已获授权的视图的设置。

预定义角色

每个预定义角色都包括一项或多项权限。例如,roles/bigtable.reader 提供对 Bigtable 实例、集群、表和列族的相关信息以及表中所含数据的只读权限。您将角色分配给用户或组,这些角色允许他们对项目中的资源执行操作。

下表列出了 Bigtable 的预定义角色,包括与每个角色关联的权限列表:

Role Permissions

(roles/bigtable.admin)

Administers all Bigtable instances within a project, including the data stored within tables. Can create new instances. Intended for project administrators.

Lowest-level resources where you can grant this role:

  • Table

bigtable.*

  • bigtable.appProfiles.create
  • bigtable.appProfiles.delete
  • bigtable.appProfiles.get
  • bigtable.appProfiles.list
  • bigtable.appProfiles.update
  • bigtable.authorizedViews.create
  • bigtable.authorizedViews.createTagBinding
  • bigtable.authorizedViews.delete
  • bigtable.authorizedViews.deleteTagBinding
  • bigtable.authorizedViews.get
  • bigtable.authorizedViews.getIamPolicy
  • bigtable.authorizedViews.list
  • bigtable.authorizedViews.listEffectiveTags
  • bigtable.authorizedViews.listTagBindings
  • bigtable.authorizedViews.mutateRows
  • bigtable.authorizedViews.readRows
  • bigtable.authorizedViews.sampleRowKeys
  • bigtable.authorizedViews.setIamPolicy
  • bigtable.authorizedViews.update
  • bigtable.backups.create
  • bigtable.backups.delete
  • bigtable.backups.get
  • bigtable.backups.getIamPolicy
  • bigtable.backups.list
  • bigtable.backups.read
  • bigtable.backups.restore
  • bigtable.backups.setIamPolicy
  • bigtable.backups.update
  • bigtable.clusters.create
  • bigtable.clusters.delete
  • bigtable.clusters.get
  • bigtable.clusters.list
  • bigtable.clusters.update
  • bigtable.hotTablets.list
  • bigtable.instances.create
  • bigtable.instances.createTagBinding
  • bigtable.instances.delete
  • bigtable.instances.deleteTagBinding
  • bigtable.instances.get
  • bigtable.instances.getIamPolicy
  • bigtable.instances.list
  • bigtable.instances.listEffectiveTags
  • bigtable.instances.listTagBindings
  • bigtable.instances.ping
  • bigtable.instances.setIamPolicy
  • bigtable.instances.update
  • bigtable.keyvisualizer.get
  • bigtable.keyvisualizer.list
  • bigtable.locations.list
  • bigtable.tables.checkConsistency
  • bigtable.tables.create
  • bigtable.tables.delete
  • bigtable.tables.generateConsistencyToken
  • bigtable.tables.get
  • bigtable.tables.getIamPolicy
  • bigtable.tables.list
  • bigtable.tables.mutateRows
  • bigtable.tables.readRows
  • bigtable.tables.sampleRowKeys
  • bigtable.tables.setIamPolicy
  • bigtable.tables.undelete
  • bigtable.tables.update

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.timeSeries.*

  • monitoring.timeSeries.create
  • monitoring.timeSeries.list

resourcemanager.projects.get

(roles/bigtable.reader)

Provides read-only access to the data stored within Bigtable tables. Intended for data scientists, dashboard generators, and other data-analysis scenarios.

Lowest-level resources where you can grant this role:

  • Table

bigtable.appProfiles.get

bigtable.appProfiles.list

bigtable.authorizedViews.get

bigtable.authorizedViews.list

bigtable.authorizedViews.readRows

bigtable.authorizedViews.sampleRowKeys

bigtable.backups.get

bigtable.backups.list

bigtable.clusters.get

bigtable.clusters.list

bigtable.hotTablets.list

bigtable.instances.get

bigtable.instances.list

bigtable.instances.ping

bigtable.keyvisualizer.*

  • bigtable.keyvisualizer.get
  • bigtable.keyvisualizer.list

bigtable.locations.list

bigtable.tables.checkConsistency

bigtable.tables.generateConsistencyToken

bigtable.tables.get

bigtable.tables.list

bigtable.tables.readRows

bigtable.tables.sampleRowKeys

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.timeSeries.*

  • monitoring.timeSeries.create
  • monitoring.timeSeries.list

resourcemanager.projects.get

(roles/bigtable.user)

Provides read-write access to the data stored within Bigtable tables. Intended for application developers or service accounts.

Lowest-level resources where you can grant this role:

  • Table

bigtable.appProfiles.get

bigtable.appProfiles.list

bigtable.authorizedViews.get

bigtable.authorizedViews.list

bigtable.authorizedViews.mutateRows

bigtable.authorizedViews.readRows

bigtable.authorizedViews.sampleRowKeys

bigtable.backups.get

bigtable.backups.list

bigtable.clusters.get

bigtable.clusters.list

bigtable.hotTablets.list

bigtable.instances.get

bigtable.instances.list

bigtable.instances.ping

bigtable.keyvisualizer.*

  • bigtable.keyvisualizer.get
  • bigtable.keyvisualizer.list

bigtable.locations.list

bigtable.tables.checkConsistency

bigtable.tables.generateConsistencyToken

bigtable.tables.get

bigtable.tables.list

bigtable.tables.mutateRows

bigtable.tables.readRows

bigtable.tables.sampleRowKeys

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.timeSeries.*

  • monitoring.timeSeries.create
  • monitoring.timeSeries.list

resourcemanager.projects.get

(roles/bigtable.viewer)

Provides no data access. Intended as a minimal set of permissions to access the Google Cloud console for Bigtable.

Lowest-level resources where you can grant this role:

  • Table

bigtable.appProfiles.get

bigtable.appProfiles.list

bigtable.authorizedViews.get

bigtable.authorizedViews.list

bigtable.backups.get

bigtable.backups.list

bigtable.clusters.get

bigtable.clusters.list

bigtable.hotTablets.list

bigtable.instances.get

bigtable.instances.list

bigtable.instances.listEffectiveTags

bigtable.instances.listTagBindings

bigtable.locations.list

bigtable.tables.checkConsistency

bigtable.tables.generateConsistencyToken

bigtable.tables.get

bigtable.tables.list

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.timeSeries.list

resourcemanager.projects.get

自定义角色

如果 Bigtable 的预定义角色不能满足您的业务需求,您可以自行定义自定义角色(具有您指定的权限)。

如果您的自定义角色需要支持访问 Google Cloud 控制台,您必须确定用户将执行的任务,然后确保该自定义角色拥有每项任务所需的权限,如下表所示。如果自定义角色不具备某项任务所需的所有权限,而用户尝试执行该任务,则 Google Cloud 控制台将无法正常运行。

Google Cloud 控制台任务 所需权限
Google Cloud 控制台的基本访问权限
  • bigtable.appProfiles.get
  • bigtable.appProfiles.list
  • bigtable.clusters.get
  • bigtable.clusters.list
  • bigtable.instances.get
  • bigtable.instances.list
  • bigtable.locations.list
  • resourcemanager.projects.get
创建实例或集群

基本访问权限,以及:

  • bigtable.clusters.create
  • bigtable.instances.create
修改实例或集群

基本访问权限,以及:

  • bigtable.clusters.update
  • bigtable.instances.update
管理复制配置

基本访问权限,以及:

  • bigtable.appProfiles.create
  • bigtable.appProfiles.delete
  • bigtable.appProfiles.update
删除实例或集群

基本访问权限,以及:

  • bigtable.clusters.delete
  • bigtable.instances.delete
通过查看图表来监控实例

基本访问权限,以及:

  • monitoring.metricDescriptors.get
  • monitoring.metricDescriptors.list
  • monitoring.timeSeries.list
创建和更新表

基本访问权限,以及:

  • bigtable.tables.create
  • bigtable.tables.update
恢复备份

基本访问权限,以及:

  • bigtable.backups.list
  • bigtable.tables.create
  • bigtable.backups.restore

IAM 管理

本部分介绍如何在项目、实例、表和备份级别管理 IAM 角色和相关权限。

项目级层 IAM 管理

在项目级,您可以使用 Google Cloud 控制台、IAM API 或 Google Cloud CLI 授予、更改和撤消 IAM 角色。如需查看详细说明,请参阅授予、更改和撤消访问权限

创建项目后,您可以根据特定的访问权限级别向用户授予项目级的 IAM 角色。

所需的角色

在为某个用户设置实例级表级备份级或已获授权的视图级 IAM 角色之前,请确保该用户至少具有以下任一项目级 IAM 角色:

  • Bigtable Viewer(推荐)
  • Bigtable Reader
  • Bigtable User
  • Bigtable Administrator

请选择一个项目级角色,该角色的权限不要超出用户对项目中的所有实例、表、备份或授权视图实际需要的权限。因此,在几乎所有情况下,您都应该授予 Bigtable Viewer 角色。

如果用户不具有其中任何一个项目级层角色,则将无法通过 Google Cloud 控制台访问 Bigtable。Google Cloud 控制台要求拥有其中一个项目级角色,以便代表用户检索实例、集群、表或备份的相关信息。

授予实例级层 IAM 角色

在实例级层,您可以向用户或服务账号授予 Bigtable 的任意预定义角色。您还可以授予您已定义的任何自定义角色

要在实例级层向用户或服务账号授予预定义角色或自定义角色,请执行以下操作:

控制台

  1. 前往 Google Cloud 控制台中的“Bigtable 实例”页面。

    前往实例页面

  2. 勾选要管理其角色的实例旁边的复选框。系统将显示信息面板。

  3. 在信息面板中,点击权限

  4. 添加主账号下,开始输入要添加的用户或服务帐号的电子邮件地址,然后点击用户或服务帐号的电子邮件地址。

  5. 点击选择角色下拉列表,然后点击 Bigtable 选择预定义角色,或者点击自定义来选择自定义角色。

  6. 点击您要分配的每个角色的名称。

  7. 点击添加。系统将向用户或服务账号授予您在实例级层指定的角色。

gcloud

  1. 如果您不知道实例 ID,请使用 bigtable instances list 命令查看项目的实例列表:

    gcloud bigtable instances list
    
  2. 使用 bigtable instances set-iam-policy 命令:

    gcloud bigtable instances set-iam-policy \
    INSTANCE_ID \
    POLICY_FILE
    

    提供以下信息:

    • INSTANCE_ID:实例的永久性标识符。
    • POLICY_FILE:包含有效 IAM 政策的本地 JSON 或 YAML 文件的路径。

授予表级层 IAM 角色

在表级层,您可以向用户或服务账号授予 Bigtable 的任意预定义角色。您还可以授予您已定义的任何自定义角色

如需在表级层向用户或服务账号授予预定义角色或自定义角色,请执行以下操作:

控制台

  1. 前往 Google Cloud 控制台中的“Bigtable 实例”页面。

    前往实例页面

  2. 点击您要设置其 IAM 的表所属的实例名称。

  3. 在左侧导航窗格中选择表格

  4. 勾选您要管理其角色的表旁边的复选框。系统将显示信息面板。

  5. 在信息面板中,点击权限

  6. 添加主账号下,开始输入要添加的用户或服务帐号的电子邮件地址,然后点击用户或服务帐号的电子邮件地址。

  7. 点击选择角色下拉列表,然后点击 Bigtable 选择预定义角色,或者点击自定义来选择自定义角色。

  8. 点击您要分配的每个角色的名称。

  9. 点击添加。系统将向该用户或服务账号授予您在表级层指定的角色。

gcloud

  1. 如果您不知道实例 ID,请使用 bigtable instances list 命令查看项目的实例列表:

    gcloud bigtable instances list
    
  2. 如果您不知道实例的表 ID,请使用 bigtable instances tables list 命令查看实例中的表列表。

    gcloud bigtable instances tables list --instances=INSTANCE_ID
    

    提供以下信息:

    • INSTANCE_ID:实例的永久性标识符。
  3. 使用 bigtable instances tables set-iam-policy 命令:

    gcloud bigtable instances tables set-iam-policy \TABLE_ID \
        --instance=INSTANCE_ID \
        POLICY_FILE
    

    提供以下信息:

    • TABLE_ID:表的永久标识符。
    • INSTANCE_ID:实例的永久性标识符。
    • POLICY_FILE:包含有效 IAM 政策的本地 JSON 或 YAML 文件的路径。

授予备份级 IAM 角色

在备份级层,您可以向用户或服务账号授予 Bigtable 的任意预定义角色。您还可以授予您已定义的任何自定义角色

如需在备份级层向用户或服务账号授予预定义角色或自定义角色,请执行以下操作:

gcloud

  1. 如果您不知道实例 ID,请使用 bigtable instances list 命令查看项目的实例列表:

    gcloud bigtable instances list
    
  2. 如果您不知道实例中的备份 ID,请使用 bigtable instances backups list 命令查看实例中的备份列表。

    gcloud bigtable backups list --instances=INSTANCE_ID
    

    提供以下信息:

    • INSTANCE_ID:实例的永久性标识符。
  3. 使用 gcloud bigtable backups set-iam-policy 命令:

    gcloud bigtable backups set-iam-policy BACKUP_ID \
        --instance=INSTANCE_ID \
        --cluster=CLUSTER_ID \
        POLICY_FILE
    

    提供以下信息:

    • BACKUP_ID:备份的永久标识符。
    • INSTANCE_ID:实例的永久性标识符。
    • TABLE_ID:表的永久标识符
    • POLICY_FILE:包含有效 IAM 政策的本地 JSON 或 YAML 文件的路径。

授予已获授权的视图级 IAM 角色

在授权视图级别,您可以向用户或服务帐号授予 Bigtable 的任意预定义角色。您还可以授予您已定义的任何自定义角色

如需在已获授权的视图级别向用户或服务帐号授予预定义角色或自定义角色,请运行以下命令:

gcloud

  1. 如果您不知道实例 ID,请使用 bigtable instances list 命令查看项目的实例列表:

    gcloud bigtable instances list
    
  2. 如果您不知道实例的表 ID,请使用 bigtable instances tables list 命令查看实例中的表列表。

    gcloud bigtable instances tables list --instances=INSTANCE_ID
    
  3. 如果您不知道视图 ID,请使用 bigtable authorized-views list 命令查看表的所有授权视图列表。

    gcloud bigtable instances tables authorized-views list \
        --instance=INSTANCE_ID \
        --table=TABLE_ID
    
  4. 使用 bigtable authorized-views set-iam-policy 命令:

    gcloud bigtable authorized-views set-iam-policy TABLE_ID \
        AUTHORIZED_VIEW_ID --instance=INSTANCE_ID POLICY_FILE
    

    提供以下信息:

    • INSTANCE_ID:实例的永久性标识符。
    • TABLE_ID:表的永久标识符
    • AUTHORIZED_VIEW_ID:视图的永久标识符
    • POLICY_FILE:包含有效 IAM 政策的本地 JSON 或 YAML 文件的路径。

IAM Conditions

IAM Conditions 允许您为某些 Google Cloud 资源(包括 Bigtable 资源)定义和强制执行有条件、基于特性的访问权限控制。

在 Bigtable 中,您可以根据以下特性强制执行条件访问权限:

  • 日期/时间特性:用于设置对 Bigtable 资源的临时(很快就会过期)、预定或限时访问权限。例如,您可以允许用户访问某个表,此访问权限一直到指定日期为止。
  • 资源属性:用于根据资源名称、资源类型或资源服务属性配置条件访问权限。在 Bigtable 中,您可以使用实例、集群、表、备份和授权视图的特性来配置条件访问权限。例如,您可以允许用户仅管理以特定前缀开头的表,也可以仅允许用户访问特定表。

如需详细了解 IAM 条件,请参阅条件概览

后续步骤

详细了解 IAM