安全配置
安全是部署和使用 Hermes Agent 时的首要考虑。本指南涵盖了关键的安全配置和最佳实践。
身份认证与授权
Section titled “身份认证与授权”API 密钥管理
Section titled “API 密钥管理”密钥生成与存储
Section titled “密钥生成与存储”- 安全生成:使用加密安全的随机数生成器创建密钥
- 环境变量:将 API 密钥存储在环境变量中,避免硬编码
- 密钥轮换:定期更换 API 密钥,建议每 90 天一次
- 最小权限:为不同用途创建不同的密钥,限制权限范围
# 推荐做法export HERMES_API_KEY="your-api-key-here"
# 代码中读取import osapi_key = os.environ.get('HERMES_API_KEY')- 使用安全的密钥管理系统(如 AWS Secrets Manager、Azure Key Vault)
- 避免通过邮件、即时通讯工具发送密钥
- 实施密钥访问审计,记录谁访问了什么密钥
基于角色的访问控制(RBAC)
Section titled “基于角色的访问控制(RBAC)”| 角色 | 权限 | 适用场景 |
|---|---|---|
| 管理员 | 完全访问 | 系统管理员 |
| 开发者 | 读写权限 | 开发团队 |
| 只读用户 | 查询权限 | 业务分析师 |
| 服务账户 | 特定 API 权限 | 自动化脚本 |
- 最小权限原则:只授予完成任务所需的最小权限
- 职责分离:关键操作需要多人审批
- 定期审计:定期审查和清理不必要的权限
使用 TLS/SSL
Section titled “使用 TLS/SSL”- 所有 API 通信必须使用 HTTPS
- 禁用不安全的 TLS 版本(1.0、1.1)
- 配置强加密套件
# Nginx 配置示例ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;- 使用受信任的 CA 签发的证书
- 设置证书过期提醒
- 实施证书自动轮换
数据存储安全
Section titled “数据存储安全”敏感数据处理
Section titled “敏感数据处理”- 加密存储:敏感数据必须使用强加密算法存储
- 数据脱敏:日志和监控中避免记录敏感信息
- 数据分类:根据敏感度对数据进行分类管理
# 数据脱敏示例def mask_sensitive_data(data): # 隐藏 API 密钥的中间部分 if 'api_key' in data: key = data['api_key'] data['api_key'] = key[:4] + '*' * (len(key) - 8) + key[-4:] return data数据保留策略
Section titled “数据保留策略”- 制定明确的数据保留期限
- 自动清理过期数据
- 实施数据备份和恢复机制
- 仅开放必要的端口(如 443、80)
- 限制源 IP 地址范围
- 实施速率限制防止暴力破解
# iptables 示例iptables -A INPUT -p tcp --dport 443 -s 10.0.0.0/8 -j ACCEPTiptables -A INPUT -p tcp --dport 443 -j DROP- 限制服务只能访问必要的外部资源
- 监控异常出站连接
- 实施 DNS 过滤
DDoS 防护
Section titled “DDoS 防护”- 使用 CDN 和 WAF 服务
- 配置速率限制
- 实施请求验证和清洗
from pydantic import BaseModel, validator
class QueryRequest(BaseModel): prompt: str max_tokens: int = 100
@validator('prompt') def validate_prompt(cls, v): if len(v) > 10000: raise ValueError('Prompt too long') # 检查恶意内容 if contains_malicious_content(v): raise ValueError('Invalid content') return v
@validator('max_tokens') def validate_max_tokens(cls, v): if v < 1 or v > 4000: raise ValueError('max_tokens must be between 1 and 4000') return v- 实施输入过滤,防止提示注入攻击
- 验证文件上传的类型和大小
- 使用沙箱环境执行不可信代码
- 过滤敏感信息(如密钥、密码)
- 实施内容安全策略(CSP)
- 防止信息泄露
def sanitize_response(response): # 移除可能的敏感信息 sensitive_patterns = [ r'sk-[a-zA-Z0-9]{48}', # API 密钥格式 r'password[=:]\s*\S+', # 密码 r'-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----', ] for pattern in sensitive_patterns: response = re.sub(pattern, '[REDACTED]', response) return response- 记录所有 API 请求和响应(脱敏后)
- 记录身份验证事件
- 记录配置变更
{ "timestamp": "2024-01-15T10:30:00Z", "level": "INFO", "event": "api_request", "user_id": "user_123", "endpoint": "/v1/chat", "ip_address": "192.168.1.100", "user_agent": "Mozilla/5.0...", "request_size": 1024, "response_size": 2048, "duration_ms": 1500}- 日志文件设置适当的权限(640)
- 实施日志轮转和归档
- 将关键日志发送到 SIEM 系统
- 异常访问模式(如大量失败登录)
- 异常流量模式(如 DDoS 攻击)
- 资源使用异常(如 CPU、内存激增)
alerts: - name: high_error_rate condition: error_rate > 5% duration: 5m severity: critical
- name: suspicious_login condition: failed_logins > 10 in 1m duration: 1m severity: high
- name: large_request condition: request_size > 10MB duration: 0s severity: warning安全更新与维护
Section titled “安全更新与维护”- 建立定期更新计划
- 优先处理高危漏洞
- 测试补丁后再部署到生产环境
- 定期进行漏洞扫描
- 实施依赖项安全检查
- 进行渗透测试
# 依赖安全检查示例pip install safetysafety check
# 容器扫描docker scan my-image:latest事件响应计划
Section titled “事件响应计划”- 检测:通过监控发现安全事件
- 遏制:隔离受影响系统,防止扩散
- 根除:消除安全威胁的根本原因
- 恢复:恢复系统正常运行
- 总结:事后分析,改进安全措施
密钥泄露响应
Section titled “密钥泄露响应”如果 API 密钥泄露:
- 立即撤销泄露的密钥
- 生成新密钥并更新配置
- 审查密钥使用日志,评估影响范围
- 通知相关方
- 加强密钥管理流程
数据保护法规
Section titled “数据保护法规”- GDPR:欧盟数据保护法规
- CCPA:加州消费者隐私法
- 等保 2.0:中国网络安全等级保护
- 了解适用的法规要求
- 实施数据主体权利(访问、删除、可携带)
- 建立数据处理记录
- 进行定期合规审计
安全最佳实践清单
Section titled “安全最佳实践清单”- API 密钥使用环境变量管理
- 启用 HTTPS 并配置强加密
- 实施输入验证和输出过滤
- 配置防火墙和访问控制
- 设置日志记录和监控
- 定期轮换 API 密钥
- 监控异常活动和告警
- 保持系统和依赖更新
- 定期备份关键数据
- 进行安全审计
- 定期审查安全策略
- 进行安全培训
- 更新应急响应计划
- 跟踪新的安全威胁
- 评估和采用新的安全技术
⚠️ 重要提醒:安全是一个持续的过程,而非一次性任务。定期审查和更新您的安全措施,以应对不断变化的威胁环境。