我正在使用跨多个 Google Cloud 服务的架构,我需要弄清楚如何配置角色和权限以使以下场景发生。
项目中的托管 Kubernetes 集群上有一个 pod 正在运行(例如
project-1
)。 kube 服务帐户与 IAM 服务帐户连接,也在 project-1
中。
Pod 中运行的应用程序必须能够调用 Cloud Run Function gen2(也在 project-1
中)。
按顺序,云函数必须能够通过 project-2
库访问(查询)另一个项目中的 BigQuery 数据集(比如
google-cloud-bigquery
)。
总结一下,涉及3个账户:
流量目前已到达云函数。然后,云功能失败并显示以下消息:
google.api_core.exceptions.Forbidden:403 访问被拒绝:表 项目2:THE_TABLE:用户没有 查询表的权限 project-2:THE_TABLE,或者可能不是 存在。;原因:accessDenied,消息:访问被拒绝:表 项目2:THE_TABLE:用户没有 查询表的权限 project-2:THE_TABLE,或者可能不是 存在。
这是预期的,因为所有账户都没有任何 BigQuery 角色
project-2
为了使此过程成功,我到底需要为每个涉及的帐户授予什么角色(或权限)?
在Google Cloud Platform中设置中等复杂架构中的跨项目权限。您需要配置角色和权限。
根据此官方文档有关 BigQuery IAM 角色和权限的信息:
本文档提供有关身份和访问管理的信息 BigQuery 的 (IAM) 角色和权限。 IAM 可让您授予细粒度的权限 访问特定 BigQuery 资源并帮助阻止访问 其他资源。
您收到的错误是由于云函数无法从 bigquery 读取,因为它没有权限。因此,您需要允许云函数读取project-2
中的bigquery在您的project-1中,您需要授予 kubernetes pod 调用云函数的权限。
在您的 project-2 中,您需要向 IAM 服务账户授予 roles/bigquery.dataviewer 和 roles/bigquery.dataEditor
上述角色向 IAM 服务账户授予对 Project-2
中的 bigquery 表的必要权限