如何为微服务创建公用密钥存储?

问题描述:

我在Docker环境中实现了一套微服务。而且这些服务中的每一个都使用JWT令牌相互通信。当服务A调用服务B如何为微服务创建公用密钥存储?

  1. 服务A,用自己的私钥签名的令牌,并传递给服务 乙
  2. 服务B,获取ServiceA的从公共密钥存储在公共密钥和验证令牌

公钥/私钥生成过程由微服务本身完成,然后它们将公钥传递给公钥存储。因此,公共密钥存储需要做的唯一的事情,

  1. 商店公钥由服务发送
  2. 发送正确的公钥对服务要求

我所要做的是类似到这个图中显示的内容。

I got this image from

我从上图:https://www.youtube.com/watch?v=dBdZrw2pPvc&t=462s

所以我的问题是,有没有什么标准执行这种公共密钥存储的?如果是的话,他们是什么?

如果安全性并不重要:

如果安全是非常重要的:

老实说还有一堆更多的选择,但这些都是一些最有名的和由DevOps社区审查。

+0

感谢您的回答。我打算通过密钥存储的“私钥”签署微服务A“公钥”,并将其发送给微服务B.密钥存储的公钥将本地存储在微服务B中。因此,微服务B可以验证,没有人拦截了关键存储和微服务之间的通信。我可以使用上面提到的任何服务自动执行此过程吗? – maamaa

+1

@maamaa是的,您可以使用这些软件提供的各种语言的API来编写该过程并使其自动化。 –

披露:我是Conjur的首席技术官。

考虑工作流程:

  1. 服务A的容器启动。
  2. 它生成一个新的密钥对。
  3. 它将公钥提交给公钥存储。
  4. 公钥存储接收公钥。
  5. 公钥存储将其收到的公钥与身份“service-a”相关联。
  6. 服务A标志,以服务B.请求
  7. 服务B询问服务A.
  8. 密钥存储提供的公开密钥(多个)已知的公共密钥(一个或多个)密钥存储。
  9. 服务B验证签名是否与其中一个密钥匹配。

公共密钥存储必须确保:

  • 存放在防篡改方式的公共密钥。
  • 以防篡改的方式将每个公钥关联到服务标识。
  • 为管理员提供一些操作密钥存储的方法(例如,死容器的取消密钥)。
  • 保存一切发生的审计记录。

但还有一点很难。在步骤(5)中,当密钥存储接收到服务A的密钥时,它需要验证密钥实际来自服务A,而不是冒名顶替者。换句话说,它必须验证请求。

你如何做到这一点取决于你的基础设施的细节。如果您使用的是原始Docker(而不是Kubernetes),则可以使用服务器上的代理将容器的IP地址与机器上的容器列表(docker ps)相关联。这将告诉你容器的图像,它应该告诉你服务的身份。

这个问题有很多微妙之处,对于每个容器环境,解决方案都有所不同。