审计日志与安全#

启用基于数据库的身份验证系统后(默认启用,参见 身份验证系统(基于数据库)),Xinference 会记录 API 活动的审计日志,并保护 API 免受暴力破解攻击。管理员可以在 Web UI 中查看这两项内容。

审计日志#

受保护且经过身份验证的 API 活动会以 JSON 行记录到 <XINFERENCE_LOG_DIR>/audit.log``(默认位于 ``<XINFERENCE_HOME>/logs)。日志文件按天(以及按大小)轮转,保留 XINFERENCE_AUDIT_LOG_RETENTION_DAYS 天(默认 90 天)。

这是身份验证与安全审计记录,并非完整的 HTTP 访问日志。Xinference 有意排除 /v1/audit/*/v1/cluster/auth/v1/cluster/ui_config/status/v1/address;未经过身份验证审计路径的公共或初始化接口也可能不会被记录。

每条记录包含以下字段(部分列举):

  • categoryinference (模型调用,如 /v1/chat/.../v1/embeddings)、 auth (登录/令牌接口)或 admin (其余所有接口)。

  • userauth_typeapi_key_name / api_key_prefix:调用者是谁以及使用了哪种鉴权方式。

  • model_id / model_name / model_type:涉及的模型(如有)。

  • endpointstatuslatency_msclient_ipnodeaddress:调用了什么、结果如何以及在哪里执行。

审计中心#

Web UI 的 审计中心 页面允许管理员搜索和过滤审计记录(按时间范围、用户、API Key、模型、类别、状态和客户端 IP)。其背后的接口是 GET /v1/audit/search,需要 admin 权限。

默认情况下,搜索读取本地的 audit.log。如果 XINFERENCE_ES_URL 环境变量指向一个 Elasticsearch 集群(例如通过 Filebeat 传送审计日志),则搜索会改为查询 Elasticsearch,并使用 XINFERENCE_AUDIT_ES_INDEX 指定的索引模式(默认 xinference-audit-*)。

防暴力破解#

API Key 鉴权失败会在两个层面上进行频率限制:

  • 按 IP:某个 IP 在 XINFERENCE_RATE_LIMIT_IP_WINDOW_SECONDS (默认 300)秒内使用无效 API Key 失败达到 XINFERENCE_RATE_LIMIT_IP_MAX_FAILURES 次(默认 10)后,将被封禁 XINFERENCE_RATE_LIMIT_IP_BAN_SECONDS 秒(默认 3600)。来自被封禁 IP 的请求会被拒绝并返回 429 Too Many Requests

  • 按(IP、API Key)组合:同一 IP 使用同一个 Key 在 XINFERENCE_RATE_LIMIT_KEY_WINDOW_SECONDS (默认 300)秒内失败达到 XINFERENCE_RATE_LIMIT_KEY_MAX_FAILURES 次(默认 5)后,该组合将被封禁 XINFERENCE_RATE_LIMIT_KEY_BAN_SECONDS 秒(默认 3600)。

单个 API Key 可以在创建或更新时通过 rate_limit_max_failures / rate_limit_window_seconds / rate_limit_ban_seconds 字段覆盖 Key 级别的限制。

安全设置#

Web UI 的 安全设置 页面允许管理员:

  • 在运行时查看和调整频率限制配置,

  • 列出当前被封禁的 IP 以及(IP、Key)组合,

  • 逐个或一次性解除封禁。

对应的 REST 接口位于 /v1/admin/security/* 下(例如 GET/PUT /v1/admin/security/rate-limitGET /v1/admin/security/banned-ipsPOST /v1/admin/security/unban-ip),需要 admin 权限。