跳到內容

安全

節點間通訊

多節點 vLLM 部署中的所有節點間通訊預設不安全,必須透過將節點置於隔離網路上來進行保護。這包括

  1. PyTorch Distributed 通訊
  2. KV 快取傳輸通訊
  3. 張量、流水線和資料並行通訊

節點間通訊的配置選項

以下選項控制 vLLM 中的節點間通訊

1. 環境變數:

  • VLLM_HOST_IP:設定 vLLM 程序通訊的 IP 地址

2. KV 快取傳輸配置:

  • --kv-ip:KV 快取傳輸通訊的 IP 地址(預設:127.0.0.1)
  • --kv-port:KV 快取傳輸通訊的埠(預設:14579)

3. 資料並行配置:

  • data_parallel_master_ip:資料並行主節點的 IP(預設:127.0.0.1)
  • data_parallel_master_port:資料並行主節點的埠(預設:29500)

關於 PyTorch Distributed 的注意事項

vLLM 使用 PyTorch 的分散式功能進行一些節點間通訊。有關 PyTorch Distributed 安全注意事項的詳細資訊,請參閱PyTorch 安全指南

PyTorch 安全指南中的要點

  • PyTorch Distributed 功能僅用於內部通訊
  • 它們不是為在不受信任的環境或網路中使用而設計的
  • 出於效能原因,不包含任何授權協議
  • 訊息以未加密的方式傳送
  • 接受來自任何地方的連線,不進行檢查

安全建議

1. 網路隔離:

  • 將 vLLM 節點部署在專用、隔離的網路上
  • 使用網路分段來防止未經授權的訪問
  • 實施適當的防火牆規則

2. 配置最佳實踐:

  • 始終將 VLLM_HOST_IP 設定為特定 IP 地址,而不是使用預設值
  • 配置防火牆,僅允許節點之間必要的埠通訊

3. 訪問控制:

  • 限制對部署環境的物理和網路訪問
  • 為管理介面實施適當的身份驗證和授權
  • 對所有系統元件遵循最小許可權原則

4. 限制媒體 URL 的域名訪問:

