簡體   English   中英

加密數據庫:環境變量中的秘密與 Docker 的秘密?

[英]Encrypting Databases: Secret in Environment Variables vs Docker Secrets?

我正在開發一個應用程序,我希望對數據庫中的特定字段/表進行加密,因為我將存儲敏感信息。

我正在尋找選項並找到了兩種可能的解決方案:將加密密鑰存儲在環境變量或 Docker Secrets 中。

我剛剛了解了 Docker Secrets——所以我不完全確定它需要什么。

環境變量是存儲數據庫字段加密秘密的好地方嗎?

改用 Docker Secrets 怎么樣? 為什么它比環境變量更安全——攻擊者能否像檢查環境變量一樣檢查它?

歸根結底,您的流程需要具有解碼形式的加密密鑰才能使用它。 在標准 Docker 中,只有兩種選擇可以將其傳遞到環境變量中,或者將其存儲在綁定安裝到容器中的文件中。

傳統觀點認為,通過文件傳遞機密比通過環境變量更安全。 有時可能會看到另一個進程的環境( ps -Exargs -n1 -0 echo < /proc/12345/environ ),這將揭示這些秘密。 一個文件可以被設置為模式 0400,除了它的所有者之外的任何人都無法讀取,這更加萬無一失。 在Docker空間,一方面docker inspect也可以顯示環境變量; 另一方面,任何可以運行任何 Docker 命令的人都可以輕松獲得 root 訪問權限; 正確設置文件系統權限很棘手。

各種聚類系統還有其他方式來傳輸秘密值。 你提到了Docker 的秘密,但它們是 Docker 的 Swarm 集群管理器的一個特性; Kubernetes 有秘密 Nomad 與 Vault 機密管理器緊密集成 這些安裝到容器中的方式各不相同,但是(除了 Swarm 秘密)您可以選擇文件或環境變量。 對於 Kubernetes Secrets,將一些憑證存儲在 Secret 對象中並讓進程(Pod)將其作為環境變量使用是特別常見的。

兩個大問題是,您要保護自己免受什么侵害,以及您是否處於集群環境中?

  • 如果您在單個節點上並且您是唯一的 user ,則環境變量就好了; 如果沒有本地 shell,它們就無法恢復。

  • 如果您在具有多個用戶的單個節點上,您可能無法保護秘密:任何可以運行任何docker命令的人都可以docker inspect您的容器以查找其環境變量,但他們也可以docker run自己的 root shell 安裝主機文件系統並隨心所欲地四處閑逛。 如果 Docker 套接字和sudo訪問被鎖定,那么基於文件的方法可能會更好。

  • 如果您在集群環境中,請繼續使用它的秘密機制,但以更方便的任何形式使用它。 通常只有集群管理員可以直接登錄到節點,並且集群 API 不會顯示機密值(除非您有權讀回機密對象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM