我想以安全的方式在我的 Cloud Run 实例中处理用户提交的可执行文件(在 Linux 环境下使用 PyInstaller 制作)。可执行文件在同一个文件夹中也有一些需要处理的文件,这些文件是通过我的云存储下载的。由于 Cloud Run 也处于 Docker 环境中,因此在 Docker 中运行 Docker 看起来相当麻烦,尤其是在 Cloud Run 中,因为如果我没记错的话,我无法修改启动 Cloud Run 的 Docker RUN 命令。在这种情况下调用其他 Cloud Run 实例不适用,因为它可以处理多个请求,并且多个用户提交的可执行文件可能会相互影响,而且用户代码还会访问我的云运行服务的代码并修改云存储。我对替代方法有一些想法,请分享您对它们的看法。
我可以以某种方式限制我的云运行服务对我的云存储的访问权限,限制对同一服务的并发调用,并在每次服务启动/重用时进行适当的清理。
使用 chroot、fork 限制、watchdog 等受限权限调用二进制文件(不确定这些是否足以保证安全)
- 为脚本和输入文件创建某种隔离的环境,运行它并获取结果。(使用 docker 很容易,只需使用绑定,主机就可以提供输入文件并收集结果文件)
我愿意接受其他想法,并且会详细考虑我的替代方案。
答案1
构建并测试每个提交。不是在 Cloud Run 实例中,而是在某个构建系统中。您表达了对容器的偏好,是的,它们对于隔离非常有意义。
您的应用程序收集源代码、生成构建配置、添加测试并开始构建。构建系统可能会将结果部署到某处以供进一步处理或使用。
也许GCP 云构建。具有相当易于扩展的优点,并且可以拉取 GCP 存储和容器工件。