当前位置: 首页 > 知识库问答 >
问题:

通过使用gsutil builder来保护GAE env变量的源应用程序。在建造过程中yaml?

吕自怡
2023-03-14

我和这里提到的问题是一样的:用app在GAE中安全地存储环境变量。yaml——即:

“我需要将API密钥和其他敏感信息作为环境变量存储在app.yaml中,以便在GAE上部署。问题是,如果我将app.yaml推送到GitHub,这些信息就会公开(不好)。”

此外,我想检查以下框:

  • 防止供应商锁定(尽可能)

我的研究结果如下:

使用应用程序在GAE中安全地存储环境变量。亚马尔

如何在Google app Engine中设置环境变量/应用机密

GAE:如何使用机密部署各种环境?

appengine和OS环境变量

如何将环境变量传递给应用程序。使用云构建的yaml

GAE提供了很多有用的信息:如何使用机密部署各种环境?作者列出了三种变通方法及其不使用的原因:

  • 使用谷歌KMS——允许我们将加密的秘密直接放入项目中,但它要求我们在应用程序中放入自定义代码来解密它们。它在本地、暂存和生产之间创建了不同的环境管理。由于复杂性,它增加了出现错误的风险
  • 在谷歌数据存储中存储秘密——我尝试过,我创建了一个助手,可以在过程中搜索环境变量。ENV,然后在缓存中,最终在数据存储中。但和KMS一样,它也大大增加了复杂性
  • 将机密存储在JSON文件中并放入谷歌云存储:同样,它需要通过检查env变量的助手加载env变量,然后加载文件等

然而,对我来说,最好的解决方案是如何将环境变量传递给应用程序。使用云构建的yaml

它允许我使用GAE flexible environment for NodeJ实现以下部署流程:

  1. 合并到我的Github主分支会触发云构建

这检查了我所有的盒子,是一个相当简单的解决方案,但是,这绝对不是一个受欢迎的解决方案,所以我在这里错过了什么吗?

最重要的是,是否存在安全问题?

共有2个答案

东门奕
2023-03-14

我采用的另一个解决方案是将env变量直接存储在Cloud Build触发器替换变量中,并使用自定义Cloud Builderenvsubt来渲染模板化的app.yaml

我找不到关于替换变量如何存储在Cloud Build触发器中的文档(这里的任何参考都会很有帮助)。然而,我认为谷歌云中的大多数数据在静止时加密,在使用和传输时加密。主要缺点是这些值以纯文本显示,因此API键等敏感信息不会被遮挡,任何有权访问触发器的人都可以看到敏感信息。

一个好处是,这使模板化的app.yaml接近您将使用它的代码,并且可以在同一个拉取请求中进行审查。此外,您不需要使用其他服务,例如Google Storage。

步骤:

  1. envsubstCloud builder添加到项目中,请参见此处的说明
runtime: <your runtime>

service: ${GAE_SERVICE}

env_variables:
  MY_VAR: ${MY_VAR}
  MY_VAR_2: ${MY_VAR_2}
steps:
- id: "render-app-yaml"
  name: "gcr.io/${PROJECT_ID}/envsubst"
  env:
  - "GAE_SERVICE=${_GAE_SERVICE}"
  - "MY_VAR=${_MY_VAR}"
  - "MY_VAR_2=${_MY_VAR_2}"
  args: ["app.yaml"]

当我做研究时,我也找不到像这样的解决方案。欢迎任何反馈。

阳昊
2023-03-14

我很惊讶你是如何做你的研究的,你实际上收集了所有可能的方法来实现它。

正如您所提到的,有很多方法可以将变量传递给应用程序,但我相信您提出的解决方案(将变量存储在Google Cloud Storage中,并使用Google Cloud Build检索它们)最适合您的目的。它不需要太多代码,而且很优雅,我希望这篇文章能帮助人们意识到这个解决方案。考虑到您的安全问题,此解决方案包括高度安全性,因为您可以将存储桶中的文件设置为只能从Google Cloud Build和项目所有者处访问。

 类似资料:
  • 我试图把我的头缠在这个问题上2天现在,我找不到任何正确的解决方案在网上和论坛上这个问题。 我无法使用@login\u required decorator在flask应用程序中保护dash应用程序。我可以使用blueprint route中的@login\u调用dash应用程序,以确保其安全并将其重定向到dash应用程序。 但是如果我直接调用dash-applike_localhost:5000/

  • 目前,我已经使用eclipse RCP构建了一个应用程序。应用程序可以创建多个产品,将其保存在XML文件中,然后将文件加载到应用程序中并显示在表中。我使用JAXB对XML文件进行整理和解压。 当前的问题发生在我想要部署或导出应用程序时。在日志文件中浏览应用程序后,我发现以下错误: 带有XML文件的rcp应用程序 [命令线程]1:CMD\u TABLE\u CHANGE\u PRODUCT\u DA

  • 有人可以帮助我解决以下问题吗? 场景。我有一个运行在Azure虚拟机上的Windows服务。服务接收文件,以某种方式修改它们(我们假设它给Word文件添加了自定义属性)并使用MIP SDK用template ID保护它们。 问题。失败,但有以下异常: 出现一个或多个错误。ServiceDiscoveryHelper::GetServiceDetails-无法计算域:许可证域、标识和云endpoin

  • 问题内容: 我正在创建具有类似以下docker项目的问题的映像: Docker文件 env.sh 我用 并运行它 输出是 我的环境变量丢失。 在实际的项目中,我必须为安装IBM DB2客户机的源程序提供一个较长的复杂脚本,该脚本还设置了环境变量。如何在不阅读整个安装过程并在dockerfile中设置所有变量的情况下实现它? 编辑:在实际项目中,文件是在安装过程中创建的,并且不能从容器外部使用。根据

  • 我有一个应用程序,有功能安装其他应用程序时,用户的要求。但它不会将用户重定向到Play Store,只需下载apk并安装即可。当我这样做时,如果我使用搜索栏搜索它,播放商店就会识别它已经安装了,但它不会在“我的应用程序”中显示该应用程序,并且当有任何更新时也不会更新这个已安装的应用程序。

  • 我必须使用apache Nutch设计一个基于Java/Java EE的搜索引擎。我在互联网上搜索了很多关于apache nutch安装的文章,但找不到任何关于java程序访问或控制apache nutch进行爬行的文章/教程。