如何 sandbox/limit 访问云中的 Google Cloud Dataflow 管道 运行?

How to sandbox/limit access for a Google Cloud Dataflow pipeline running in the cloud?

我想 运行 Google 云数据流中的一个管道(一个先前暂存的模板)(在 Google 云函数中使用 GAPI JS 库,如 https://shinesolutions.com/2017/03/23/triggering-dataflow-pipelines-with-cloud-functions/).如何限制此管道可以访问的资源?例如,我不希望它能够写入所有 Pub/Subs、项目下的所有存储桶等。我什至不希望管道能够,例如做一个 HTTP 请求。

根据我在 https://cloud.google.com/dataflow/security-and-permissions 阅读的内容,我只能在 运行 从本地计算机连接管道时执行此操作,因为访问权限由我的用户访问权限决定。但是,当 运行 在云中时,它 运行 在 Cloudservices 帐户和 Compute Engine 服务帐户下,我无法限制这些帐户,这样我就不会在其他地方破坏东西......对吗?

我想要这个的原因是我正在构建一个多租户系统,该系统将在客户数据可供查询之前利用 DF 对其进行 ETL。管道将由数据编写(根据客户的数据形状定制)engineers/consultants,这些可能会出错——原则上,默认情况下代码必须是不可信任的。

那么,如果不从本地计算机执行它,我该如何限制它能做什么和不能做什么?完全独立的项目?一个权限严重受限的项目,然后使用跨项目访问权限调整一个接一个地分配存储桶和其他资源? 还是我 "simulate" 通过设置一些安装了 gcloud util 的微型实例然后使用单独的用户从那里 运行 来 "simulate" 本地?

改用 Dataproc(并接受较低抽象和更多 devops 工作的代价)会有帮助吗?

首先,DF的worker VM中的用户代码运行默认带有Compute Engine Service Account凭证,这与谁从哪里启动作业无关.

所以基本上你的问题可以重新解释为:

  1. 对 Dataflow VM 设置一些网络限制。
  2. 对 VM 正在使用的服务帐户设置一些权限限制。

这里有两个高级解决方案:

A:将每个客户的流水线放到不同的项目中。

  1. 为每个客户创建一个新项目。
  2. 仅授予计算引擎服务帐户必要的权限。
  3. 可以从任何地方启动作业,方法是使用对该项目具有正确权限的服务帐户(例如,EDITOR)。

B:在不创建新项目的情况下对单个管道应用限制。

  1. 创建一个新的服务帐户并授予它正确的权限。
  2. 启动管道时,使用 --serviceAccount 以使用服务帐户。

在这两种情况下,都可以使用 --network 创建管道,让您可以灵活地配置网络。

解决方案 A 更好,因为您正在构建多租户服务,客户之间的隔离可能非常重要。而且你应该更容易正确配置。