【架构实战】容器安全最佳实践

一、容器安全概述

容器安全是云原生安全的基础:

安全层次:

  • 镜像安全
  • 运行时安全
  • 网络安全
  • 供应链安全

二、镜像安全

1. 镜像扫描

bash 复制代码
# Trivy扫描
trivy image myapp:latest

# Clair扫描
clairctl analyze -l myapp:latest

# Docker扫描
docker scan myapp:latest

2. 最小化基础镜像

dockerfile 复制代码
# ❌ 不推荐
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3

# ✅ 推荐
FROM python:3.11-slim

# ✅ 最佳
FROM gcr.io/distroless/python:3.11

3. 安全构建

dockerfile 复制代码
# 使用非root用户
FROM node:18-alpine
RUN addgroup -g 1001 appgroup && \
    adduser -u 1001 -G appgroup -s /bin/sh -D appuser
USER appuser

# 多阶段构建
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node

三、运行时安全

1. Pod安全策略

yaml 复制代码
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  privileged: false
  allowPrivilegeEscalation: false
  requiredDropCapabilities:
    - ALL
  volumes:
    - 'configMap'
    - 'emptyDir'
    - 'projected'
    - 'secret'
    - 'downwardAPI'
    - 'persistentVolumeClaim'
  runAsUser:
    rule: 'MustRunAsNonRoot'
  seLinux:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'

2. 安全上下文

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 10000
    runAsGroup: 10000
    fsGroup: 10000
  containers:
    - name: app
      image: myapp:latest
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
        capabilities:
          drop:
            - ALL

四、网络安全

1. 网络策略

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
spec:
  podSelector:
    matchLabels:
      app: frontend
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: nginx-ingress
      ports:
        - protocol: TCP
          port: 80

2. 服务网格安全

yaml 复制代码
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
spec:
  mtls:
    mode: STRICT

五、密钥管理

1. Secret管理

yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
stringData:
  username: admin
  password: ${DB_PASSWORD}

2. 外部密钥管理

yaml 复制代码
# 使用SealedSecret
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  name: db-credentials
spec:
  encryptedData:
    username: AgBy...==
    password: AgBy...==

六、供应链安全

1. 签名验证

bash 复制代码
# Cosign签名
cosign sign myapp:latest

# 验证镜像
cosign verify myapp:latest

2. 准入控制

yaml 复制代码
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: image-validator
webhooks:
  - name: validate-images.example.com
    rules:
      - apiGroups: [""]
        apiVersions: ["v1"]
        operations: ["CREATE", "UPDATE"]
        resources: ["pods"]
    clientConfig:
      service:
        name: image-validator
        namespace: default
      caBundle: LS0t...
    admissionReviewVersions: ["v1"]
    sideEffects: None
    failurePolicy: Reject

七、监控与审计

1. 审计日志

yaml 复制代码
# kube-apiserver配置
--audit-policy-file=/etc/kubernetes/audit-policy.yaml
--audit-log-path=/var/log/kubernetes/audit.log
yaml 复制代码
# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: RequestResponse
    resources:
      - group: ""
        resources: ["pods", "secrets"]
  - level: Metadata
    resources:
      - group: "apps"
        resources: ["deployments"]

2. 运行时监控

yaml 复制代码
apiVersion: security.datadoghq.com/v1
kind: RuntimeSecurityPolicy
metadata:
  name: runtime-policy
spec:
  meta:
    runtimeType: syscall
  rules:
    - name: spawn_shell
      condition:
        evt.type == "exec"
        evt.argv[0] == "/bin/sh"
      action:
        type: block

八、总结

容器安全最佳实践:

  • 镜像:最小化、定期扫描
  • 运行时:安全上下文、PSP
  • 网络:NetworkPolicy
  • 供应链:签名、准入

个人观点,仅供参考

相关推荐
IT小白杨7 小时前
多账号环境稳定性由什么决定:指纹、网络、存储如何共同决定账号安全
网络·安全·开源软件·业界资讯·指纹浏览器
明哥聊AI7 小时前
大模型安全攻防实战:从越狱到Prompt注入的攻防全解析(2026最新)
安全·prompt
霸道流氓气质7 小时前
微服务架构核心概念业务示例
微服务·云原生·架构
网安蟹佬霸8 小时前
我国网络安全人才缺口现状、成因与对策研究
安全·web安全
带娃的IT创业者8 小时前
当推理速度突破物理极限:深度解析 MiMo-v2.5-Pro-UltraSpeed 的 1000 TPS 架构革命
人工智能·架构·大模型·架构优化·mimo·tps·推理速度
XUHUOJUN8 小时前
从 S2D 到 Azure Local Storage Capability:微软 HCI 存储控制面的演进趋势
架构·azure local·storage spaces
一枚码农出身的猎头8 小时前
岗位招聘:架构师,base湖南长沙,70-80w
java·架构
2601_954706499 小时前
云虚拟化终端架构解析:ARM 云端集群部署与自动化运维实践
运维·arm开发·架构
米尔的可达鸭9 小时前
深入操作系统 Socket 底层:套接字控制块、FD映射、阻塞IO核心完整实现
arm开发·数据结构·websocket·网络协议·算法·架构·安全架构
春卷同学9 小时前
HarmonyOS掌上记账APP开发实践第1篇:HarmonyOS 多模块 HAR 架构最佳实践 — MoneyTrack 多模块拆分之道
华为·架构·harmonyos