简介:CIS Kubernetes 安全基准指南
在使用 Kube Bench 的过程中注意到,其指导依据来自于 CIS Benchmark,于是顺藤摸瓜,下载了 CIS Kubernetews Be nchmark 的 PDF 版本,全文有两百多页,阅读量还蛮大的,因此对其进行整理,便于大家参考使用。
简介
CIS 的指导原则里把建议行为分成了两级:
- 一级:使用该建议不会造成负面影响。
- 二级:仅建议在非常强调安全性的系统中使用,可能对系统有副作用。
另外还将具体的检测结果分为计分和不计分两种结果。
以上两个维度可以用来对系统进行现状评估,也有助于读者选择性地采纳加固措施。
整个指南分为五个部分:
- 控制平面组件
- etcd
- 控制平面配置
- 节点配置
- 策略
检查项概要
所有运行参数文件、kubeconfig 文件以及证书,权限至少应为
644
并且属于root:root
。API Server
- 南向和北向通信
- 关闭匿名访问
- 禁止明文通信
- 认证
- 启用 Node,RBAC 认证
- 禁用 Token 和 Basic 认证
- 禁用 Alwaysallow
- Admission Control
- 禁用:AlwaysAdmit
- 启用:AlwaysPullImages、AlwaysAdmit、EventRateLimit、ServiceAccount、NamespaceLifecycle、PodSecurityPolicy、NodeRestriction
- 关闭
profiling
- 启用审计日志
- 启用请求超时
- 启用
--service-account-lookup
--tls-cipher-suites
仅使用新的、强加密算法- 使用
oidc
等模式来代替客户端证书认证。
- 南向和北向通信
Controller Manager
- 关闭
profiling
- 开启
--use-service-account-credentials
- 绑定
127.0.0.1
- 启用
--service-account-private-key-file
--feature-gates
启用RotateKubeletServerCertificate
- 关闭
Scheduler
- 关闭
profiling
- 绑定
127.0.0.1
- 关闭
ETCD
- 启用节点间和客户端的双向认证
- 设置数据文件权限
- 禁用
--auto-tls
- 使用独立的 CA 证书
工作节点
- Kubelet、Kube-proxy 的服务和配置文件权限
- 关闭匿名访问
--authorization-mode
禁用AlwaysAllow
- kubelet 参数
--read-only-port
为 0 --streaming-connection-idle-timeout
不应设置为 0--protect-kernel-defaults
设置为true
--make-iptables-util-chains
设置为true
- 不要设置
--hostname-override
- HTTPS 访问
--rotate-certificates
设置为true
--event-qps
设置足够高,或者为0
--feature-gates
启用RotateKubeletServerCertificate
RBAC 和 ServiceAccount
- 仅在需要时才使用
cluster-admin
角色 - 限制对
secret
的访问 - 限制使用通配符
- 限制分配 Pod 创建权限
- 仅在需要时才加载 Token,缺省将 automountServic eAccountToken 为
false
- 使用不同的 ServiceAccount
- 仅在需要时才使用
Pod Security Policy
- 使用 PSP 不应泛泛使用
privileged
- 使用 PSP 谨慎控制如下授权
hostPID
hostIPC
hostNetwork
allowPrivilegeEscalation
runAsUser.rule
NET_RAW
- 不应提供全面放行的 PSP 策略
- 使用 PSP 不应泛泛使用
网络策略和 CNI
- 支持策略的 CNI
- 所有命名空间都定义网络策略
Secret 管理
- 建议使用文件而非环境变量
- 使用外部 Secret 存储
扩展准入控制
- 保障镜像来源
通用策略
- 命名空间隔离
- 在 Docker 中启用 seccomp
- 为 Pod 和容器启用 Security context
- 不用缺省命名空间