本文目录导读:

集群安全策略配置是一个系统化的工程,需要从网络边界、主机安全、身份认证、权限控制、运行时安全、数据安全、合规审计等多个维度进行综合考量,下面以Kubernetes集群为例,为你梳理一个完整的策略配置框架。
网络与边界安全策略
这是第一道防线,用于控制流量进出集群以及集群内部的服务间通信。
-
集群入口控制
- API Server 保护:使用TLS证书加密所有API通信;配置IP白名单或使用Webhook进行认证;开启审计日志记录所有请求。
- Ingress/负载均衡器:配置WAF(Web应用防火墙)规则;限制暴露的端口;使用HTTPS并配置SSL/TLS证书自动管理;实施速率限制防止DDoS。
-
集群内部网络隔离
- 网络策略(NetworkPolicy):这是K8s原生的核心安全机制,为每个命名空间默认拒绝所有入/出流量,然后显式允许所需的流量。
- 示例:只允许
frontend的Pod访问backendPod的8080端口,不允许backend访问互联网。
- 示例:只允许
- 使用服务网格:如Istio或Linkerd,提供更细粒度的mTLS(双向TLS)加密和基于身份的路由/授权策略。
- 网络策略(NetworkPolicy):这是K8s原生的核心安全机制,为每个命名空间默认拒绝所有入/出流量,然后显式允许所需的流量。
主机与基础设施安全策略
确保组成集群的节点(物理机/虚拟机)本身是安全的。
-
最小化节点暴露面
- 禁用SSH密码登录,仅使用密钥对并定期轮换。
- 定期安全补丁:对操作系统内核、Docker/Containerd运行时、kubelet等组件进行自动或强制更新。
- 节点安全扫描:使用工具(如Trivy、Clair)扫描节点镜像的漏洞。
-
kubelet安全配置
- 禁用匿名认证:
--anonymous-auth=false。 - 保护kubelet端口:使用TLS证书认证;仅允许通过API Server访问,限制从外部直接访问kubelet的10250端口。
- 禁用匿名认证:
身份与访问控制策略(IAM)
核心是遵循最小权限原则(Principle of Least Privilege)。
-
认证策略
- 禁用服务账号明文Token:从K8s 1.24起,不自动创建Secret,使用绑定的服务账号Token卷投影(Bound Service Account Token Volume Projection)或外部OIDC/OAuth2身份提供者。
- 集成企业认证:使用LDAP、AD、GitHub等配置OIDC认证,避免使用公共的证书或静态令牌。
-
授权策略(RBAC - 基于角色的访问控制)
- 严格使用Role(命名空间内)和ClusterRole(集群范围)。
- 分离职责:定义管理员、开发者、只读者、CI/CD服务账号等角色。
- 审计并绑定:避免为服务账号绑定
cluster-admin,使用kubectl auth can-i命令测试权限。 - 关键:对*`(所有资源)的通配符权限要极度慎重**。
-
服务账号管理
- 每个应用/微服务使用独立的服务账号,不要共享。
- 自动挂载禁止:在Pod Spec中设置
automountServiceAccountToken: false,除非确实需要。
容器与工作负载安全策略
这是运行时的核心防护。
-
镜像安全
- 使用可信基础镜像:选择官方、精简、无漏洞的镜像(如Distroless、Alpine)。
- 镜像签名与验证:使用Notary或Cosign对镜像进行签名,并在集群部署前验证。
- 漏洞扫描:CI/CD镜像构建后立即扫描(如Trivy, Snyk),阻止有高危漏洞的镜像上线。
-
Pod安全策略(PSA - Pod Security Admission)
- 从K8s 1.23起,PSA是内置的Pod安全准入控制器,在每个命名空间设置安全级别:
privileged:几乎无限制(仅用于系统组件)。baseline:默认策略,禁止已知的提权行为。restricted:最严格,符合Pod硬性安全要求(如禁止特权容器、禁止hostNetwork、只读根文件系统等)。
- 建议:从
restricted级别开始,为特殊应用设置baseline并通过exceptions配置绕过项。
- 从K8s 1.23起,PSA是内置的Pod安全准入控制器,在每个命名空间设置安全级别:
-
运行时安全
- 限制容器能力:使用
securityContext.capabilities.drop: ["ALL"],然后显式添加所需能力(如NET_BIND_SERVICE)。 - 只读根文件系统:
readOnlyRootFilesystem: true。 - 禁止特权提升:
allowPrivilegeEscalation: false。 - 使用gVisor或Kata Containers:为不可信的工作负载提供更强的隔离沙箱。
- 限制容器能力:使用
数据与密钥安全策略
保护数据在传输和存储中的机密性与完整性。
-
传输加密:在服务间通信使用mTLS;外部访问使用HTTPS/TLS。
-
存储加密:
- 存储卷加密:使用云卷加密(如AWS EBS加密、Azure Disk Encryption)。
- Secrets加密:启用K8s Secret的静态加密(
--encryption-provider-config),使用AES-GCM、KMS等后端,防止etcd被攻破时密钥泄露。
-
密钥管理:
- 禁止将密钥放在ConfigMap或环境变量中,使用Secrets。
- 集成外部密钥管理服务(KMS):如HashiCorp Vault、AWS KMS、Azure Key Vault,通过CSI驱动或Sidecar注入来动态获取密钥,不在Pod中写入磁盘。
监控、审计与合规策略
安全是持续的过程,需要检测和响应。
-
审计日志:
- 启用API Server的
--audit-log-path,记录关于create、update、delete以及get敏感资源(如Secrets)的操作。 - 使用工具(如Falco)进行实时审计和告警。
- 启用API Server的
-
运行时入侵检测:
- 部署Falco:监控系统调用,检测异常行为(如创建子进程、读写敏感文件、网络连接)。
- 使用kube-bench:定期运行CIS Kubernetes Benchmark检查,确保集群配置符合行业标准。
-
合规策略即代码:
- 使用OPA Gatekeeper或Kyverno:编写策略即代码,在Pod创建、Service更新等时刻强制执行安全规则(如确保镜像来自安全仓库、禁止使用
latest标签等)。
- 使用OPA Gatekeeper或Kyverno:编写策略即代码,在Pod创建、Service更新等时刻强制执行安全规则(如确保镜像来自安全仓库、禁止使用
实施优先级建议
-
Day 0(最紧急):
- 关闭默认服务账号的自动挂载。
- 在所有命名空间启用Pod Security Admission(至少
baseline)。 - 配置RBAC,只给最小权限。
- 启用审计日志并发送到集中日志系统。
-
Day 1(重要):
- 部署网络策略(NetworkPolicy)进行微隔离。
- 使用OPA/Kyverno实现合规策略自动化。
- 集成镜像漏洞扫描到CI/CD流程。
- 配置Secrets加密。
-
Day 2(持续优化):
- 部署Falco等运行时安全监控。
- 集成外部KMS管理密钥。
- 实施mTLS服务网格。
- 定期进行CIS Benchmark扫描。
总结表格
| 维度 | 核心策略 | 工具/技术 |
|---|---|---|
| 网络边界 | 入口控制、内部微隔离 | Ingress + WAF, NetworkPolicy, 服务网格 |
| 主机安全 | 最小化暴露面、补丁管理 | OS加固, kubelet配置, 节点扫描 |
| IAM | 最小权限、RBAC、认证 | OIDC, RBAC, 服务账号管理 |
| 工作负载 | 镜像安全、Pod安全、运行时保护 | PSA, Trivy, Stop dropping Capabilities |
| 数据安全 | 传输/存储加密、密钥管理 | mTLS, KMS, Secrets加密 |
| 监控审计 | 日志、入侵检测、合规扫描 | Audit Log, Falco, OPA Gatekeeper, kube-bench |
最后一点建议:安全不是一次性的配置,而是需要持续迭代的风险管理过程,建议从默认拒绝原则(Deny by Default)出发,逐步验证业务应用的需求,并为每个策略配置清晰的白名单例外流程。