使用 IAM 控制对资源的访问权限
本文档介绍了如何查看资源的当前访问权限政策、如何授予资源访问权限以及如何撤消对资源的访问权限。
本文档假定您熟悉 Google Cloud 中的 Identity and Access Management (IAM) 系统。
所需的角色
如需获取修改资源 IAM 政策所需的权限,请让您的管理员授予您项目的 BigQuery Data Owner (roles/bigquery.dataOwner
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。
此预定义角色包含修改资源 IAM 政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
- 获取数据集的访问权限政策:
bigquery.datasets.get
-
设置数据集的访问权限政策:
bigquery.datasets.update
-
获取数据集的访问权限政策(仅限 Google Cloud 控制台):
bigquery.datasets.getIamPolicy
-
设置数据集的访问权限政策(仅限控制台):
bigquery.datasets.setIamPolicy
-
获取表或视图的访问权限政策:
bigquery.tables.getIamPolicy
-
设置表或视图的政策:
bigquery.tables.setIamPolicy
-
创建
bq
工具或 SQL BigQuery 作业(可选):bigquery.jobs.create
查看资源的访问权限政策
以下部分介绍如何查看不同资源的访问权限政策。
查看数据集的访问权限政策
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择数据集。
点击 > 权限。
共享数据集访问权限政策会显示在数据集权限窗格中。
bq
要获取现有政策并将其输出到 JSON 格式的本地文件,请使用 Cloud Shell 中的 bq show
命令:
bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:您的数据集的名称。
- PATH_TO_FILE:本地机器上 JSON 文件的路径
API
如需在创建数据集时应用访问权限控制,请使用已定义的 dataset resource
来调用 datasets.insert
。要更新访问权限控制,请调用 datasets.patch
并使用 Dataset
资源中的 access
属性。
由于 datasets.update
方法会替换整个数据集资源,因此 datasets.patch
是更新访问权限控制的首选方法。
查看表或视图的访问权限政策
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器窗格中,展开您的项目并选择表或视图。
点击
共享。表或视图访问权限政策将显示在共享窗格中。
bq
要获取现有访问权限政策并将其输出到 JSON 格式的本地文件,请使用 Cloud Shell 中的 bq get-iam-policy
命令:
bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:您的数据集的名称。
- RESOURCE:您要查看其政策的表或视图的名称
- PATH_TO_FILE:本地机器上 JSON 文件的路径
API
如需检索当前政策,请调用 tables.getIamPolicy
方法。
授予对资源的访问权限
以下部分介绍了如何授予对不同资源的访问权限。
授予对数据集的访问权限
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器窗格中,展开您的项目并选择要共享的数据集。
点击 > 权限。
共享点击
添加主帐号。在新的主帐号字段中,输入主帐号。
在选择角色列表中,选择预定义角色或自定义角色。
点击保存。
要返回数据集信息,请点击关闭。
SQL
如需向主帐号授予对数据集的访问权限,请使用 GRANT
DCL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
GRANT ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
请替换以下内容:
ROLE_LIST
:您要授予权限的角色或以英文逗号分隔的角色列表RESOURCE_TYPE
:角色适用的资源类型支持的值包括
SCHEMA
(等同于数据集)、TABLE
、VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:您要向其授予权限的资源的名称USER_LIST
:为其授予角色的以英文逗号分隔的用户列表。如需查看有效格式的列表,请参阅
user_list
。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
要将现有数据集信息(包括访问权限控制设置)写入 JSON 文件,请使用
bq show
命令:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:您的数据集的名称。
- PATH_TO_FILE:本地机器上 JSON 文件的路径
对 JSON 文件的
access
部分进行更改。您可以将其添加到任何specialGroup
条目:projectOwners
、projectWriters
、projectReaders
、allAuthenticatedUsers
。您还可以添加以下任一项:userByEmail
、groupByEmail
、domain
。例如,数据集 JSON 文件的
access
部分可能如下所示:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
修改完成后,运行
bq update
命令,并用--source
标志包括该 JSON 文件。如果数据集不属于默认项目,请按以下格式将相应项目 ID 添加到数据集名称中:PROJECT_ID:DATASET
。bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
如需验证您的访问权限控制发生了变化,请再次使用
bq show
命令,但不要将信息写入文件:bq show --format=prettyjson PROJECT_ID:DATASET
API
要在创建数据集时应用访问权限控制,请使用已定义的数据集资源来调用 datasets.insert
方法。要更新访问权限控制,请调用 datasets.patch
方法并使用 Dataset
资源中的 access
属性。
由于 datasets.update
方法会替换整个数据集资源,因此 datasets.patch
是更新访问权限控制的首选方法。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
使用数据集的访问权限控制来设置dataset.access_entries
属性。然后调用 client.update_dataset()
函数以更新该属性。
授予对表或视图的访问权限
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择要共享的表或视图。
点击
共享。点击
添加主帐号。在新的主帐号字段中,输入主帐号。
在选择角色列表中,选择预定义角色或自定义角色。
点击保存。
要返回以查看表或视图详细信息,请点击关闭。
SQL
如需向主帐号授予对表或视图的访问权限,请使用 GRANT
DCL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
GRANT ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
请替换以下内容:
ROLE_LIST
:您要授予权限的角色或以英文逗号分隔的角色列表RESOURCE_TYPE
:角色适用的资源类型支持的值包括
SCHEMA
(等同于数据集)、TABLE
、VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:您要向其授予权限的资源的名称USER_LIST
:为其授予角色的以英文逗号分隔的用户列表。如需查看有效格式的列表,请参阅
user_list
。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
如需将现有表或视图信息(包括访问权限控制设置)写入 JSON 文件,请使用
bq get-iam-policy
命令:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:包含要更新的表或视图的数据集的名称
- TABLE_OR_VIEW:要更新的资源的名称
- PATH_TO_FILE:本地机器上 JSON 文件的路径
对 JSON 文件的
access
部分进行更改。您可以将其添加到任何specialGroup
条目:projectOwners
、projectWriters
、projectReaders
、allAuthenticatedUsers
。您还可以添加以下任一项:userByEmail
、groupByEmail
、domain
。 例如,表或视图的 JSON 文件的access
部分可能如下所示:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
使用
set-iam-policy
命令更新政策:bq set-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
如需验证您的访问权限控制发生了变化,请再次使用
bq get-iam-policy
命令,但不要将信息写入文件。bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- 如需检索当前政策,请调用
tables.getIamPolicy
方法。 修改政策以添加成员和/或绑定。 如需了解政策所需的格式,请参阅政策参考主题。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。
撤消对资源的访问权限
以下部分介绍如何撤消对不同资源的访问权限。
撤消对数据集的访问权限
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器面板中,展开您的项目并选择数据集。
在详细信息面板中,点击共享 > 权限。
在数据集权限对话框中,展开要撤消其访问权限的主帐号。
点击
移除主帐号。在从主帐号中移除角色?对话框中,点击移除。
要返回数据集详细信息,请点击关闭。
SQL
如需移除主帐号对数据集的访问权限,请使用 REVOKE
DCL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
REVOKE ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
请替换以下内容:
ROLE_LIST
:您要撤消权限的角色或以英文逗号分隔的角色列表RESOURCE_TYPE
:从中撤消角色权限的资源类型支持的值包括
SCHEMA
(等同于数据集)、TABLE
、VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:您要撤消其权限的资源的名称USER_LIST
:将撤消其角色的以英文逗号分隔的用户列表如需查看有效格式的列表,请参阅
user_list
。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
要将现有数据集信息(包括访问权限控制设置)写入 JSON 文件,请使用
bq show
命令:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:您的数据集的名称。
- PATH_TO_FILE:本地机器上 JSON 文件的路径
对 JSON 文件的
access
部分进行更改。您可以移除以下任何specialGroup
条目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您还可以移除以下任何一项:userByEmail
、groupByEmail
和domain
。例如,数据集 JSON 文件的
access
部分可能如下所示:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
修改完成后,运行
bq update
命令,并用--source
标志包括该 JSON 文件。如果数据集不属于默认项目,请按以下格式将相应项目 ID 添加到数据集名称中:PROJECT_ID:DATASET
。bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
如需验证您的访问权限控制发生了变化,请再次使用
show
命令,但不要将信息写入文件:bq show --format=prettyjson PROJECT_ID:DATASET
API
调用 datasets.patch
并使用 Dataset
资源中的 access
属性更新访问权限控制。
由于 datasets.update
方法会替换整个数据集资源,因此 datasets.patch
是更新访问权限控制的首选方法。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
使用数据集的访问权限控制来设置dataset.access_entries
属性。然后调用 client.update_dataset()
函数以更新该属性。
撤消对表或视图的访问权限
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在浏览器面板中,展开您的项目并选择表或视图。
在详细信息面板中,点击共享。
在共享对话框中,展开要撤消其访问权限的主帐号。
点击
删除。在从主帐号中移除角色?对话框中,点击移除。
要返回以查看表或视图详细信息,请点击关闭。
SQL
如需移除主帐号对表或视图的访问权限,请使用 REVOKE
DCL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
REVOKE ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
请替换以下内容:
ROLE_LIST
:您要撤消权限的角色或以英文逗号分隔的角色列表RESOURCE_TYPE
:从中撤消角色权限的资源类型支持的值包括
SCHEMA
(等同于数据集)、TABLE
、VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:您要撤消其权限的资源的名称USER_LIST
:将撤消其角色的以英文逗号分隔的用户列表如需查看有效格式的列表,请参阅
user_list
。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
如需将现有表或视图信息(包括访问权限控制设置)写入 JSON 文件,请使用
bq get-iam-policy
命令:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
请替换以下内容:
- PROJECT_ID:您的项目 ID
- DATASET:包含要更新的表或视图的数据集的名称
- TABLE_OR_VIEW:要更新的资源的名称
PATH_TO_FILE:本地机器上 JSON 文件的路径
对 JSON 文件的
access
部分进行更改。您可以移除以下任何specialGroup
条目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您还可以移除以下任何一项:userByEmail
、groupByEmail
和domain
。 例如,表或视图的 JSON 文件的access
部分可能如下所示:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
使用
bq set-iam-policy
命令更新政策:bq set-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
如需验证您的访问权限控制发生了变化,请再次使用
get-iam-policy
命令,但不要将信息写入文件:bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- 如需检索当前政策,请调用
tables.getIamPolicy
方法。 修改政策以移除成员和/或绑定。如需了解政策所需的格式,请参阅政策参考主题。
调用
tables.setIamPolicy
以写入更新后的政策。 注意:不允许没有任何成员的空绑定,这样的空绑定将导致错误。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。