在使用 Kube Bench 的过程中注意到,其指导依据来自于CIS Benchmark,于是顺藤摸瓜,下载了 CIS Kubernetes Be nchmark 的 PDF 版本,全文有两百多页,阅读量还蛮大的,因此对其进行整理,便于大家参考使用。

简介


CIS 的指导原则里把建议行为分成了两级:

  • 一级:使用该建议不会造成负面影响。
  • 二级:仅建议在非常强调安全性的系统中使用,可能对系统有副作用。

另外还将具体的检测结果分为计分和不计分两种结果。

以上两个维度可以用来对系统进行现状评估,也有助于读者选择性地采纳加固措施。

整个指南分为五个部分:

  1. 控制平面组件
  2. etcd
  3. 控制平面配置
  4. 节点配置
  5. 策略

检查项概要

  1. 所有运行参数文件、kubeconfig 文件以及证书,权限至少应为 644 并且属于 root:root

  2. API Server

  • 禁用:AlwaysAdmit
  • 启用:AlwaysPullImages、AlwaysAdmit、EventRateLimit、ServiceAccount、NamespaceLifecycle、PodSecurityPolicy、NodeRestriction
  • 启用 Node,RBAC 认证
  • 禁用 Token 和 Basic 认证
  • 禁用 Alwaysallow
  • 关闭匿名访问
  • 禁止明文通信
  • 南向和北向通信
  • 认证
  • Admission Control
  • 关闭 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

  • hostPID
  • hostIPC
  • hostNetwork
  • allowPrivilegeEscalation
  • runAsUser.rule
  • NET_RAW
  • 使用 PSP 不应泛泛使用 privileged
  • 使用 PSP 谨慎控制如下授权
  • 不应提供全面放行的 PSP 策略

网络策略和 CNI

  • 支持策略的 CNI
  • 所有命名空间都定义网络策略

Secret 管理

  • 建议使用文件而非环境变量
  • 使用外部 Secret 存储

扩展准入控制

  • 保障镜像来源

通用策略

  • 命名空间隔离
  • 在 Docker 中启用 seccomp
  • 为 Pod 和容器启用 Security context
  • 不用缺省命名空间

附件

暗号:cis,获取原文下载链接,其中包含所有检查项目的详细解释,以及检查工作表。