是否存在为Google App Engine存储密钥的非常糟糕的方法?或者,至少比将它们检入源代码控制要差一些?
答案 0 :(得分:9)
与此同时,Google添加了密钥管理服务:https://cloud.google.com/kms/
您可以使用它来加密您的秘密,然后将它们存储在数据库中,或者将它们存储在加密的源代码管理中。只有同时解密的人才会解密。访问KMS和您的秘密将能够使用它们。
事实上,能够部署代码的人总能找到你的秘密(假设你的GAE应用程序需要能够使用秘密),但就我而言,没有办法解决这个问题。可以想到。
答案 1 :(得分:6)
这里没有简单的解决方案。检查密钥到存储库是不好的,因为它检查不相关的配置详细信息,因为它可能会暴露敏感数据。我通常只为一个实体创建一个配置模型,并在第一次部署后(或者每次更改时)在其上设置相关的配置选项和密钥。
或者,您可以签入示例配置文件,然后将其从版本控制中排除,并在本地保留实际的密钥。但是,这需要某种方式来分发密钥,并且使得开发人员无法部署,除非他们拥有生产密钥(并且所有这些都很容易意外地将示例配置文件部署到实时密钥上)。
答案 2 :(得分:5)
不完全是答案:
在一天结束时,任何可以部署的人都可以获得密钥,因此问题是您是否认为通过将密钥存储在数据存储区(例如,您可以备份)或部署者的机器。
可行的替代方案可能是将两者结合起来:将加密的API密钥存储在数据存储区中,并将主密钥放入配置文件中。这有一些很好的功能:
当然,您正在将加密上传到Google的服务器,这些服务器可能会或可能不会像通常的法律问题一样“导出”加密(例如,如果Google设置亚太数据中心会怎么样?)。
答案 3 :(得分:1)
我能想到的三种方式:
注意:如果您正在使用conf-file路由,请不要将此JSON存储在静态公用文件夹中!
答案 4 :(得分:0)
如果您正在使用Laravel并将密钥存储在数据存储区中,则此包可以简化使用缓存管理性能的过程。 https://github.com/tommerrett/laravel-GAE-secret-manager
答案 5 :(得分:0)
Google应用引擎默认情况下会为应用引擎创建凭据,并将其注入环境中。
Google Cloud客户端库使用一种称为“应用程序默认凭据”(ADC)的策略来查找您的应用程序的凭据。当您的代码使用客户端库时,该策略将按以下顺序检查您的凭据:
首先,ADC检查是否设置了环境变量GOOGLE_APPLICATION_CREDENTIALS。如果设置了变量,则ADC使用变量指向的服务帐户文件。
如果未设置环境变量,则ADC将使用Compute Engine,Google Kubernetes Engine,Cloud Run,App Engine和Cloud Functions提供的默认服务帐户为在这些服务上运行的应用程序。
如果ADC无法使用以上任一凭据,则会发生错误。
因此,第2点意味着,如果您使用IAM Admin
向服务帐户授予权限,则不必担心传递json键会使其芳香地工作。
例如
假设您的应用程序在App Engine Standard
中运行,并且希望访问Google Cloud Storage
。为此,您不必创建新的服务帐户,只需授予对ADC
的访问权限即可。
REF https://cloud.google.com/docs/authentication/production#finding_credentials_automatically