技术博客

信创数据中心GPU运维规范:等保2.0、国密算法与审计日志实战

系统讲解信创AI算力数据中心的运维安全规范:等保2.0三级对GPU集群的具体要求(网络隔离/访问控制/日志审计)、Kubernetes审计日志配置与180天留存、国密算法在容器通信中的应用(SM4替代AES)、GPU节点漏洞扫描与合规基线检查、信创环境下的离线镜像管理,以及年度安全检查清单。

信创等保2.0国密安全运维Kubernetes合规AI基础设施审计

信创数据中心的 GPU 运维不只是让硬件跑起来,还需要满足等保 2.0、数据安全法、网络安全法等合规要求。本文从运维工程师视角,讲解信创环境下 GPU 集群的安全规范落地。

信创 AI 算力合规要求总览

监管维度                要求来源            核心要求
-----------------------------------------------------------------
网络安全等级保护        GB/T 22239-2019     三级系统:隔离、审计、容灾
数据安全法             2021年实施           数据分级、访问控制、留存
个人信息保护法         2021年实施           训练数据合规
商用密码应用           GM/T 0115-2021      核心系统使用国密算法
供应链安全             工信部要求           禁止使用境外不可控组件

一、网络安全隔离(等保 2.0 三级要求)

# 信创 GPU 集群网络分区规划
#
# 互联网 DMZ
#     ↓(防火墙1)
# 业务区(API 服务)
#     ↓(防火墙2)
# AI 算力区(GPU/NPU 集群)  ← 关键:必须与业务区隔离
#     ↓(存储网络)
# 数据存储区(训练数据/模型)
#
# HCCS/HACO 卡间互联网络:完全独立,不与业务网络共用

# 防火墙规则(AI 算力区的访问控制)
# 允许:业务区 → AI 算力区(推理 API 端口)
# 允许:AI 算力区 → 数据存储区(模型加载、日志写入)
# 禁止:AI 算力区 → 互联网(模型不能上传到公网)
# 禁止:互联网 → AI 算力区(直接访问)
# Kubernetes NetworkPolicy 实现细粒度隔离

# 限制 GPU Pod 只能被指定的 API 网关访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-gpu-access
  namespace: ai-inference
spec:
  podSelector:
    matchLabels:
      has-gpu: "true"
  policyTypes:
    - Ingress
    - Egress
  ingress:
    # 只允许来自 API 网关命名空间的请求
    - from:
        - namespaceSelector:
            matchLabels:
              role: api-gateway
      ports:
        - port: 8000
          protocol: TCP
  egress:
    # 允许访问模型存储
    - to:
        - namespaceSelector:
            matchLabels:
              role: model-storage
      ports:
        - port: 9000    # MinIO/对象存储端口
          protocol: TCP
    # 允许 DNS 解析
    - to:
        - namespaceSelector: {}
      ports:
        - port: 53
          protocol: UDP
    # 允许 NPU 节点间 HCCS 通信(卡间通信)
    - to:
        - podSelector:
            matchLabels:
              has-gpu: "true"

---
# 禁止特权容器访问宿主机网络(等保要求)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-host-network
  namespace: ai-inference
spec:
  podSelector: {}    # 所有 Pod
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector: {}   # 只允许同命名空间 Pod 互访

二、Kubernetes 审计日志(等保 2.0:180 天留存)

# /etc/kubernetes/audit-policy.yaml
# 信创等保三级审计策略

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  # 1. 记录所有 GPU/NPU 资源 Pod 的操作(最高级别)
  - level: RequestResponse
    verbs: ["create", "delete", "update", "patch"]
    resources:
      - group: ""
        resources: ["pods"]
    namespaces:
      - ai-inference
      - ai-training
  
  # 2. 记录权限变更(RBAC)
  - level: RequestResponse
    verbs: ["create", "update", "delete", "patch"]
    resources:
      - group: "rbac.authorization.k8s.io"
        resources: ["clusterroles", "clusterrolebindings", "roles", "rolebindings"]
  
  # 3. 记录 Secret 访问(模型密钥、凭证)
  - level: Metadata
    resources:
      - group: ""
        resources: ["secrets"]
  
  # 4. 记录 ConfigMap 变更(含驱动配置)
  - level: Metadata
    verbs: ["create", "update", "delete"]
    resources:
      - group: ""
        resources: ["configmaps"]
  
  # 5. 记录节点操作(GPU 节点上下线)
  - level: Request
    verbs: ["create", "update", "delete"]
    resources:
      - group: ""
        resources: ["nodes"]
  
  # 忽略健康检查(减少噪音)
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: ""
        resources: ["endpoints", "services"]
  
  # 其他操作记录元数据
  - level: Metadata
