CKAD 學習筆記 - 權限控管

我們總是忘記對容器進行權限控管

CKAD 課程中提及了幾個跟 container 有關的安全性觀念,以前沒注意過,記錄一下

docker

在不少的安裝方法下我們會讓 dockerd 以 root 的使用者權限運行,這也意味著 dockerd、及所有的容器都可以用 root 權限存取系統資源。

在想象中容器化的軟體是被封閉在沙盒內運行——但實際上為非,容器化的技術並沒有真的去將資源做隔離,故一個跑在容器內的惡意程式仍然是有機會存取外面的系統資源的。

不過 docker 方也不是坐以待斃,在設計上它其實有引入部分的權限控制,故雖然這些腳本都是使用 root 的名義在運行,它們並無法完成所有 root 使用者能做的事情。舉例來說,在容器內的腳本並沒有權限去要求重新開機、或者檢查其他容器內的 process。相對的,當某個容器真的有需要使用到較多的權限時,則可以在 docker run 時加入 --cap-add--privileged 等選項來運行。

kubernetes

在 k8s 上最小的運行單位為 pod,但透過對 k8s object 的設定可以選擇將權限限縮在 pod 上面、或是針對特定的容器。透過 securityContext 即可設定對應的 pod 以特定的使用者、群組來運行。而我們也可以將 securityContext 移動到 containers 裏面以將權限的設定僅止於套用在特定的容器上。