k8s安全策略
# 1. 容器安全
# o runAsRootAllowed(非 root 用户身份运行)
§ 目的:通过禁止以 root 用户启动容器,可以限制容器内进程的可用权限,降低被容器中恶意进程通过 root 权限入侵/破坏用户应用、主机甚至整个集群的风险。
§ 建议:修改 Dockerfile 创建一个非 root 用户并通过 User 指令使用这个用户,同时修改工作负载的 Pod Spec 中的 securityContext 定义,增加 runAsNonRoot: true 配置
# o runAsPrivileged(防止有特权的容器)
§ 目的:特权模式将给予容器内进程等同于直接在主机上运行所拥有的各种权限及访问能力。通过禁止以特权模式启动容器,可以降低被容器中的恶意进程通过容器逃逸或权限提升等手段入侵/破坏主机、集群的风险。如果确认当前工作负载确实需要以特权模式启动容器的话,可以忽略。
§ 建议:修改工作负载的 Pod Spec 内容,删除 privileged 字段。
# o privilegeEscalationAllowed(拒绝允许提升为根用户的容器)
§ 目的:禁止容器中的子进程拥有比父进程更高的权限,避免被容器中的恶意进程实现越权操作的风险。
§ 建议:修改Pod Spec,增加allowPrivilegeEscalation:false字段。
# o notReadOnlyRootFileSystem(用不可变的文件系统运行容器)
§ 目的:通过开启容器内的文件系统只读功能,可以降低被容器中的恶意进程恶意修改系统文件或敏感文件的风险
§ 建议:修改工作负载的 Pod Spec 中的 securityContext 定义,增加 readOnlyRootFilesystem: true,如果有需要修改某个目录下文件的需求,可以通过 volumeMounts 实现。
# o tagNotSpecified(指定镜像版本)
§ 目的:指定Tag的容器镜像,禁止未包含镜像Tag或者使用了latest作为镜像Tag,避免运行了非预期的容器镜像版本导致业务异常的风险。
§ 建议:修改Pod Spec,修改image字段,使用指定的镜像Tag并且不要使用latest作为镜像Tag
# o anonymousUserRBACBinding(配置匿名用户访问权限)
§ 目的:禁止匿名用户访问集群资源的配置项,避免被恶意匿名用户窃取集群敏感信息、攻击和入侵集群的风险。
§ 建议:根据实际情况删除允许匿名用户访问集群资源的权限配置项
# o 资源限制
§ cpuRequestsMissing(运行容器所需的最少CPU资源)
§ cpuLimitsMissing(运行容器所需的最大CPU资源)
§ memoryRequestsMissing(运行容器所需的最少内存资源)
§ memoryLimitsMissing(运行容器所需的最大内存资源)
# o 健康检测
- § readinessProbeMissing(就绪探针)
· 目的:检测容器内应用能否正常处理请求的探针。避免容器内应用异常无法处理请求时仍旧有请求发过来导致业务异常的风险
- § livenessProbeMissing(存活探针)
· 目的:检测容器内应用是否出现异常需要重启容器的探针。避免容器内应用异常需要重启容器才能恢复时未及时重启导致业务异常的风险。
# o 禁止共享主机功能
- § hostPID
· 风险:共享使用主机的PID namespace,存在Pod中容器攻击主机上进程、采集主机上进程数据的风险
· 建议:修改Pod Spec,删除hostPID字段
- § hostIPC
· 风险:共享使用主机的IPC namespace,存在Pod中容器攻击主机上进程、嗅探主机上进程数据的风险。
· 建议:修改Pod Spec,删除hostIPC字段。
- § hostNetwork
· 风险:共享使用主机的网络namespace,存在Pod中容器攻击主机网络、嗅探主机网络数据的风险。
· 建议:修改Pod Spec,删除hostNetwork字段。
- § hostPortSet
· 风险:把容器中监听的端口映射到主机指定端口上,存在挤占主机可用端口以及被非预期的请求方请求容器端口的风险。
· 建议:修改Pod Spec,删除hostPort字段
- § capabilitiesAdded
· 目的:禁止容器中的进程拥有SYS_ADMIN、NET_ADMIN、ALL等特权Linux Capabilities。避免被容器中的恶意进程通过这些特权入侵用户应用、入侵或破坏组件/集群的风险。
· 建议:修改Pod Spec,根据实际需求只添加必需的Linux Capabilities,删除不需要的Linux Capabilities。
# o 扫描容器镜像
§ 开源工具(clair/trivy/harbor-scanner)
§ 阿里云镜像扫描工具
# 2. 网络安全
# o 使用防火墙和基于角色的访问控制(RBAC)锁定对控制平面节点的访问
§ 控制master节点网络访问权限
§ 使用RBAC控制角色权限,不使用高权限的角色config
# o 限制对 Kubernetes etcd 服务器的访问
# o 配置控制平面组件,使用传输层安全(TLS)证书进行认证、加密通信
- § 使用6443加密端口访问
# o 设置网络策略来隔离资源
- § pod、svc之间的网络隔离策略
# 3. 日志审计
# o 启用审计记录(默认为禁用)
# o 在节点、Pod 或容器级故障的情况下,持续保存日志以确保可用性
# 4. 升级
# o 及时应用安全补丁和更新
# o 定期进行漏洞扫描和渗透测试
# o 移除不需要的功能组件
·