Kubernetes 安全深度解析:从认证授权到镜像防护

一、认证与授权:集群访问的第一道防线

1.1 认证方式详解

Kubernetes 提供了三种主要认证机制:

X.509 证书认证(最严格的认证方式):

# 查看当前集群的证书配置
kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 --decode

Bearer Token 认证(常用于服务间调用):

# ServiceAccount 自动生成的 Token 示例
apiVersion: v1
kind: Secret
metadata:
  name: myapp-token
  annotations:
    kubernetes.io/service-account.name: myapp
type: kubernetes.io/service-account-token

ServiceAccount(Pod 内默认认证方式):

apiVersion: v1
kind: ServiceAccount
metadata:
  name: monitoring-sa
automountServiceAccountToken: false  # 安全建议:非必要不自动挂载

1.2 RBAC 权限控制模型

图1

最佳实践示例

# 最小权限原则的 Role 定义
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: monitoring
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
  
# 对应的 RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: monitoring
subjects:
- kind: ServiceAccount
  name: monitoring-sa
  namespace: monitoring
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

二、安全上下文:容器运行时防护

2.1 关键安全配置

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  containers:
  - name: sec-ctx-demo
    image: busybox
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]
        add: ["NET_BIND_SERVICE"]

安全建议

  1. 所有生产容器应设置 readOnlyRootFilesystem: true
  2. 非特权容器应设置 allowPrivilegeEscalation: false
  3. 使用 capabilities.drop: ["ALL"] 后按需添加必要权限

三、网络隔离:零信任网络策略

3.1 NetworkPolicy 实战

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database-isolation
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: app
    ports:
    - protocol: TCP
      port: 5432

典型场景策略

  • 前端只能访问后端服务
  • 数据库只允许特定应用访问
  • 禁止所有 Namespace 间默认通信

四、镜像安全:供应链防护

4.1 镜像签名验证流程

图2

4.2 Trivy 扫描集成

# CI 流水线中的扫描示例
trivy image --severity HIGH,CRITICAL myapp:1.0.0
# 返回非零退出码将中断部署流程

# 定期集群扫描
trivy k8s --report summary cluster

关键指标监控

  • CVE 漏洞数量随时间变化
  • 修复的漏洞占比
  • 高风险镜像部署趋势

五、综合安全实践方案

  1. 认证授权:定期轮换证书(建议90天),使用 OPA 进行细粒度授权
  2. 运行时安全:部署 Falco 进行异常行为检测
  3. 网络防护:默认拒绝所有流量,按需开放最小权限
  4. 镜像管理:私有仓库 + 强制签名扫描 + 自动阻断高危镜像
# 安全准入控制器示例
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: image-validation
webhooks:
- name: validator.trivy.io
  rules:
  - operations: ["CREATE", "UPDATE"]
    apiGroups: ["*"]
    apiVersions: ["*"]
    resources: ["pods"]
  clientConfig:
    service:
      name: trivy-admission
      path: "/validate"

通过以上多层防护体系,可显著提升 Kubernetes 集群的安全水位。建议企业根据自身安全要求选择适合的方案组合。

添加新评论