google-app-engine - 通过在构建期间使用 gsutil 构建器获取 app.yaml 来保护 GAE env 变量?

标签 google-app-engine gsutil

我遇到了与此处提到的问题相同的问题: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 灵活环境实现以下部署流程:

  1. 合并到我的 Github 主分支会触发云构建
  2. 我在 cloudbuild.yaml 中的第一步是使用 gsutil builder 获取我的 app.yaml 文件。 ,因为 app.yaml 不在源代码控制中
  3. 我的 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/

相关文章:

python - 谷歌应用程序引擎上的 float 列表

java.lang.IllegalStateException : Failed to initialize a GAE background thread factory

java - 在 GAE java 中通过证书进行客户端身份验证

java - Spring Web Flow 与 Google App Engine 兼容吗?我们可以与 GAE 一起使用的 Facelet 中哪个是最好的?

directory - 谷歌云存储上的 gsutil zip 目录

google-app-engine - GAE 的 appspot.com 缓存控制 header - HTTP STATUS 304

php - 无法在 google app engine 中为 php 应用程序配置更改对象通知

java - 使用 JAVA 以编程方式将 S3 对象(公共(public) URL)发送至 Google 云存储

google-cloud-platform - 使用 gsutil 列出与存储分区标签匹配的存储分区

google-cloud-storage - gsutil 拒绝访问异常 : 401 Login Required