是否有任何存儲Google App Engine密鑰的非可怕方法?或者,至少比將它們檢入源代碼管理更可怕?GAE:存儲密鑰的最佳實踐?
回答
不完全是一個答案:
- 如果你把鑰匙在模型中,誰能夠部署可以閱讀從模型的鑰匙,並重新部署,以掩蓋他們的蹤跡。雖然Google允許您下載代碼(除非您禁用此功能),但我認爲它只保留每個編號版本的最新副本。
- 如果您將密鑰保存在未簽入的配置文件中並禁用代碼下載,那麼只有擁有密鑰的人才能成功部署,但沒有人無法讀取密鑰而無需偷偷摸摸地進入部署(可能不那麼困難) 。
在一天結束的時候,誰能夠部署可以在鍵搞定,所以問題是你是否認爲風險是由在數據存儲存儲密鑰(你可能會進行備份,例如最小化)或部署者的機器上。
一個可行的替代方案可能是將兩者結合:將加密的API密鑰存儲在數據存儲中,並將主密鑰放入配置文件中。這有一些潛在的不錯的功能:
- 攻擊者需要同時訪問數據存儲的副本和配置文件的副本(大概開發商不就一臺筆記本電腦數據存儲備份而失去它的培養)。
- 通過在配置文件中指定兩個密鑰,您可以執行密鑰翻轉(因此攻擊者需要一個類似年齡的數據存儲/配置)。
- 使用非對稱加密技術,您可以使開發人員無需讀取其他人就可以將API密鑰添加到數據存儲區。
當然,你要上傳密碼到谷歌的服務器,這可能會或可能不會被視爲「出口」與通常的法律問題的密碼(如什麼,如果谷歌建立了一個亞太數據中心?) 。
加密出口法規通常指的是導出加密代碼或算法,而不是加密數據。 .. – poolie
請務必在此頁面查看Remko的回答。 –
這裏沒有簡單的解決方案。將密鑰檢入存儲庫是不好的,因爲它檢查不相關的配置細節,並且因爲它可能暴露敏感數據。我通常爲此創建一個配置模型,只有一個實體,並在第一次部署之後(或每當它們發生更改時)在其上設置相關的配置選項和密鑰。
或者,您可以檢入示例配置文件,然後將其從版本控制中排除,並在本地保留實際密鑰。然而,這需要一些方法來分配密鑰,並且使開發人員無法部署,除非他們擁有生產密鑰(並且全部容易意外地將示例配置文件部署到實時配置文件上)。
三種方式我能想到的:在數據存儲中
- 存儲它(可以使用base64編碼多了一個層次間接 )部署期間
- 把它作爲環境變量通過命令行PARAMS 。
- 保留一個配置文件,git忽略它並從服務器讀取它。這裏這個文件本身可以是一個.py文件,如果你使用的是python部署,那麼不需要讀取存儲.json文件的&。
注意:如果您正在使用conf文件路由,請不要將此JSON存儲在靜態公共文件夾中!
在此期間,谷歌增加了密鑰管理服務:https://cloud.google.com/kms/
你可以使用它存儲他們在一個數據庫之前加密你的祕密,或將它們存儲在加密的源控制。只有「解密」訪問KMS和祕密的人才能夠使用它們。
事實上,可以部署代碼的人總是能夠獲得你的祕密(假設你的GAE應用程序需要能夠使用這些祕密),但是根據我的想法,沒有辦法。
- 1. 在GAE/python中存儲密碼的最佳實踐
- 2. Django存儲訪問密鑰的最佳實踐
- 3. Rails - 存儲密鑰/值散列的最佳實踐
- 4. 使用數據存儲在Java GAE中存儲關係的最佳實踐
- 5. 存儲密鑰的最佳做法
- 6. 存儲表達式的最佳實踐
- 7. 存儲數據的最佳實踐
- 8. ASP.Net MVC存儲CustomIdentity的最佳實踐
- 9. 存儲svg圖標的最佳實踐?
- 10. 什麼是加密/解密密鑰管理最佳實踐
- 11. 在app.yaml中存儲祕密的最佳實踐
- 12. 存儲和更新外部API密碼的最佳實踐
- 13. 在Windows Azure中存儲密碼的最佳實踐
- 14. 最佳實踐 - 存儲過程記錄
- 15. 存儲庫模式最佳實踐
- 16. 常用存儲庫maven最佳實踐
- 17. 備份s3存儲桶最佳實踐
- 18. 最佳實踐來存儲Web服務密碼
- 19. WCF UserNameOverTransport最佳實踐,以存儲用戶名和密碼
- 20. 爲外部API存儲密碼 - 最佳實踐
- 21. 個人私鑰的最佳實踐
- 22. Azure表:選擇分區/行密鑰的最佳實踐
- 23. 使用API密鑰保護多個RESTful API的最佳實踐
- 24. 爲Symfony transaltion組件命名密鑰的最佳實踐
- 25. 密鑰/證書管理的最佳實踐
- 26. GAE數據存儲密鑰使用
- 27. 緩存 - 最佳實踐
- 28. 緩存最佳實踐
- 29. GAE(Python)最佳實踐:從JSON文件或數據存儲加載配置?
- 30. 什麼是存儲API密鑰和加密密鑰的最佳方式?
相關的[Google App Engine問題](https://code.google.com/p/googleappengine/issues/detail?id=8538) –