问题描述
我正在项目 A 中运行数据流作业,我需要访问项目 B 中的存储桶。我已请求管理员在项目 B 中添加项目 A 的服务帐户并已授予所需权限 如下所示,我提供了项目 B 的屏幕截图,我需要在项目 A 中访问其存储桶并在项目 A 中运行数据流并在项目 B 中加载 BIG QUERY 表。
如图所示的项目 A 服务帐户(由 A 突出显示)已添加到项目 B 中,并被赋予大查询管理员和存储管理员角色。
如您所见,还添加了数据流运行器服务帐户,但看起来管理员在那里提供了大查询管理员和存储管理员角色,而不是计算网络用户。不确定是否需要在 B 中添加 A 的数据流运行器服务帐户,但在运行数据流作业时出现以下错误。
主要是说“-compu[email protected] 没有对 Google Cloud Storage 存储分区的 storage.objects.list 访问权限。”,\n "domain": "global",\n "reason": "禁止"\n }\n ]\n }\n}\n>')}')}"
为了更好地理解,我尝试在下面的屏幕截图中将项目名称提供为 A 和 B。不确定有什么更好的解释方式。
我是否也需要在项目 B 中添加 A 的 .compu[email protected]?? 请指教。
解决方法
当您运行数据流作业时,您有工作人员。如果您仔细查看您的项目,会发现 worker 是简单的 Compute Engine。当您部署计算引擎时,默认情况下,使用的服务帐户是 -compute@ 。因此,正是这个身份尝试访问您的不同组件(此处为 GCS 和 BigQuery)。
因此,授予对正确资源所需的权限(不要在项目级别执行此操作,最好在存储桶或数据集级别执行此操作。如果您不知道该怎么做,请告诉我)。
另一种解决方案是在运行时在 Dataflow 作业中指定一个自定义服务帐户来创建工作线程,而不是使用 Compute Engine 默认服务帐户,而是使用提供的服务帐户。您可以使用 gcloud CLI for example
关于 Dataflow 权限,您可以找到更多详情here