2011-06-28 180 views
22

是否有任何存儲Google App Engine密鑰的非可怕方法?或者,至少比將它們檢入源代碼管理更可怕?GAE:存儲密鑰的最佳實踐?

+0

相關的[Google App Engine問題](https://code.google.com/p/googleappengine/issues/detail?id=8538) –

回答

5

不完全是一個答案:

  • 如果你把鑰匙在模型中,誰能夠部署可以閱讀從模型的鑰匙,並重新部署,以掩蓋他們的蹤跡。雖然Google允許您下載代碼(除非您禁用此功能),但我認爲它只保留每個編號版本的最新副本。
  • 如果您將密鑰保存在未簽入的配置文件中並禁用代碼下載,那麼只有擁有密鑰的人才能成功部署,但沒有人無法讀取密鑰而無需偷偷摸摸地進入部署(可能不那麼困難) 。

在一天結束的時候,誰能夠部署可以在鍵搞定,所以問題是你是否認爲風險是由在數據存儲存儲密鑰(你可能會進行備份,例如最小化)或部署者的機器上。

一個可行的替代方案可能是將兩者結合:將加密的API密鑰存儲在數據存儲中,並將主密鑰放入配置文件中。這有一些潛在的不錯的功能:

  • 攻擊者需要同時訪問數據存儲的副本和配置文件的副本(大概開發商不就一臺筆記本電腦數據存儲備份而失去它的培養)。
  • 通過在配置文件中指定兩個密鑰,您可以執行密鑰翻轉(因此攻擊者需要一個類似年齡的數據存儲/配置)。
  • 使用非對稱加密技術,您可以使開發人員無需讀取其他人就可以將API密鑰添加到數據存儲區。

當然,你要上傳密碼到谷歌的服務器,這可能會或可能不會被視爲「出口」與通常的法律問題的密碼(如什麼,如果谷歌建立了一個亞太數據中心?) 。

+2

加密出口法規通常指的是導出加密代碼或算法,而不是加密數據。 .. – poolie

+0

請務必在此頁面查看Remko的回答。 –

6

這裏沒有簡單的解決方案。將密鑰檢入存儲庫是不好的,因爲它檢查不相關的配置細節,並且因爲它可能暴露敏感數據。我通常爲此創建一個配置模型,只有一個實體,並在第一次部署之後(或每當它們發生更改時)在其上設置相關的配置選項和密鑰。

或者,您可以檢入示例配置文件,然後將其從版本控制中排除,並在本地保留實際密鑰。然而,這需要一些方法來分配密鑰,並且使開發人員無法部署,除非他們擁有生產密鑰(並且全部容易意外地將示例配置文件部署到實時配置文件上)。

1

三種方式我能想到的:在數據存儲中

  1. 存儲它(可以使用base64編碼多了一個層次間接 )部署期間
  2. 把它作爲環境變量通過命令行PARAMS 。
  3. 保留一個配置文件,git忽略它並從服務器讀取它。這裏這個文件本身可以是一個.py文件,如果你使用的是python部署,那麼不需要讀取存儲.json文件的&。

注意:如果您正在使用conf文件路由,請不要將此JSON存儲在靜態公共文件夾中!

5

在此期間,谷歌增加了密鑰管理服務:https://cloud.google.com/kms/

你可以使用它存儲他們在一個數據庫之前加密你的祕密,或將它們存儲在加密的源控制。只有「解密」訪問KMS和祕密的人才能夠使用它們。

事實上,可以部署代碼的人總是能夠獲得你的祕密(假設你的GAE應用程序需要能夠使用這些祕密),但是根據我的想法,沒有辦法。