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

Google cloud platform 需要通过google云中的数据流作业访问项目A中项目B的存储桶(数据流作业失败),google-cloud-platform,google-cloud-dataflow,google-cloud-iam,Google Cloud Platform,Google Cloud Dataflow,Google Cloud Iam,我正在项目a中运行数据流作业,其中我需要访问项目B中的存储桶。我已请求管理员在项目B中添加项目a的服务帐户,并已授予所需的权限 如下所示,我提供了项目B的屏幕截图,我需要在项目A中访问其存储桶,并在项目A中运行数据流,在项目B中加载大查询表 如图所示,项目A服务帐户(由A突出显示)添加到项目B中,并指定大查询管理员和存储管理员角色 如您所见,还添加了Data flow runner服务帐户,但看起来像是管理员提供的大查询管理员和存储管理员角色,而不是计算网络用户。不确定是否需要在B中添加A的数据

我正在项目a中运行数据流作业,其中我需要访问项目B中的存储桶。我已请求管理员在项目B中添加项目a的服务帐户,并已授予所需的权限 如下所示,我提供了项目B的屏幕截图,我需要在项目A中访问其存储桶,并在项目A中运行数据流,在项目B中加载大查询表

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

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

主要是说"-compute@developer.gserviceaccount.com没有对Google云存储桶的storage.objects.list访问权。“,\n“域”:“全局”,\n“原因”:“禁止”\n}\n]\n}\n}\n}\n>“)}”

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

我需要补充吗。compute@developer.gserviceaccount.com项目B中的A也是?? 请告知


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

因此,在正确的资源上授予所需的权限(不要在项目级别这样做,最好在bucket或dataset级别这样做。如果您不知道如何做,请告诉我)

另一种解决方案是在运行时在数据流作业中指定一个自定义服务帐户,以创建工作进程,而不是使用计算引擎默认服务帐户,而是使用提供的服务帐户



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

hello@guillaume blaquiere。非常感谢您查看我的查询。我理解您的意思,但如果我的理解有误,请纠正我。我需要添加吗-compute@developer.gserviceaccount.com从项目B中的项目A开始,并向其所有者提供访问权限??我添加服务的方式e项目B中项目A的账户,并提供所需访问权限,我也应为compute@developer.gserviceaccount.com?我试着用“gsutil defacl ch-u”按照谷歌文档中提到的那样做\“命令,但看起来它适用于ACL而不是IAM。如果您能告诉我如何正确执行此操作,并且如您所说,在bucket和dataset级别执行此操作,而不是在项目级别执行此操作,那就太好了。单独添加注释,因为它不允许我一次写入更多内容。如果您在bucket上使用统一的IAM策略,则所有者权限没有云存储权限。老板不是个好主意。您需要将BigQuery管理员和StorageAdmin添加到-compute@developer.gserviceaccount.com在项目B的IAM页面中。一个更好的解决方案是逐个资源执行此资源,但从这样开始,您稍后将减少权限。谢谢@guillaume blaquiere。