【问题标题】:IAM Custom Role for Inserting to Specific BigQuery Dataset用于插入特定 BigQuery 数据集的 IAM 自定义角色
【发布时间】:2019-01-02 13:39:31
【问题描述】:

我有几个将分析事件写入 BigQuery 数据集的客户项目。设置是这样组织的:

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

2) 有一个“主要分析”项目,它以标准化表格的形式从不同项目中获取所有数据(所有项目都以相同的数据格式编写)。

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

bigquery.datasets.get
bigquery.tables.get
bigquery.tables.updateData

对于每个客户项目,我都创建了具有上述角色的唯一服务帐户。这允许任何项目中的每个资源都可以验证和插入行(但不能创建/删除表)。

问题:我真正想做的是将服务帐户限制为仅写入接收所有数据的特定数据集。上述 IAM 角色允许服务帐户列出“主分析”项目中的所有数据集/表并插入其中。

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

将 IAM 角色与数据集权限组合会产生一个联合,因此更广泛的 WRITER 权限对更窄的 IAM 角色生效。

我是否可以配置角色/权限以允许每个服务帐户插入和仅插入特定数据集?

【问题讨论】:

    标签: google-cloud-platform google-bigquery google-cloud-iam


    【解决方案1】:

    您可以从自定义 IAM 角色中删除 bigquery.datasets.get 权限,这样他们就无法列出所有数据集,然后在数据集的权限中将 READER 角色而不是 WRITER 授予该特定用户数据集。

    【讨论】:

    • 我认为使用Node JS之类的SDK时需要BigQuery.datasets.get:dataset('dataset').table('table').insert()。如果我没记错的话,如果缺少该权限,SDK 会抛出未经授权的错误。
    • 我已经特别使用 Node.js 客户端库对其进行了测试,并且我能够访问该特定数据集(我作为“读者”与服务帐户共享),同时获得授权错误所有其他数据集(“拒绝访问:数据集 ::用户 没有数据集 的 bigquery.datasets.get 权限)
    • 已验证按预期工作。它不是一个完整的解决方案,因为我真正想要的是“仅插入此数据集”,但比我当前的解决方案更好,因为服务帐户无法列出项目中的所有数据集并且无法删除任何表。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2020-04-03
    相关资源
    最近更新 更多