DataProc BigQuery Connector 跨项目访问

DataProc BigQuery Connector Access Across Projects

我正在项目 A 中的 DataProc 集群上向 运行 编写 Spark 作业,但该作业本身将使用 BigQuery 连接器从项目 B 中的 BigQuery 实例中提取数据。我对这两个项目都有所有者权限,但工作是 运行 使用服务帐户。我在堆栈跟踪中得到的响应是这样的:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Access Denied: Table ABC:DEF.ghi: The user me-compute@developer.gserviceaccount.com does not have bigquery.tables.get permission for table ABC:DEF.ghi.",
    "reason" : "accessDenied"
  } ],
  "message" : "Access Denied: Table ABC:DEF.ghi: The user me-compute@developer.gserviceaccount.com does not have bigquery.tables.get permission for table ABC:DEF.ghi."
}

如您所见,Dataproc 集群 运行 代表服务帐户而不是个人用户;这是有意为之的,因为不同的用户可能在共享项目中创建 Dataproc 集群,他们不希望他们的个人权限泄露给使用同一项目的组织的其他成员,而是应该根据服务帐户定义权限,每个服务帐户代表一个工作负载的特定范围。

在这种情况下,您所要做的就是进入项目 B 并将项目 A 的服务帐户添加为可以访问项目 B 中的 BQ 的角色之一。如果它不是一个有很多用户的复杂安排并且不同的团队,您可以将其添加为项目 B 上的 "project viewer",否则您将需要更多 fine-grained,例如 "bigquery viewer" 或 "bigquery editor"。

添加该服务帐户的方式与将任何用户添加到项目 B 的方式相同。