Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 用于插入特定BigQuery数据集的IAM自定义角色_Google Cloud Platform_Google Bigquery_Google Cloud Iam - Fatal编程技术网

Google cloud platform 用于插入特定BigQuery数据集的IAM自定义角色

Google cloud platform 用于插入特定BigQuery数据集的IAM自定义角色,google-cloud-platform,google-bigquery,google-cloud-iam,Google Cloud Platform,Google Bigquery,Google Cloud Iam,我有几个客户项目将分析事件写入BigQuery数据集中。设置的组织方式如下: 1) 每个GCP项目都有自己的一组GCP资源,其中一些资源使用BigQueryInsert API报告分析 2) 有一个单一的“主分析”项目,它将不同项目的所有数据纳入标准化表格(所有项目都以相同的数据格式编写) 我已在“主分析”中创建了一个自定义IAM角色,具有执行行插入操作所需的权限: bigquery.datasets.get bigquery.tables.get bigquery.tables.updateD

我有几个客户项目将分析事件写入BigQuery数据集中。设置的组织方式如下:

1) 每个GCP项目都有自己的一组GCP资源,其中一些资源使用BigQueryInsert API报告分析

2) 有一个单一的“主分析”项目,它将不同项目的所有数据纳入标准化表格(所有项目都以相同的数据格式编写)

我已在“主分析”中创建了一个自定义IAM角色,具有执行行插入操作所需的权限:

bigquery.datasets.get
bigquery.tables.get
bigquery.tables.updateData
对于每个客户项目,我都使用上述角色创建了一个独特的服务帐户。这允许任何项目中的每个资源进行身份验证和插入行(但不允许创建/删除表)

问题:我真正想做的是将服务帐户限制为只写入包含所有数据的特定数据集。上述IAM角色允许服务帐户列出“Main Analytics”项目中的所有数据集/表,并插入其中

如果我使用-将服务帐户电子邮件作为用户添加到数据集ACL中-则它必须是
WRITER
数据集角色,这将允许服务帐户在数据集中创建和删除太宽的表

将IAM角色与数据集权限相结合会产生一个联合,因此较宽的
WRITER
权限会对较窄的IAM角色生效


无论如何,我可以配置角色/权限,以允许每个服务帐户插入并仅插入到特定的数据集?

您可以删除
bigquery.dataset。从自定义IAM角色获取
权限,以便它们无法列出所有数据集,然后,在数据集的权限中,为该特定数据集的用户指定
读取器
角色,而不是
编写者

我认为在使用类似SDK的节点JS:dataset('dataset').table('table').insert()时需要BigQuery.datasets.get。如果我没记错的话,如果该权限丢失,SDK将抛出一个未经授权的错误。我特别使用Node.js客户端库对其进行了测试,我能够访问该特定数据集(我以“reader”的身份与服务帐户共享),同时获得所有其他数据集的授权错误(“访问被拒绝:数据集::用户没有bigquery.datasets.get对数据集的权限)已验证,无法按预期工作。这不是一个完整的解决方案,因为我真正想要的是“仅插入到此数据集”,但比我当前的解决方案更好,因为服务帐户无法列出项目中的所有数据集,也无法删除任何表。