透過設定 --allowed-media-domains 來限制 vLLM 可以訪問媒體 URL 的域名,以防止伺服器端請求偽造 (SSRF) 攻擊。(例如:--allowed-media-domains upload.wikimedia.org github.com www.bogotobogo.com

此外,請考慮設定 VLLM_MEDIA_URL_ALLOW_REDIRECTS=0 以防止 HTTP 重定向被跟蹤以繞過域名限制。

安全與防火牆:保護暴露的 vLLM 系統

雖然 vLLM 被設計為允許不安全的網路服務隔離到私有網路,但有些元件—如依賴項和底層框架—可能會開啟監聽所有網路介面的不安全服務,有時這超出了 vLLM 的直接控制範圍。

一個主要問題是使用 torch.distributed,vLLM 利用它進行分散式通訊,包括在單個主機上使用 vLLM 時。當 vLLM 使用 TCP 初始化時(參見PyTorch TCP 初始化文件),PyTorch 會建立一個 TCPStore,該儲存預設監聽所有網路介面。這意味著,除非採取額外的保護措施,否則這些服務可能會被任何能夠透過任何網路介面訪問您機器的主機訪問。

從 PyTorch 的角度來看,任何使用 torch.distributed 的行為都應被視為預設不安全。 這是 PyTorch 團隊已知且故意的行為。

防火牆配置指南

保護 vLLM 系統的最佳方法是仔細配置防火牆,僅暴露最小必需的網路表面積。在大多數情況下,這意味著

  • 阻止所有入站連線,除了 API 伺服器監聽的 TCP 埠。

  • 確保用於內部通訊的埠(例如 torch.distributed 和 KV 快取傳輸的埠)只能從受信任的主機或網路訪問。

  • 切勿將這些內部埠暴露給公共網際網路或不受信任的網路。

有關具體的防火牆配置說明,請查閱您的作業系統或應用程式平臺文件。

API 金鑰認證的侷限性

概述

--api-key 標誌(或 VLLM_API_KEY 環境變數)為 vLLM 的 HTTP 伺服器提供了身份驗證,但僅限於 /v1 路徑字首下的 OpenAI 相容 API 端點。許多其他敏感端點在此 HTTP 伺服器上暴露,但沒有任何身份驗證強制執行。

重要提示: 在保護 vLLM 訪問時,不要僅依賴 --api-key。生產部署需要額外的安全措施。

受保護的端點(需要 API 金鑰)

當配置了 --api-key 時,以下 /v1 端點需要 Bearer token 認證

  • /v1/models - 列出可用模型
  • /v1/chat/completions - 聊天補全
  • /v1/completions - 文字補全
  • /v1/embeddings - 生成嵌入
  • /v1/audio/transcriptions - 音訊轉錄
  • /v1/audio/translations - 音訊翻譯
  • /v1/messages - Anthropic 相容的訊息 API
  • /v1/responses - 響應管理
  • /v1/score - 評分 API
  • /v1/rerank - 重排 API

未受保護的端點(無需 API 金鑰)

即使配置了 --api-key,以下端點也不需要身份驗證

推理端點

  • /invocations - SageMaker 相容的端點(路由到與 /v1 端點相同的推理函式)
  • /inference/v1/generate - 生成補全
  • /pooling - 池化 API
  • /classify - 分類 API
  • /score - 評分 API(非 /v1 版本)
  • /rerank - 重排 API(非 /v1 版本)

操作控制端點(始終啟用)

  • /pause - 暫停生成(導致拒絕服務)
  • /resume - 恢復生成
  • /scale_elastic_ep - 觸發擴充套件操作

實用工具端點

  • /tokenize - 對文字進行分詞
  • /detokenize - 對分詞進行反向分詞
  • /health - 健康檢查
  • /ping - SageMaker 健康檢查
  • /version - 版本資訊
  • /load - 伺服器負載指標

分詞器資訊端點(僅當設定了 --enable-tokenizer-info-endpoint 時)

此端點僅在設定了 --enable-tokenizer-info-endpoint 標誌時可用。它可能會暴露敏感資訊,如聊天模板和分詞器配置

  • /tokenizer_info - 獲取全面的分詞器資訊,包括聊天模板和配置

開發端點(僅當 VLLM_SERVER_DEV_MODE=1 時)

這些端點僅在環境變數 VLLM_SERVER_DEV_MODE 設定為 1 時可用。它們僅用於開發和除錯目的,絕不應在生產環境中啟用

  • /server_info - 獲取詳細的伺服器配置
  • /reset_prefix_cache - 重置字首快取(可能中斷服務)
  • /reset_mm_cache - 重置多模態快取(可能中斷服務)
  • /sleep - 使引擎進入睡眠狀態(導致拒絕服務)
  • /wake_up - 喚醒處於睡眠狀態的引擎
  • /is_sleeping - 檢查引擎是否處於睡眠狀態
  • /collective_rpc - 在引擎上執行任意 RPC 方法(極其危險)

Profiler 端點(僅當設定了 VLLM_TORCH_PROFILER_DIRVLLM_TORCH_CUDA_PROFILE 時)

這些端點僅在啟用 Profiling 時可用,並且僅應用於本地開發

  • /start_profile - 啟動 PyTorch Profiler
  • /stop_profile - 停止 PyTorch Profiler

注意: /invocations 端點尤其令人擔憂,因為它提供了對與受保護的 /v1 端點相同的推理功能的未經身份驗證的訪問。

安全影響

能夠訪問 vLLM HTTP 伺服器的攻擊者可以

  1. 繞過身份驗證,透過使用非 /v1 端點(如 /invocations/inference/v1/generate/pooling/classify/score/rerank)在沒有憑據的情況下執行任意推理
  2. 導致拒絕服務,方法是呼叫 /pause/scale_elastic_ep 而無需 token
  3. 訪問操作控制以操縱伺服器狀態(例如,暫停生成)
  4. 如果設定了 --enable-tokenizer-info-endpoint 訪問敏感的分詞器配置,包括聊天模板,這可能會洩露提示工程策略或其他實現細節
  5. 如果設定了 VLLM_SERVER_DEV_MODE=1 透過 /collective_rpc 執行任意 RPC 命令,重置快取,使引擎進入睡眠狀態,並訪問詳細的伺服器配置

1. 最小化暴露的端點

關鍵:切勿在生產環境中設定 VLLM_SERVER_DEV_MODE=1。開發端點暴露了極其危險的功能,包括

  • 透過 /collective_rpc 執行任意 RPC
  • 可能中斷服務的快取操縱
  • 詳細的伺服器配置洩露

同樣,切勿在生產環境中啟用 Profiler 端點(VLLM_TORCH_PROFILER_DIRVLLM_TORCH_CUDA_PROFILE)。

謹慎使用 --enable-tokenizer-info-endpoint 僅當您需要公開分詞器配置資訊時才啟用 /tokenizer_info 端點。此端點會顯示聊天模板和分詞器設定,其中可能包含敏感的實現細節或提示工程策略。

2. 部署在反向代理後面

最有效的方法是將 vLLM 部署在反向代理(如 nginx、Envoy 或 Kubernetes Gateway)後面,該代理

  • 明確地僅允許您想向終端使用者公開的端點
  • 阻止所有其他端點,包括未經身份驗證的推理和操作控制端點
  • 在代理層實現額外的身份驗證、速率限制和日誌記錄

報告安全漏洞

如果您認為發現了 vLLM 的安全漏洞,請按照專案的安全策略進行報告。有關如何報告安全問題以及專案安全策略的更多資訊,請參閱vLLM 安全策略