一千萬個為什麽

搜索

將秘密傳遞給Docker容器



我有一個基礎docker鏡像,用於運行圖像分析軟件。對於從圖像創建的每個容器,有一組配置設置,其中一些是軟件用來分析和分發處理過的圖像的秘密(加密密鑰,客戶信息等)。我怎樣才能安全地將這些秘密傳遞給容器?

轉載註明原文: 將秘密傳遞給Docker容器

一共有 1 個回答:

您有3種方法可以獲取docker容器內應用程序的機密信息。前2個涉及docker配置。最後一個是讓您的應用直接從秘密商店獲取秘密。

1 - 環境變量

根據“12 Factor App”指南,秘密只是配置,應始終在環境中設置。您可以在docker運行期間將您的秘密設置為環境變量,並且您的應用程序可以從那裏訪問它們。

2 - 裝載量

您可以將所有秘密都放在特定的配置/機密文件中,然後將其作為安裝到您的實例上音量

3 - 從秘密商店取貨

正如@ 030所提到的,您可以使用Hashicorp Vault(或“Amazon Secrets Manager”或任何類似的服務)。
您的應用程序或邊車應用程序可以直接獲取所需的秘密,而無需處理Docker容器上的任何配置。此方法允許您使用動態創建的機密(此類系統的一個非常吸引人的功能),而不必擔心從文件系統或檢查docker容器的env變量可以查看的機密。

個人想法

I believe env variables is the way to go. It's easier to manage, and you can still pull from a secret store like Hashicorp Vault, if you have you CI build system pull the secrets during the build and set them when you deploy. You get the best of both worlds, and the added benefit of your developers not needing to write application code to fetch secrets. Devs should be focused on their code functionality, and not dealing with admin tasks like fetching passwords.

您的應用程序的代碼應該專註於它自己的應用程序功能本身,而不是處理後端任務,如獲取密碼。就像12 Factor App一樣。

Edit: changed last sentence to remove implication of Developer vs SysAdmin silo-ing. The tasks themselves should be separate from a code perspective, but DevOps is about the same persons keeping both in mind and not be limited.