使用 IAM 对 Bigtable 进行访问权限控制

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

概览

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

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

如果您拥有某个级别的权限,则会自动获得低于该级别的权限。例如,如果您拥有项目级别的访问权限,则您可以访问该项目中的实例、集群、表和授权视图。如果您被授予对某个授权视图的访问权限,那么您将无法自动访问作为该授权视图父项的更高层级资源,例如表和实例。这种行为称为“政策继承”

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

以下示例说明了如何在项目级别使用访问权限控制:

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

以下示例说明了如何在实例级层使用访问权限控制:

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

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

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

以下示例说明了如何在备份级别使用访问权限控制:

  • 防止用户删除备份。
  • 阻止用户从备份中恢复数据。

以下是在“已获授权的视图”级别使用访问权限控制的示例:

  • 允许用户读取已获授权的视图,但不能对其进行修改。
  • 允许用户仅查看表的多个授权视图中的其中一个中的数据。

如需详细了解 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
  • bigtable.tables.get
  • bigtable.tables.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