# API Server 启动参数(添加审计配置)
# /etc/kubernetes/manifests/kube-apiserver.yaml

# 添加以下参数:
# --audit-policy-file=/etc/kubernetes/audit-policy.yaml
# --audit-log-path=/var/log/kubernetes/audit.log
# --audit-log-maxage=180          # 保留 180 天(等保要求)
# --audit-log-maxbackup=100       # 最多 100 个轮转文件
# --audit-log-maxsize=100         # 每个文件最大 100MB

# 日志轮转配置(确保 180 天不被删除)
cat > /etc/logrotate.d/k8s-audit << 'EOF'
/var/log/kubernetes/audit.log {
    daily
    rotate 180
    compress
    missingok
    notifempty
    create 0640 root root
}
EOF

# 日志备份(定期归档到合规存储)
cat > /usr/local/bin/audit-backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
# 压缩并上传到内网对象存储(不能传到公网)
tar -czf /backup/k8s-audit-${DATE}.tar.gz /var/log/kubernetes/audit.log.*
# 上传(使用内网 MinIO)
mc cp /backup/k8s-audit-${DATE}.tar.gz minio/audit-logs/
echo "审计日志已备份:k8s-audit-${DATE}.tar.gz"
EOF

# 加入 Cron:每天凌晨备份
echo "0 2 * * * root /usr/local/bin/audit-backup.sh" > /etc/cron.d/audit-backup

三、国密算法配置

# 信创要求:核心系统间通信使用国密 SM2/SM4 算法
# 常见场景:
# - Kubernetes 组件间通信(API Server ↔ etcd)
# - 推理服务 API(使用国密 TLS)
# - 镜像仓库 Harbor(HTTPS 使用国密证书)

# 方案1:使用支持国密的 OpenSSL 替代品(Tongsuo/BabaSSL)
apt-get install -y tongsuo  # 阿里巴巴开源的国密 OpenSSL 分支

# 生成国密 SM2 证书
tongsuo req -newkey sm2 \
    -keyout server.key \
    -out server.csr \
    -subj "/CN=inference-api.company.internal"

tongsuo x509 -req -in server.csr \
    -signkey server.key \
    -out server.crt \
    -days 365

# 方案2:Nginx 配置国密 TLS(使用 Tongsuo 版 Nginx)
# nginx.conf
server {
    listen 443 ssl;
    server_name inference-api.company.internal;
    
    ssl_certificate     /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;
    
    # 国密套件(SM4-CBC + SM3)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECC-SM4-CBC-SM3:ECC-SM4-GCM-SM3:ECDHE-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3;
    ssl_prefer_server_ciphers on;
    
    location / {
        proxy_pass http://inference-backend:8000;
    }
}
# Harbor 镜像仓库国密 HTTPS 配置
# harbor.yml
https:
  port: 443
  certificate: /your/certificate/path/server.crt  # 国密 SM2 证书
  private_key: /your/private/key/path/server.key

# Kubernetes 配置国密镜像仓库
# /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.configs]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.company.internal:443".tls]
    ca_file   = "/etc/containerd/certs/harbor-ca.crt"  # 国密 CA 证书
    cert_file = "/etc/containerd/certs/client.crt"
    key_file  = "/etc/containerd/certs/client.key"

四、GPU 节点漏洞扫描与基线检查

# 1. 容器镜像漏洞扫描(接入 Harbor 的 Trivy 扫描)
# Harbor 2.0+ 原生集成 Trivy,推送镜像时自动扫描

# 手动扫描昇腾基础镜像
trivy image ascendai/cann:8.0.RC3-ubuntu22.04-aarch64
# 重点关注:HIGH 和 CRITICAL 级别漏洞

# 扫描结果报告(等保检查时需要提供)
trivy image --format json \
    --output scan-report-$(date +%Y%m%d).json \
    ascendai/cann:8.0.RC3-ubuntu22.04-aarch64

# 2. 节点基线检查(CIS Benchmark)
# 安装 kube-bench
wget https://github.com/aquasecurity/kube-bench/releases/download/v0.7.3/kube-bench_0.7.3_linux_amd64.tar.gz
tar -xzf kube-bench_*.tar.gz

# 运行基线检查
./kube-bench run --targets node
# 重点关注:WARN 和 FAIL 项目

# GPU 节点特殊检查(特权容器的合规说明)
cat > gpu-node-exemptions.txt << 'EOF'
合规例外说明:
节点:ascend-01, ascend-02
例外项:特权容器(Privileged Container)
原因:华为昇腾 NPU 驱动要求容器以特权模式运行,
      以访问 /dev/davinci* 设备文件。
      已通过 PodSecurityPolicy 限制仅 ai-inference 
      命名空间的特定 ServiceAccount 可使用特权模式。
