【问题标题】:How to keep keys out of repo when using AppEngine with Go?将 AppEngine 与 Go 结合使用时,如何使密钥远离存储库?
【发布时间】:2016-09-23 21:40:54
【问题描述】:

我有一个用 Go 编写的 AppEngine Classic 应用程序,作为其中的一部分,我有一些我不想在代码仓库中包含的键。

我想在 repo 中有默认密钥用于测试目的,但对生产密钥保密。我知道我可以使用 .gitignore 文件指定哪些文件不上传到存储库。但是,我不确定执行此操作的最佳方法是什么,以便其他开发人员可以在不访问文件文件的情况下构建和测试代码。

什么是最实用的方法,可以将密钥保留在 repo 之外,同时在包含密钥的文件不存在时仍然让代码编译和测试?

【问题讨论】:

  • 是否可以选择在数据存储中存储和读取密钥?如果是这样,那将解决您的问题。
  • @icza 数据存储区可以被许多不应访问私钥的人读取(通过数据存储区查看器),因此这不是一个选项。

标签: google-app-engine go key


【解决方案1】:

由于您希望存储库中的默认(测试)密钥,以便其他人可以测试您的代码,但您希望将您的私钥保密(在存储库之外),我会采用具有 2 个单独文件夹的解决方案,一个用于测试密钥,一个用于私钥。

显然,私钥文件夹可以转到.gitignore(因此不会被回购),您可以在运行时通过逻辑决定密钥文件夹。

最简单的逻辑是首先查找私钥文件夹(该文件夹仅存在于您的计算机中),如果不存在,则继续查找测试密钥文件夹。

你可以为这个逻辑增添趣味,例如允许使用 cmd 标志或 env 变量绕过私钥文件夹,即使它存在。在生产环境中只查找私钥文件夹也是合理的。

但请注意/注意可以下载生产代码,例如使用以下命令:

appcfg.py download_app -A <your_app_id> -V <your_app_version> <output-dir>

只有上传代码的开发者和应用所有者才能下载。

在此处查看更多信息:Downloading Your Source Code

【讨论】:

  • 由于没有文件系统,您如何在 AppEngine 中查找文件夹。我已经尝试过您的确切解决方案,但是在调用通常会检查文件或文件夹的 go 代码时出现错误。
  • @JohnGB 有文件系统,你不能写也不能读所有东西,但是你可以读你应用的 application 文件。必须使用相对路径,详情见相关问题:Correct way to read file in Go AppEngineHow do I store the private key of my server in google app engine?
  • 相对文件路径解释了很多,谢谢。这解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 2021-11-28
  • 1970-01-01
  • 2022-10-23
  • 2013-12-23
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
相关资源
最近更新 更多