2012-01-30 74 views
3

我正在构建GAE应用程序,需要使用加密密钥才能操作。我想避免将密钥存储在代码或持久数据存储区中,并且每次启动我的应用程序时都要上传密钥,以便在应用程序的整个生存期内从内存中驻留(从我上传密钥的时间开始直到没有实例正在运行。)是否有App Engine共享内​​存或同等解决方案?

据我所知,这可能与驻留后端,但这似乎太昂贵(最便宜的后端目前58 $ /月)只是为了保留一个值在内存中,并将其提供给其他实例需求。

请注意,我不是在寻找一个通用的强大的共享内存解决方案,只是一个基本上只写了一次并且读取很多次的值。谢谢。

+0

您是否试过MemCache? – Sameer 2012-01-30 17:15:02

+0

钥匙的寿命是多少? – proppy 2012-01-30 17:35:17

+0

@Sameer,在Memcache中并不保证存储的值的生命周期,(@proppy)只要我的任何实例存在,我就需要密钥才能存活。当我所有的实例死亡时,我也需要它“消失”。 我现在看到,与App Engine,这种想法可能有瑕疵:) 谢谢 – gnobal 2012-01-30 20:24:04

回答

4

我不认为这可以按照你希望的方式工作。 GAE中的数据源:

  1. 与您的应用程序(战争或其他)一起部署的文件。
  2. 每个实例的内存(前端或后端)。
  3. Memcache。
  4. 数据存储(或SQL现在,我想)。
  5. Blobstore。
  6. 通过http请求获取的信息(即将其存储在其他地方)。

根据您的提问,1和4都不在了。 2不能自行工作,因为实例的启动和停止超出了你的控制范围(否则它不会扩展),并且持久化实例很昂贵。 3不能单独工作,因为Memcache可以随时清除。 5实际上与数据存储没有区别,因为它永久存储在Google的服务器上。也许你可以尝试6(将其存储在其他地方),并在实例启动期间将其检索到每个实例的内存中。但我怀疑这并不是更好的安全方面(并且就此而言,与你所说的你想要的不匹配)。

+0

这几乎是我的结论。我希望我错过了其他一些选择。 – gnobal 2012-01-31 05:19:01

+0

我是唯一一个有这种要求的人吗?我想创建一个解决方案,即使有人闯入我的账户或以某种方式获取源代码,他们也无法获得密钥并解密服务器上的数据。 – gnobal 2012-01-31 05:25:21

+1

呵呵......如果有人知道你和你的应用程序足够好,可以入侵它,也许他们可以用下面一段时间让数据公开的东西来偷偷地代替代码!无论如何,我通常最终会将这类数据放入与应用程序一起部署的资源文件中......并不完美,但如果其他人拥有硬件,那么总会有限制。 – 2012-01-31 05:54:45

0

看来,如果一个内存缓存和本地存储解决方案可能的工作:

  1. 有你的服务器实例清除memcached的关键在退出和
  2. 现有的服务器实例写入/定期刷新键( 每个请求的例子)。

这样一来,只要一个实例可以运行,很可能不会出现这种情况。

如果发生密钥更改,也可以使用相同的机制来传播新的密钥和/或周期服务器实例。

+0

我认为,但由于我无法控制实例,因此此解决方案可能会引入一个“竞争”,即在正在关闭的实例清除内存缓存后,新实例即将出现。另一件事是,当新的实例出现时,对于实际保留在memcache中的密钥没有保证,所以这是另一个问题。 – gnobal 2012-01-31 05:22:51

相关问题