Security Context 的目的是限制不可信容器的行爲,保護系統和其他容器不受其影響。
Kubernetes 提供了三種配置 Security Context 的方法:
Container-level Security Context:僅應用到指定的容器
Pod-level Security Context:應用到 Pod 內所有容器以及 Volume
Pod Security Policies(PSP):應用到集群內部所有 Pod 以及 Volume
Container-level Security Context
Container-level Security Context 僅應用到指定的容器上,並且不會影響 Volume。比如設置容器運行在特權模式:
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world-container
# The container definition
# ...
securityContext:
privileged: true
Pod-level Security Context
Pod-level Security Context 應用到 Pod 內所有容器,並且還會影響 Volume(包括 fsGroup 和 selinuxOptions)。
Pod Security Policies(PSP)
Pod Security Policies(PSP)是集群級的 Pod 安全策略,自動爲集群內的 Pod 和 Volume 設置 Security Context。
使用 PSP 需要 API Server 開啓 extensions/v1beta1/podsecuritypolicy,並且配置 PodSecurityPolicy admission 控制器。
由於 中從代碼庫中刪除。PodSecurityPolicy API 不夠靈活、認證模型不夠完善且配置更新繁瑣等缺陷,PodSecurityPolicy 已在 v1.21 正式棄用,並將在 v1.25 中從代碼庫中刪除。已經使用 PodSecurityPolicy 的用戶推薦遷移到 Open Policy Agent。
Kubernetes 版本
Extension 版本
defaultAllowPrivilegeEscalation
限制容器的 host 端口範圍爲 8000-8080:
限制只允許使用 lvm 和 cifs 等 flexVolume 插件:
SELinux (Security-Enhanced Linux) 是一種強制訪問控制(mandatory access control)的實現。它的作法是以最小權限原則(principle of least privilege)爲基礎,在 Linux 核心中使用 Linux 安全模塊(Linux Security Modules)。SELinux 主要由美國國家安全局開發,並於 2000 年 12 月 22 日發行給開放源代碼的開發社區。
可以通過 runcon 來爲進程設置安全策略,ls 和 ps 的 - Z 參數可以查看文件或進程的安全策略。
修改 / etc/selinux/config 文件方法:
通過命令臨時修改:
查詢 SELinux 狀態:
這會自動給 docker 容器生成如下的 HostConfig.Binds:
對應的 volume 也都會正確設置 SELinux: