提问者:小点点

如何沙盒/限制访问谷歌云数据流管道在云中运行?


我想在Google Cloud Dataflow中运行管道(以前暂存的模板)(在Google Cloud Function中使用GAPIJS库,如https://shinesolutions.com/2017/03/23/triggering-dataflow-pipelines-with-cloud-functions/所示)。如何限制此管道可以访问的资源?例如,我不希望它能够写入项目下的所有Pub/Sub、所有存储桶等。我甚至不希望管道能够执行HTTP请求。

根据我在https://cloud.google.com/dataflow/security-and-permissions上读到的,我只能在从本地机器运行管道时这样做,因为访问权限由我的用户访问权限决定。然而,当在云中运行时,它在云服务帐户和计算引擎服务帐户下运行,并且我不能限制这些帐户,这样我就不会在其他地方破坏东西…正确吗?

我想要这样做的原因是,我正在构建一个多租户系统,该系统将利用DF在可供查询之前ETL客户的数据。管道将由数据工程师/顾问创作(根据客户的数据形状定制),这些管道可能会出错——原则上,代码默认必须不可信。

那么不从本地机器执行,我该如何限制它能做什么和不能做什么?完全分开的项目?一个权限严重受限的项目,然后使用跨项目访问权限调优逐个分配bucket和其他资源?还是通过设置一些安装了gcloud util的微实例,然后使用单独的用户从那里运行来“模拟”本地?

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


共1个答案

匿名用户

首先,默认情况下,在DF的工作VM中运行的用户代码带有计算引擎服务帐户凭据,这与谁从哪里启动作业无关。

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

  1. 对Dataflow VM施加一些网络限制。
  2. 对VM使用的服务号设置一些权限限制。

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

答:将每个客户的管道放入不同的项目中。

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

B:对单个管道应用限制,而不创建新项目。

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

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

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

相关问题