我遇到了与此处提到的问题相同的问题:Securely storing environment variables in GAE with app.yaml - 即:
“我需要将 API key 和其他敏感信息存储在 app.yaml 中作为环境变量,以便在 GAE 上部署。问题在于,如果我将 app.yaml 推送到 GitHub,此信息就会公开(不是好)。”
此外,我希望选中以下复选框:
- (尽可能)防止供应商锁定以及将我的 dockerfile 带到别处的能力。
- 易于使用 GitHub 进行部署。我想要推送到触发构建的 master。
- 最简单的设置,或者适合独立开发者或小型团队的工作量和工作流程。
我的研究结果如下:
Securely storing environment variables in GAE with app.yaml
How to set environment variables/app secrets in Google App Engine
GAE : How to deploy various environments with secrets?
appengine and OS environment variables
How to pass environment variables to the app.yaml using cloud build
很多有用的信息来自GAE : How to deploy various environments with secrets? 作者列出了三种解决方法及其不被使用的原因:
- 使用 Google KMS - 允许我们将加密的 secret 直接放入 项目,但它需要我们将自定义代码放入我们的应用程序中才能解密 他们。它在本地、 演出和制作。它增加了错误的风险,因为 复杂性。
- 在 Google Datastore 中存储 secret - 我试过了,我创建了一个助手 在 proccess.ENV 中搜索环境变量,然后在缓存中,最终 在数据存储中。但是和 KMS 一样,它增加了很多复杂性。
- 将 secret 存储在 JSON 文件中并放入 Google Cloud Storage:同样,它需要通过一个帮助程序加载环境变量 检查环境变量,然后加载文件等...
然而,对我来说最好的解决方案来自 How to pass environment variables to the app.yaml using cloud build
它允许我使用适用于 nodejs 的 GAE 灵活环境实现以下部署流程:
- 合并到我的 Github 主分支会触发云构建
- 我在 cloudbuild.yaml 中的第一步是使用 gsutil builder 获取我的 app.yaml 文件。 ,因为 app.yaml 不在源代码控制中
- 我的 app.yaml 指向我的运行时的 dockerfile 并有我的环境变量
这检查了我所有的箱子并且是一个相当简单的解决方案但是,这似乎绝对不是一个流行的解决方案,所以我在这里遗漏了什么吗?
最重要的是,是否存在任何安全问题?
最佳答案
我对您的研究方式感到惊讶,您实际上收集了所有可能的方法来实现它。
正如您所提到的,有很多方法可以将变量传递给应用程序,但我相信您提出的解决方案(将变量存储在 Google Cloud Storage 中并使用 Google Cloud Build 检索它们)最适合您的目的。它不需要太多代码而且很优雅,我希望这篇文章能帮助人们了解这个解决方案。关于您的安全问题,此解决方案尽可能提供高度安全性 set the file in the bucket to only be accessible来自 Google Cloud Build 和项目所有者。
关于google-app-engine - 通过在构建期间使用 gsutil 构建器获取 app.yaml 来保护 GAE env 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54544530/