使用Google App Engine JDK管理版本控制之外的安全配置

3

我的Google App Engine应用程序包括特权凭据(如OAuth和cookie签名密钥),我不想将它们检入到源代码控制中(即Git)。

我已经考虑将这些存储为appengine-web.xml文件中的系统属性或环境变量,但是这个文件包含许多其他我想要版本化的内容。在哪里存储“秘密”的应用程序数据是一个好的选择,以便我可以轻松地将其排除在源代码控制之外?


嗨@mustpax,你找到解决方法了吗? - Jaap
3个回答

1
我通常的做法是将凭据存储在一个安全的仓库中(只能由我信任的超级用户访问的文件),然后有一个后构建脚本。在源代码控制中,我在属性文件中放置了一个虚拟密码,然后后构建脚本在构建完成后运行并用真实密码替换虚拟密码。这样密码就不会出现在源代码控制中,但会在每次构建时显示出来。这需要自动化的构建/部署过程,但非常有效。

0

对于Java,我推荐使用spring-boot的外部化配置策略。这个想法是一堆配置源,位于顶部的覆盖下面的。

  1. 命令行参数
  2. 系统属性
  3. 环境变量
  4. 本地配置文件(application.yml或application.properties)
  5. 类路径下的配置文件

第4个通常在用户主目录的隐藏文件夹中,例如~/.myapp/application.yml。只有用户可以读取该文件。

对于您的问题,非机密的、版本控制的属性直接放在源代码中(上面的第5个)。机密信息也可以放在第5个位置,但使用虚拟值。真正的机密信息会在运行时从1、2、3或4中覆盖虚拟值。

您可以使用spring-boot或编写自己的代码遵循相同的策略。


0
将这些东西放入另一个文件/目录中,并使用.gitignore排除它们。

我已经了解了.gitignore。我想找出这个领域的最佳实践。我应该将这些内容存储在未版本化的Java文件中吗?是否有一种方法可以从appengine-web.xml包含另一个文件? - mustpax
我不确定在这种情况下什么是最佳实践,但是我会选择最适合存储数据的文件格式。可能是一个XML文件,在应用程序中加载它。 - copy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接