Skip to content

🔒 数据安全存储

模型可以再训,数据丢泄露了就回不来了——安全不是选修课

数据安全的三座大山

AI 算力中心面临的核心安全风险:

  1. 训练数据泄露——合同、病历、用户对话被人偷走
  2. 模型被逆向——攻击者通过反复调用推理出训练数据
  3. API 被滥用——没有鉴权的推理接口被挖矿/滥用

存储加密

静态数据加密(放在硬盘上的数据)

bash
# LUKS 全盘加密(推荐)
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 data_encrypted
sudo mkfs.ext4 /dev/mapper/data_encrypted
sudo mount /dev/mapper/data_encrypted /data

# 每次开机需输入密码解锁
# 数据盘即使被物理偷走也读不出来

文件级加密

bash
# GPG 加密单文件
gpg -c --cipher-algo AES256 training_data.json
# 输入密码 → 生成 training_data.json.gpg

# 解密
gpg -d training_data.json.gpg > training_data.json

应用层加密

python
from cryptography.fernet import Fernet

# 生成密钥(存环境变量,别写代码里)
key = Fernet.generate_key()
cipher = Fernet(key)

# 加密数据再存数据库
sample = "合同内容:甲方承担..."
encrypted = cipher.encrypt(sample.encode())
# 存 encrypted

# 读取时解密
decrypted = cipher.decrypt(encrypted).decode()

传输安全

API 必须走 HTTPS

nginx
# nginx 强制 HTTPS
server {
    listen 80;
    server_name api.your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    # ... 证书配置
}

API Key 管理

bash
# 密钥从不写死在代码里,用环境变量
export API_KEY="sk-***"
export HF_TOKEN="hf_***"
export DB_PASSWORD="***"

# Docker 里注入
docker run -e API_KEY=$API_KEY ollama
python
# 代码里读取
import os
api_key = ***"API_KEY")
if not api_key:
    raise ValueError("API_KEY 未设置")

推理服务防数据泄露

日志脱敏

python
# 不要记录用户原始输入
@app.middleware("http")
async def log_requests(request, call_next):
    # ❌ 坏做法:记录完整请求(可能含合同原文)
    # logger.info(f"Request: {await request.body()}")

    # ✅ 好做法:只记录元数据
    logger.info(f"Request from {request.client.host}, "
                f"tokens: ~{len(str(await request.body()))//4}")
    return await call_next(request)

输出过滤

防止模型输出训练数据片段:

python
# 推理后检查输出是否包含训练数据
def check_leakage(output, training_samples):
    for sample in training_samples:
        if sample in output and len(sample) > 50:
            logger.warning("可能的训练数据泄露!")
            return "[输出已拦截:检测到疑似训练数据]"
    return output

数据库安全

MongoDB/云数据库安全规则

javascript
// 只允许管理员读写,API 服务用服务端密钥访问
{
  "rules": {
    ".read": false,
    ".write": false,
    "models": {
      ".read": "auth != null && auth.role == 'admin'"
    }
  }
}

备份加密

bash
# 备份时加密
mysqldump mydb | gpg -c --cipher-algo AES256 > backup.sql.gpg

# 恢复
gpg -d backup.sql.gpg | mysql mydb

访问控制

SSH 加固

bash
# /etc/ssh/sshd_config
PermitRootLogin prohibit-password  # 禁止密码登录 root
PasswordAuthentication no           # 只允许密钥登录
Port 2222                           # 改掉默认 22 端口
AllowUsers youruser                 # 只允许指定用户

最小权限原则

bash
# 推理服务用专用用户,不给 sudo
sudo useradd -r -s /bin/false inference
sudo chown -R inference:inference /opt/models

# Docker 容器用非 root 用户
docker run --user 1000:1000 ollama

安全检查清单

检查项命令/方法
开放端口ss -tlnp,只开 443 和必要端口
防火墙规则sudo ufw status verbose
SSH 配置`grep -E 'PasswordAuth
API 是否需鉴权curl http://localhost:8000/v1/models 不带 key试试
日志是否含敏感信息tail -50 /var/log/nginx/access.log
磁盘加密状态sudo blkid | grep LUKS

🎯 本章要点

  • 数据安全三层:存储加密(LUKS/GPG)、传输加密(HTTPS)、访问控制(密钥+防火墙)
  • API Key 永远环境变量注入,不写死代码,不提交 Git
  • 日志脱敏:不记录用户输入原文,只记元数据
  • SSH 禁用密码登录、改端口、只允许指定用户
  • 最小权限:推理服务用专用非 root 用户跑
加载练习题中...

有问题或补充?欢迎留言