前言在前几期我们构建了从容器化到微服务、数据库治理的完整云原生栈。然而随着架构演进安全与合规成为企业上云的最后一道红线。云原生环境带来了动态、短暂、分布式的特性传统防火墙和静态扫描已无法满足需求。本文将系统讲解云原生安全体系涵盖镜像安全Trivy、Clair、运行时安全Falco、K8s安全配置CIS基准、策略即代码OPA Gatekeeper、Kyverno、准入控制器、审计与合规Kubescape、kube-bench并提供大量实战YAML和命令助你构建从CI/CD到运行时的纵深防御体系。一、云原生安全面临的挑战镜像供应链基础镜像漏洞、依赖库投毒、恶意代码植入。配置错误特权容器、敏感信息暴露、RBAC过度授权。运行时攻击容器逃逸、加密货币挖矿、API滥用。合规压力等保2.0、GDPR、PCI-DSS对容器和K8s提出明确要求。多集群/多云策略一致性和审计日志分散。安全原则左移尽早发现 持续监控 最小权限 策略即代码。二、镜像安全漏洞扫描与签名1. 静态扫描Trivy推荐Trivy 由 Aqua Security 开源支持容器镜像、文件系统、Git仓库的漏洞扫描。安装# 二进制安装 wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb sudo dpkg -i trivy_0.50.1_Linux-64bit.deb # Docker方式 alias trivydocker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy扫描镜像trivy image --severity CRITICAL,HIGH myapp:latest trivy image --format json --output result.json myapp:latest集成到CIGitLab CI示例yamlcontainer_scanning: stage: test script: - trivy image --exit-code 1 --severity CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA allow_failure: false2. 基础镜像选择优先使用官方镜像或distroless无包管理器、无shell。使用slim版本减少攻击面。定期更新基础镜像建议每周重建。3. 镜像签名与验证CosignSigstore 的 Cosign 可以签名镜像并验证来源。签名cosign generate-key-pair # 生成密钥对 cosign sign --key cosign.key myregistry/myapp:latest验证cosign verify --key cosign.pub myregistry/myapp:latestK8s准入验证结合Connaisseur或Policy Controller在部署时强制验证签名。三、K8s安全配置与CIS基准CISCenter for Internet Security发布了Kubernetes基准包含100检查项。1. kube-bench节点级检测# 在Master节点运行 docker run --pidhost -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest master # 在Worker节点运行 docker run --pidhost -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest node常见高风险项禁止--allow-privilegedAPI Server设置--profilingfalse确保kubelet匿名认证关闭--anonymous-authfalse2. Kubescape集群级扫描Kubescape 由ARMO开源可扫描集群、YAML文件或Helm Chart。# 安装 curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash # 扫描集群 kubescape scan --enable-host-scan --submit --account-id account # 扫描本地YAML kubescape scan --file deployment.yaml输出给出FAILED项和修复建议支持导出PDF/HTML。四、策略即代码OPA GatekeeperOpen Policy Agent (OPA) 的Gatekeeper是K8s准入控制器通过约束模板和约束强制执行策略。1. 安装Gatekeeperkubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.14/deploy/gatekeeper.yaml2. 禁止特权容器约束模板yamlapiVersion: templates.gatekeeper.sh/v1 kind: ConstraintTemplate metadata: name: k8sprivilegedcontainers spec: crd: spec: names: kind: K8sPrivilegedContainers targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sprivilegedcontainers violation[{msg: msg}] { c : input_containers[_] c.securityContext.privileged true msg : sprintf(容器 %v 禁止使用特权模式, [c.name]) } input_containers[c] { c : input.review.object.spec.containers[_] }应用约束yamlapiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPrivilegedContainers metadata: name: no-privileged spec: match: kinds: - apiGroups: [] kinds: [Pod] namespaces: [default] parameters: {}3. 限制镜像仓库来源regopackage trusted_registry violation[{msg: msg}] { container : input.review.object.spec.containers[_] not startswith(container.image, myregistry.com/) msg : sprintf(镜像 %v 必须来自 myregistry.com, [container.image]) }4. 审计模式dry-run# 修改约束设置 enforcementAction: dryrun kubectl patch constraint no-privileged -p {spec:{enforcementAction:dryrun}}五、策略即代码Kyverno更易用的替代Kyverno 专为K8s设计无需学习Rego使用原生YAML和JMESPath。1. 安装Kyvernohelm repo add kyverno https://kyverno.github.io/kyverno/ helm install kyverno kyverno/kyverno -n kyverno --create-namespace2. 禁止Latest标签yamlapiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: disallow-latest-tag spec: validationFailureAction: Enforce rules: - name: require-image-tag match: any: - resources: kinds: - Pod validate: message: 镜像标签禁止使用 latest pattern: spec: containers: - image: *:* # 必须有tag - image: !*:latest3. 自动注入Sidecar变异策略yamlapiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: inject-istio-sidecar spec: rules: - name: inject-sidecar match: any: - resources: kinds: - Pod mutate: patchStrategicMerge: spec: containers: - name: istio-proxy image: istio/proxyv2:1.20.0 args: [proxy, sidecar]4. 生成默认NetworkPolicyyamlapiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: default-deny-network spec: rules: - name: generate-networkpolicy match: any: - resources: kinds: - Namespace generate: kind: NetworkPolicy name: default-deny namespace: {{request.object.metadata.name}} data: spec: podSelector: {} policyTypes: - Ingress - Egress六、运行时安全FalcoFalco 是CNCF开源项目通过内核模块或eBPF监控系统调用和K8s审计日志。1. 安装FalcoHelmhelm repo add falcosecurity https://falcosecurity.github.io/charts helm install falco falcosecurity/falco --set ebpf.enabledtrue2. 默认规则示例启动交互式shellspawned process with bash in container读取敏感文件Read sensitive file出站网络连接Unexpected outbound connection挂载敏感路径Mounting docker socket3. 自定义规则/etc/falco/falco_rules.local.yamlyaml- rule: Whitelist specific image desc: Allow only myapp image condition: container.image.repository ! myregistry.com/myapp output: 不安全的镜像 (%container.image) priority: WARNING4. 与Alertmanager集成Falco支持将告警发送到Slack、HTTP Webhook、Kafka等。配置falco.yamlyamljson_output: true http_output: enabled: true url: http://alertmanager:9093/api/v1/alerts七、准入控制器与动态审计K8s内置准入控制器包括MutatingAdmissionWebhook和ValidatingAdmissionWebhook。Gatekeeper和Kyverno底层都基于此。1. 审计日志开启API Server配置text--audit-log-path/var/log/audit/k8s-audit.log --audit-log-maxsize100 --audit-log-maxbackup10 --audit-policy-file/etc/kubernetes/audit-policy.yaml审计策略示例记录所有请求的元数据yamlapiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata resources: - group: resources: [secrets] - level: RequestResponse verbs: [create, update, delete] - level: None users: [system:kube-proxy]2. 使用Audit2rbac分析权限# 从审计日志生成RBAC建议 audit2rbac -f /var/log/audit/k8s-audit.log八、供应链安全与SBOM1. 生成SBOM软件物料清单使用Syftsyft myapp:latest -o spdx-json sbom.json2. 漏洞数据库Trivy DB整合NVD、GitHub Security Advisory等。Grype与Syft配合扫描SBOM中的漏洞。3. CI/CD中强制SBOM生成yaml- name: Generate SBOM run: syft $IMAGE -o cyclonedx-json sbom.json - name: Upload SBOM uses: actions/upload-artifactv3 with: name: sbom path: sbom.json九、合规性自动化针对等保2.0/PCI1. Kube-bench 自定义配置编写自定义CIS测试kube-bench --config-dir /path/to/custom-cfg2. 使用OPA生成合规报告编写Rego规则检查是否符合等保要求如禁止匿名登录、必须配置资源限制等然后定期运行opa eval并输出CSV。3. 定期合规扫描CronJobyamlapiVersion: batch/v1 kind: CronJob metadata: name: compliance-scan spec: schedule: 0 1 * * 0 # 每周日凌晨1点 jobTemplate: spec: template: spec: serviceAccountName: scanner containers: - name: kubescape image: kubescape args: [scan, --submit, --account-id, xxxx]十、生产环境最佳实践最小化基础镜像使用distroless或scratch彻底消除shell和包管理。只读根文件系统readOnlyRootFilesystem: true。禁止特权提升allowPrivilegeEscalation: false。设置securityContextyamlsecurityContext: runAsNonRoot: true runAsUser: 1000 capabilities: drop: [ALL]使用Pod Security StandardsPSSyaml# 命名空间标签 kubectl label ns default pod-security.kubernetes.io/enforcerestricted网络策略默认拒绝所有入站只开放必要端口。RBAC最小权限使用kubectl auth can-i --list验证权限。开启Seccomp限制系统调用使用RuntimeDefault或自定义profile。启用AppArmor/SELinux增加强制访问控制。定期更新组件K8s、容器运行时、操作系统内核。十一、故障排查与常见问题1. Gatekeeper拒绝创建Pod# 查看约束状态 kubectl get constraints # 查看拒绝详情 kubectl describe constraint no-privileged2. Kyverno策略未生效检查validationFailureAction是否为Enforce。查看Kyverno Pod日志kubectl logs -n kyverno deployment/kyverno3. Falco发出大量误报调整规则阈值或添加例外falco_rules.local.yaml。使用--disable-rules禁用特定规则。4. 镜像扫描发现漏洞但业务必须使用评估漏洞可利用性CVSS评分、是否有公开POC。如果无法升级增加运行时防护限制网络、Capabilities。十二、未来趋势eBPF统一观测与安全Cilium、Tetragon等实现内核级安全策略。零信任架构ZTASPIFFE/SPIRE为工作负载提供身份结合Istio做细粒度认证。AI辅助安全使用LLM分析审计日志自动生成策略。安全左移到IDE如Kubescape VSCode插件编码时即检测。结语云原生安全不是单一产品而是贯穿开发、部署、运行的体系化工程。通过镜像扫描、策略即代码、运行时监控和合规扫描可以显著降低风险。建议从最关键的几个策略禁止特权、禁止latest、限制资源开始逐步完善。学习建议在自己的测试集群中安装Gatekeeper或Kyverno编写3~5个常用策略。使用kube-bench和Kubescape扫描集群修复高风险项。搭建Falco模拟一次容器逃逸攻击观察告警。阅读K8s官方安全文档Security Checklist和CIS Benchmark。本系列后续预告GitOps与Argo CD持续交付深度实战。如果本文对你有帮助欢迎点赞、收藏、转发