我正在构建一个将在Google App Engine(GAE)上运行的应用程序。它将需要访问用户在其他系统(例如用户的Nest恒温器,Yahoo邮件)中存储的数据。在GAE上运行的应用程序将允许用户为其他系统提供凭据。该应用程序会将这些凭据存储在Google Cloud(数据存储区)中,以供以后代表用户在Google Compute Engine上运行的应用程序使用。该应用程序还允许OAuth允许用户允许应用程序代表用户访问外部系统。该应用程序需要在Google Cloud中存储用户凭据(用户名和密码)或OAuth访问令牌。
应用程序需要在存储密码之前加密密码,并且能够解密数据以将其发送到外部系统。也就是说,系统需要使用对称加密,因此需要安全地管理密钥。
应用程序如何安全地将这些机密存储在Google Cloud Datastore(数据存储区)中?我想我正在寻找像Google CloudHSM for Google这样的东西。也就是说,我想用种子和密钥id存储每个秘密,并使用密钥id从密钥管理系统获取密钥。此实现还允许进行密钥轮换和其他标准安全实践。
我认为我正在寻找提供机密管理的Google云服务或Google API,并且只允许具有适当Google应用标识符的应用访问这些机密。
Google Cloud或Google API中是否有可以管理机密的服务?我应该考虑另一种架构吗?
顺便说一句,该应用程序使用Google Identity Toolkit(GitKit)来验证和授权用户使用GAE托管的应用程序。该应用程序允许用户使用联合身份或用户名和密码通过GitKit创建帐户。
谢谢, 克里斯
答案 0 :(得分:2)
与此同时,Google还添加了密钥管理服务:https://cloud.google.com/kms/
你可以,例如在将数据存储到数据库之前使用它来加密数据。或者,使用KMS加密AES密钥以加密您的数据,并可能在某处保留AES密钥的备份,以防您无法访问KMS。
答案 1 :(得分:1)
App Identity Service可能正是您所寻找的https://cloud.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_systems
它允许您使用特定于应用程序的私钥对内容进行签名,并提供轮换证书以验证签名内容。
答案 2 :(得分:1)
据我所知,答案是你不能。你要找的是等同于KMS。这项服务让你创建和管理密钥,并做一堆你自己的加密。它非常酷,只需几行简单的代码就可以让您快速完成非常强大的加密。 Azure有一个名为KeyVault的类似服务。据我所知,它缺乏自动密钥生成和轮换,但除此之外它还不错。在此回复时,Google没有相应的服务。他们有一个内部KMS,用于加密操作,你可以提供自己的密钥,但这就是它。与KeyVault不太一样,没有像KMS那样。
那说有希望。你可以做以下两件事之一:
答案 3 :(得分:1)
您可以将密钥存储在存储中(例如,在您选择的数据存储区,Google云端存储区或其他存储系统中),并使用Google的Cloud KMS中的密钥对其进行加密。
Here来自Google的一些关于秘密管理的文档,here是一个使用Cloud KMS在应用层专门加密Google云端存储数据的代码库。< / p>
答案 4 :(得分:0)
有关提供用于安全存储机密的API的Google Cloud托管服务,请参见Google Cloud Secret Manager了解详情。
Secret Manager是用于API密钥,密码,证书和其他敏感数据的安全,便捷的存储系统。 Secret Manager提供了一个集中的地方和单一的真理来源,可以跨Google Cloud管理,访问和审计秘密。