主题
20 — 安全加固深度教材
K8s 安全加固是生产环境的必修课。本章覆盖 CIS Benchmark、Falco 运行时检测、Trivy 镜像扫描、Kyverno 策略引擎。
1. CIS Kubernetes Benchmark
1.1 核心检查项
CIS Benchmark 分两大部分:
控制面安全:
1.1.1 确保 apiserver 启用匿名认证 --anonymous-auth=false
1.1.2 确保基础认证禁用 --basic-auth-file 不存在
1.1.7 确保授权模式包含 RBAC --authorization-mode=RBAC
1.1.11 确保 Admission Controller 启用 --enable-admission-plugins
1.1.12 确保 LimitRanger 启用
1.1.19 确保证书启用 --profiling=false
1.2.x etcd 安全(TLS、数据加密)
1.3.x Controller Manager 安全
1.4.x Scheduler 安全
节点安全:
4.1.1 确保 kubelet 禁用匿名认证
4.1.2 确保 kubelet 启用授权
4.2.x kubelet 配置安全
策略:
5.1.x RBAC 和 ServiceAccount
5.2.x Pod Security Standards
5.3.x NetworkPolicy
5.4.x Secrets 管理
5.5.x 通用策略1.2 kube-bench 自动检查
bash
# 安装 kube-bench
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
# 查看结果
kubectl logs job/kube-bench | grep -E 'PASS|FAIL|WARN'
# 分类统计
kubectl logs job/kube-bench | grep -c PASS # 通过数
kubectl logs job/kube-bench | grep -c FAIL # 失败数
kubectl logs job/kube-bench | grep -c WARN # 警告数
# 修复示例:
# FAIL 1.2.20 确保 --profiling=false
# 修复:修改 kube-apiserver 配置添加 --profiling=false2. Falco — 运行时安全检测
2.1 Falco 架构
Falco 工作原理:
应用/容器 → 系统调用 → Falco eBPF/kernel module → 规则匹配 → 告警
检测能力:
- 容器内 shell 执行
- 敏感文件读取(/etc/shadow、SSH key)
- 网络连接异常(反向 Shell)
- 特权容器滥用
- 容器逃逸尝试2.2 自定义规则
yaml
# /etc/falco/rules.d/custom-rules.yaml
# 检测容器内执行 shell
- rule: Terminal Shell in Container
desc: 检测容器内启动 shell
condition: >
spawned_process and container and
proc.name in (bash, sh, zsh, csh)
output: >
Shell opened in container
(user=%user.name container=%container.name shell=%proc.name
parent=%proc.pname cmdline=%proc.cmdline)
priority: WARNING
tags: [container, shell]
# 检测敏感文件读取
- rule: Read Sensitive File
desc: 检测读取敏感文件
condition: >
open_read and container and
fd.name in (/etc/shadow, /etc/sudoers, /root/.ssh/authorized_keys)
output: >
Sensitive file read (user=%user.name file=%fd.name container=%container.name)
priority: CRITICAL
tags: [filesystem]
# 检测出站连接异常
- rule: Outbound Connection to Non-Standard Port
desc: 容器连接到非标准端口
condition: >
evt.type=connect and container and
fd.typechar=4 and
not fd.sport in (80, 443, 53, 3306, 6379, 9092)
output: >
Suspicious outbound connection (container=%container.name
dst=%fd.sip:%fd.sport)
priority: NOTICEbash
# 查看 Falco 告警
kubectl logs -n falco daemonset/falco --tail=50
# Falco 与 Falcosidekick 集成(告警发送到 Slack/钉钉/PagerDuty)
# falcosidekick 配置 webhook 转发3. Trivy — 漏洞扫描
bash
# 扫描镜像漏洞
trivy image nginx:latest
trivy image --severity HIGH,CRITICAL nginx:latest
# 扫描 K8s 集群
trivy k8s --report summary cluster
trivy k8s --report all --severity HIGH,CRITICAL cluster
# 扫描 IaC(Terraform/Helm/K8s YAML)
trivy config ./k8s-manifests/
# CI/CD 集成:阻止有严重漏洞的镜像部署
trivy image --exit-code 1 --severity CRITICAL myapp:v1.2.3
# 退出码 1 = 有 CRITICAL 漏洞,CI 失败
# Trivy Operator(集群内持续扫描)
# 安装 Trivy Operator
helm install trivy-operator aqua/trivy-operator -n trivy-system
# 自动扫描所有 Pod 的镜像并生成 VulnerabilityReport
kubectl get vulnerabilityreports -A | grep CRITICAL4. Kyverno — 策略引擎
yaml
# Kyverno 策略:禁止特权容器
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-privileged-containers
spec:
validationFailureAction: Enforce # Enforce=拒绝 / Audit=仅记录
rules:
- name: deny-privileged
match:
any:
- resources:
kinds: [Pod]
validate:
message: "Privileged containers are not allowed"
pattern:
spec:
containers:
- securityContext:
privileged: "false"
# Kyverno 策略:要求资源限制
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-resource-limits
spec:
validationFailureAction: Enforce
rules:
- name: check-limits
match:
any:
- resources:
kinds: [Pod]
validate:
message: "CPU and memory limits are required"
pattern:
spec:
containers:
- resources:
limits:
memory: "?*"
cpu: "?*"bash
# 查看策略违规
kubectl get policyreport -A
kubectl get clusterpolicyreport
# Kyverno vs OPA Gatekeeper:
# Kyverno:K8s 原生,YAML 策略,学习曲线低
# OPA Gatekeeper:Rego 语言,功能更强,学习曲线陡5. 面试高频问题
Q: K8s 安全加固的优先级?
Phase 1(立即):
- 禁用匿名认证、启用 RBAC
- 禁止特权容器
- NetworkPolicy 零信任
Phase 2(短期):
- 镜像扫描(Trivy)
- Pod Security Standards
- Secrets 加密(External Secrets)
Phase 3(中期):
- Falco 运行时检测
- Kyverno/OPA 策略引擎
- CIS Benchmark 审计
Phase 4(长期):
- mTLS(Service Mesh)
- 零信任网络
- 混沌工程验证