需要通过google云中的数据流作业访问项目A中项目B的存储桶(数据流作业失败)

Need to access storage bucket of project B in project A through a data flow job in google cloud (data flow job failing)

我运行正在项目 A 中执行数据流作业,我需要访问项目 B 中的存储桶。我已请求管理员在项目 B 中添加项目 A 的服务帐户,并且已给予必要的许可 正如您在下面看到的,我提供了项目 B 的屏幕截图,我需要在项目 A 中访问其存储桶和项目 A 中的 运行 数据流,并在项目 B 中加载 BIG QUERY table。

如图所示,项目 A 服务帐户(由 A 突出显示)已添加到项目 B 中,并被授予大查询管理员和存储管理员角色。

数据流 运行如您所见,还添加了 ner 服务帐户,但看起来管理员在那里提供了大查询管理员和存储管理员角色,而不是计算网络用户。不确定我是否需要在 B 中添加 A 的数据流 运行ner 服务帐户,但在 运行 执行数据流作业时出现以下错误。

主要是说“-compute@developer.gserviceaccount.com 没有 storage.objects.list 访问 Google Cloud Storage 存储桶的权限。”,\n “domain”: “global”,\ n "原因": "禁止"\n }\n ]\n }\n}\n>')}')}"

为了更好地理解,我尝试在下面的屏幕截图中提供项目名称 A 和 B。不确定是否有更好的解释方式。

是否也需要在项目B中添加A的.compute@developer.gserviceaccount.com? 请指教

当您 运行 数据流作业时,您有工作人员。如果您仔细查看您的项目,worker 就是简单的 Compute Engine。当您部署计算引擎时,默认情况下,使用的服务帐户是 -compute@ 。因此,正是这个身份尝试访问您的不同组件(此处为 GCS 和 BigQuery)。

因此,授予对正确资源所需的权限(不要在项目级别执行此操作,最好在存储桶或数据集级别执行此操作。如果您不知道该怎么做,请告诉我) .

另一种解决方案是在您的 Dataflow 作业中 运行 指定一个自定义服务帐户来创建工作人员,不是使用 Compute Engine 默认服务帐户,而是使用提供的服务帐户。您可以使用 gcloud CLI for example


关于数据流权限,您可以找到更多详细信息here