GAE:存储密钥的最佳实践?

Dav*_*ver 34 security google-app-engine

是否存在为Google App Engine存储密钥的非常糟糕的方法?或者,至少,比检查它们进入源代码管理更不可怕?

Rem*_*mko 10

与此同时,Google添加了密钥管理服务:https://cloud.google.com/kms/

您可以使用它来加密您的秘密,然后将它们存储在数据库中,或者将它们存储在加密的源代码管理中.只有同时"解密"访问KMS和您的秘密的人才能使用它们.

事实上,能够部署代码的人总能找到你的秘密(假设你的GAE应用程序需要能够使用这些秘密),但就我所能想到的那样,没有办法解决这个问题.


Nic*_*son 6

这里没有简单的解决方案.检查密钥到存储库是不好的,因为它检查不相关的配置详细信息,因为它可能会暴露敏感数据.我通常只为一个实体创建一个配置模型,并在第一次部署后(或者每次更改时)在其上设置相关的配置选项和密钥.

或者,您可以签入示例配置文件,然后将其从版本控制中排除,并在本地保留实际的密钥.但是,这需要某种方式来分发密钥,并且使得开发人员无法部署,除非他们拥有生产密钥(并且所有这些都很容易意外地将示例配置文件部署到实时密钥上).


tc.*_*tc. 6

不完全是答案:

  • 如果您将密钥保留在模型中,则任何可以部署的人都可以从模型中读取密钥,然后再次部署以覆盖其跟踪.虽然Google允许您下载代码(除非您禁用此功能),但我认为它只保留每个编号版本的最新副本.
  • 如果将密钥保存在未签入的配置文件中并禁用代码下载,则只有拥有密钥的人才能成功部署,但没有人可以在不将后门潜入部署的情况下读取密钥(可能不那么困难).

在一天结束时,任何可以部署的人都可以获得密钥,因此问题是您是否认为通过将密钥存储在数据存储区(例如,您可以备份)或部署者的计算机上来最小化风险.

一个可行的替代方案可能是将两者结合起来:将加密的API密钥存储在数据存储区中,并将主密钥放在配置文件中.这有一些潜在的好功能:

  • 攻击者既需要访问数据存储区的副本,也需要访问配置文件的副本(可能开发人员不会在笔记本电脑上备份数据存储区并将其丢失在火车上).
  • 通过在配置文件中指定两个密钥,您可以执行密钥翻转(因此攻击者需要具有相似年龄的数据存储/配置).
  • 使用非对称加密,您可以使开发人员可以将API密钥添加到数据存储区而无需读取其他密钥.

当然,那么你是将加密上传到谷歌的服务器,这可能会或可能不会被视为"导出"加密与通常的法律问题(例如,如果谷歌设立亚太数据中心怎么办?).

  • 加密出口法规通常是指导出加密代码或算法,而不是加密数据...... (4认同)
  • 请务必在此页面上查看 Remko 的回答。 (2认同)