批准人:IT 安全负责人 XXX
批准日期:2026-07-22
EOF

# 3. 驱动版本漏洞管理
# 定期检查昇腾驱动和固件的安全公告
# 华为安全公告:https://www.huawei.com/cn/psirt

# 检查当前版本
npu-smi info -i 0 -t board | grep -E "Firmware|Driver"
# 记录版本,对比华为最新安全公告

五、离线镜像管理(信创环境与互联网隔离)

# 信创 GPU 集群通常完全与互联网隔离
# 所有镜像必须提前在内网 Harbor 准备好

# === 在有网络的环境(跳板机)操作 ===

# 1. 拉取所需镜像
docker pull ascendai/cann:8.0.RC3-ubuntu22.04-aarch64
docker pull prom/prometheus:v3.1.0
docker pull grafana/grafana:11.2.0
docker pull harbor.io/npu-exporter:6.0.RC1

# 2. 导出为 tar 包
docker save \
    ascendai/cann:8.0.RC3-ubuntu22.04-aarch64 \
    prom/prometheus:v3.1.0 \
    grafana/grafana:11.2.0 \
    -o gpu-ops-images-$(date +%Y%m%d).tar

# 3. 传输到内网(通过文件摆渡或光盘)
scp gpu-ops-images-*.tar inner-server:/data/

# === 在内网服务器操作 ===

# 4. 加载镜像
docker load < gpu-ops-images-*.tar

# 5. 打标签推送到内网 Harbor
docker tag ascendai/cann:8.0.RC3-ubuntu22.04-aarch64 \
    harbor.company.internal/ai-base/cann:8.0.RC3

docker push harbor.company.internal/ai-base/cann:8.0.RC3

# 6. 配置 Kubernetes 使用内网 Harbor
# 所有 Deployment 镜像必须使用内网地址
# 禁止使用 docker.io/ 或其他公网地址
# 镜像管理策略(强制执行)

# 1. Admission Webhook:拒绝使用公网镜像
cat > admission-policy.yaml << 'EOF'
apiVersion: policies.kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-internal-registry
spec:
  validationFailureAction: Enforce
  rules:
    - name: check-image-registry
      match:
        resources:
          kinds:
            - Pod
      validate:
        message: "信创合规:镜像必须来自内网仓库 harbor.company.internal"
        pattern:
          spec:
            containers:
              - image: "harbor.company.internal/*"
EOF

kubectl apply -f admission-policy.yaml

六、年度安全合规检查清单

信创 GPU 集群年度检查(等保复测材料):

□ 网络隔离验证
  □ GPU 集群与互联网隔离(ping/traceroute 测试)
  □ NetworkPolicy 覆盖所有 GPU 命名空间
  □ 防火墙规则审查记录

□ 访问控制
  □ RBAC 权限最小化(无多余 ClusterAdmin)
  □ ServiceAccount 与业务绑定(无默认 SA 滥用)
  □ GPU 节点 SSH 访问记录(bastion 跳板机)

□ 审计日志
  □ 审计日志 180 天留存验证(查最早的日志时间)
  □ 审计日志完整性(无删除或篡改)
  □ 日志备份到合规存储的记录

□ 漏洞管理
  □ GPU 驱动版本与最新安全公告对比
  □ 容器镜像 CVE 扫描报告(HIGH/CRITICAL 已修复)
  □ Kubernetes 版本(不超过 EOL 版本)

□ 密码算法
  □ 对外 API 使用国密 TLS 或标准 TLS 1.2+
  □ 镜像仓库 HTTPS 证书有效期

□ 供应链
  □ GPU 硬件信创认证证书(有效期内)
  □ 操作系统信创版本(麒麟/统信/欧拉)
  □ 镜像来源全部为内网仓库

□ 应急响应
  □ GPU 故障应急预案(最近一次演练记录)
  □ 安全事件响应流程(联系人更新)
  □ 数据备份与恢复测试记录

小结

信创 GPU 集群的安全合规不是一次性工作,而是持续运维的一部分。最重要的三点:网络隔离(GPU 集群与互联网断开,与业务网络通过防火墙隔离)、审计日志(等保三级要求 180 天留存,要有自动备份机制)、镜像管理(离线环境下的全镜像内网化,配合 Admission Webhook 强制检查来源)。这三点做好了,基本能覆盖等保 2.0 三级的大部分要求。其余的国密算法、漏洞扫描等是加分项,但在年度复测时会被检查,建议纳入日常运维规范。