我想在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工作的价格)会有所帮助吗?
首先,默认情况下,在DF的工作VM中运行的用户代码带有计算引擎服务帐户凭据,这与谁从哪里启动作业无关。
所以基本上你的问题可以重新解释为:
这里有两个高级解决方案:
答:将每个客户的管道放入不同的项目中。
B:对单个管道应用限制,而不创建新项目。
在这两种情况下,都可以使用--network创建管道,让您可以灵活地配置网络。
解决方案A更好,因为您正在构建多租户服务,客户之间的隔离可能非常重要。并且您应该更容易正确配置。