Nag*_*Nag 5 security encryption google-cloud-platform google-cloud-kms google-secret-manager
我正在构建一个 Node.js 应用程序,它从我需要访问的另一个应用程序接收长期访问令牌。我不想将这些访问令牌直接存储在数据库中,因为任何有权访问这些令牌的人基本上都可以用它做任何他们想做的事情。
我是 Cloud KMS 和此类系统的新手,但最近几个小时都在学习它。这似乎是解决我的问题的理想解决方案,但我不完全确定应该遵循什么策略来存储这些访问令牌:
以上哪项是使用 KMS 的正确方法?如果是选项 2,我还有其他问题:
谢谢你的帮助!
我认为最好的选择是使用Google 提供的 Node.js API来加密令牌并将生成的密文存储在数据库中。
当应用程序从其他应用程序接收到令牌时,它会使用 API 对其进行加密,并与数据库中的内容进行比较以查看其是否有效,这样纯文本令牌只有所有者才知道。
我可以使用单个密钥加密大量访问令牌,还是需要为每个访问令牌创建一个新密钥?
您可以使用相同的密钥加密任意数量的令牌。为每个令牌创建密钥很快就会变得难以管理,除非它们的密钥本身被泄露(很难想象只存储在谷歌),否则不会有重大风险。
如果我需要修改在 KMS 中加密的访问令牌,我可以简单地修改它还是需要销毁旧版本并再次加密?
KMS 不会存储您的数据(无论是加密的还是纯文本的),它只是存储加密或解密数据所需的密钥。
按照只存储加密版本令牌的方法,当您需要修改一个令牌时,应该如下所示:
关于密钥轮换,当发生这种情况时,新令牌将使用新密钥进行加密。旧令牌仍然无法加密,因为您的旧密钥仍在 KMS 上,只是不再用于加密。但是,如果您销毁了加密它们的密钥,那么它们将无法恢复。