我有一个IAM
用户,其角色是:BigQuery Data Editor
在我的数据集中,我确实Share dataset
向用户添加了Can Edit
特权。
但是,当我运行访问BigQuery的脚本时,出现错误403
当我向IAM
用户添加角色BigQuery User
时,脚本便起作用了。
该脚本仅从该数据集中的表中运行SELECT
查询。
我不明白为什么我必须为此授予BigQuery User
。
根据文档https://cloud.google.com/bigquery/docs/access-control
合理性:dataEditor角色通过发出以下内容扩展了bigquery.dataViewer 为数据集中的表创建,更新,删除特权
roles/bigquery.dataViewer
具有bigquery.tables.getData
可以获取表格数据
我在这里做什么错了?
答案 0 :(得分:1)
访问数据并能够通过查询检索数据是不同的事情,而这正是混乱的根源。
根据文档,roles/bigquery.dataEditor
具有以下权限:
这意味着具有此角色的用户有权访问和操作数据集的信息及其中的表。例如,具有此角色的用户可以通过GCP控制台(模式,详细信息和预览选项卡)导航到该表,从而看到所有表信息,但是当尝试在该表中运行查询时,将显示以下消息:
访问被拒绝:项目
<PROJECT-ID>
:用户<USER>
在项目<PROJECT-ID>
中没有bigquery.jobs.create权限。
现在让我们检查一下roles/bigquery.user
权限:
在项目中运行作业(包括查询)的权限。
此处的关键元素是BigQuery User
角色可以运行作业,而BigQuery DataEditor
不能运行。 BigQuery Jobs是管理BigQuery任务的对象,其中包括正在运行的查询。
有了这些信息,在roles comparison matrix中就很清楚,对于您要完成的工作,您将需要BigQuery DataEditor
角色(获取表数据/元数据)和BigQuery User
角色(创建作业/查询)。