2012-01-30 71 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

相關問題