我有一个与这里提到的问题相同的问题:Securely storing environment variables in GAE with app.yaml-即:
”“我需要将API密钥和其他敏感信息作为环境变量存储在app.yaml中,以便在GAE上进行部署。问题是,如果我将app.yaml推送到GitHub,则该信息将变为公开(而非好)。”
此外,我想检查以下框:
我的研究得出以下结论:
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? 的许多有用信息,作者列出了三种解决方法及其不被使用的原因:
然而,最适合我的解决方案来自How to pass environment variables to the app.yaml using cloud build
它允许我使用针对Node.js的GAE灵活环境进行以下部署:
这会检查我的所有复选框,这是一个相当简单的解决方案,但,这绝对不是一个受欢迎的解决方案,所以我在这里错过了什么吗? < / p>
最重要的是是否有安全方面的顾虑?
答案 0 :(得分:2)
我对您如何进行研究感到惊讶,您实际上收集了所有可能的方法来实现它。
正如您提到的,有很多方法可以将变量传递给应用程序,但是我认为您提出的解决方案(将变量存储在Google Cloud Storage中并通过Google Cloud Build检索它们)是您的最佳选择。它不需要太多的代码,而且很优雅,我希望这篇文章可以帮助人们意识到这种解决方案。关于您的安全问题,您可以set the file in the bucket to only be accessible {@ 3}}从Google Cloud Build和项目的所有者那里获得高度的安全性。
答案 1 :(得分:1)
我采用的另一种解决方案是将env变量直接存储在Cloud Build触发器替换变量中,并使用custom Cloud Builder envsubt
来呈现模板化的app.yaml
。
我找不到有关替换变量如何存储在Cloud Build触发器中的文档(此处的任何参考将对您有所帮助)。但是,我认为Google Cloud中的大多数数据都是静态加密的,在使用和传输时也会加密。主要缺点是这些值以纯文本形式显示,因此不会混淆诸如API密钥之类的敏感信息,并且任何有权访问触发器的人都可以看到该敏感信息。
一个好处是,这样可以使模板化的app.yaml
与您将使用的代码保持接近,并且可以在相同的请求中对其进行检查。另外,您不需要使用其他服务,例如Google Storage。
步骤:
envsubst
云构建器添加到您的项目中,请参阅说明here。app.yaml
文件,例如runtime: <your runtime>
service: ${GAE_SERVICE}
env_variables:
MY_VAR: ${MY_VAR}
MY_VAR_2: ${MY_VAR_2}
app.yaml
中添加一个cloudbuild.yaml
模板渲染步骤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"]
_GAE_SERVICE
,_MY_VAR
和_MY_VAR_2
。注意:触发器中的用户定义变量以_
为前缀。在进行研究时,我也找不到任何这样的解决方案。欢迎任何反馈。