2017-03-05 119 views
2

我在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

所以我的問題是,有沒有什麼標準執行這種公共密鑰存儲的?如果是的話,他們是什麼?

回答

1

如果安全性並不重要:

如果安全是非常重要的:

老實說還有一堆更多的選擇,但這些都是一些最有名的和由DevOps社區審查。

+0

感謝您的回答。我打算通過密鑰存儲的「私鑰」簽署微服務A「公鑰」,並將其發送給微服務B.密鑰存儲的公鑰將本地存儲在微服務B中。因此,微服務B可以驗證,沒有人攔截了關鍵存儲和微服務之間的通信。我可以使用上面提到的任何服務自動執行此過程嗎? – maamaa

+1

@maamaa是的,您可以使用這些軟件提供的各種語言的API來編寫該過程並使其自動化。 –

2

披露:我是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)相關聯。這將告訴你容器的圖像,它應該告訴你服務的身份。

這個問題有很多微妙之處,對於每個容器環境,解決方案都有所不同。