我在项目A中运行一个数据流作业,我有一个访问项目B中存储桶的需求。我已经请求管理员在项目B中添加项目A的服务帐户,并给予了所需的权限。如下图所示,我提供了项目B的屏幕截图,我需要在项目A中访问其存储桶,并在项目A中运行数据流,并在项目B中加载BIG QUERY表。
如图所示,项目A服务号(由A突出显示)被添加到项目B中,并被赋予大查询管理员和存储管理员角色。
数据流运行器服务号也被添加,如您所见,但看起来像管理员提供了大查询管理员和存储管理员角色,而不是计算网络用户。不确定我是否需要在B中添加A的数据流运行器服务号,但我在运行数据流作业时遇到了以下错误。
它主要是说"-compute@developer.gserviceaccount.com没有对Google Cloud Storage存储桶的存储. object.list访问权限。",\n"domain":"global",\n"原因":"禁止"\n}\n]\n}\n}\n
为了更好地理解,我试图在下面的屏幕截图中提供项目名称为A和B。不确定有什么更好的解释方式。
我需要在项目B中添加A的.compute@developer.gserviceaccount.com吗??请建议。
当你运行一个数据流作业时,你有工作人员。如果你仔细观察你的项目,工作人员就是简单的计算引擎。当你部署计算引擎时,默认情况下,使用的服务号是-compute@。因此,正是这个身份尝试访问你的不同组件(这里GCS和BigQuery)。
所以,对正确的资源授予所需的权限(不要在项目级别这样做,最好在bucket或数据集级别这样做。如果你不知道如何做,请告诉我)。
另一种解决方案是在运行时在Dataflow作业中指定自定义服务号来创建工作人员,不是使用Compute Engine默认服务号,而是使用提供的服务号
关于数据流权限,你可以在这里找到更多细节