💡 國內提示:Binance 官網在中國大陸無法直連,訪問需自備網路工具;法幣入金不支援銀行卡,主要走 C2C(USDT↔CNY)通道完成。

An unlocked padlock rests on a computer keyboard.

量化實盤最大的風險之一不是策略虧損,而是 API Key 洩露導致賬戶被盜。寫程式碼時不小心把 Key 推到 GitHub、VPS 被入侵、日誌檔案洩露——任何一個失誤都可能讓賬戶資產瞬間清零。

這篇文章覆蓋 Binance API 安全配置的完整流程。

API Key 的許可權型別

Binance API Key 有三類許可權,按最小許可權原則配置:

許可權說明量化是否需要
讀取檢視賬戶、價格、歷史✅ 必須
交易下單、撤單✅ 必須(實盤)
提現轉賬到外部地址❌ 絕對不要開

提現許可權永遠不要開啟,量化程式不需要這個許可權。開了以後一旦 Key 洩露,資產可以被直接轉走。

建立 API Key

  1. 登入 Binance
  2. 右上角頭像 → API 管理
  3. 點 建立 API
  4. 選擇 系統生成 API
  5. 填入 API 備註(建議按用途命名,如 quant-aws-hk)
  6. 完成 2FA 驗證

建立完成後頁面會顯示:

  • API Key(公開金鑰,可以多次檢視)
  • Secret Key(私密金鑰,只顯示一次,務必立刻儲存)

⚠️ Secret Key 只在建立時顯示一次。如果沒儲存,只能刪除重建。

配置 IP 白名單(最重要的安全措施)

IP 白名單是最關鍵的安全機制:即使 API Key 洩露,攻擊者也無法從其他 IP 使用。

配置步驟:

  1. 點進剛建立的 API Key
  2. 找到 受信任的 IP 訪問限制
  3. 填入你的 VPS IP 地址(比如 43.199.32.92)
  4. 如果有多臺機器使用同一個 Key,逐個新增
推薦格式:
單個 IP:43.199.32.92

注意事項:

  • 填的是你的 VPS 的出口 IP,不是本地電腦 IP
  • 每次 VPS 重新分配 IP 後需要更新(AWS 重啟可能換 IP)
  • 如果用彈性 IP / 固定 IP,更穩定

許可權配置

在 API Key 設定頁面,只勾選以下許可權:

✅ 讀取
✅ 合約交易(如果跑合約策略)
✅ 現貨和槓桿交易(如果跑現貨策略)
❌ 提現(永遠不要開)
❌ 萬向劃轉(不需要就不開)
❌ 充值/提現(不開)

安全儲存 API Key

錯誤做法(高風險)

# ❌ 明文寫在程式碼裡
api_key = "abc123xyz..."
api_secret = "def456uvw..."
# ❌ 寫在 .env 檔案裡但把 .env 提交到 git
git add .env
git commit -m "add config"

正確做法 1:環境變數

# 在伺服器的 ~/.bashrc 或 ~/.profile 裡設定
export BINANCE_API_KEY="你的API Key"
export BINANCE_SECRET_KEY="你的Secret Key"

source ~/.bashrc

Python 程式碼裡讀取:

import os

api_key = os.environ.get('BINANCE_API_KEY')
api_secret = os.environ.get('BINANCE_SECRET_KEY')

if not api_key or not api_secret:
    raise ValueError("API keys not found in environment variables")

正確做法 2:獨立的 secrets 檔案(不納入 git)

# 建立 secrets 檔案
cat > ~/.secrets/binance.env << 'EOF'
BINANCE_API_KEY=你的API Key
BINANCE_SECRET_KEY=你的Secret Key
EOF

chmod 600 ~/.secrets/binance.env
# Python 讀取
from dotenv import load_dotenv
load_dotenv(os.path.expanduser('~/.secrets/binance.env'))

.gitignore 里加上:

.env
*.env
secrets/
.secrets/

正確做法 3:systemd 服務環境變數

如果量化程式用 systemd 管理,可以用 systemd 的環境變數注入:

# 建立環境檔案
cat > /etc/systemd/system/quant-strategy.env << 'EOF'
BINANCE_API_KEY=你的API Key
BINANCE_SECRET_KEY=你的Secret Key
EOF

chmod 600 /etc/systemd/system/quant-strategy.env

在 service 檔案裡引用:

[Service]
EnvironmentFile=/etc/systemd/system/quant-strategy.env
ExecStart=/usr/bin/python3 /opt/quant/strategy.py

防止 Key 意外洩露

檢查 GitHub 歷史提交

如果你曾經不小心把 Key 提交到 Git:

# 搜尋倉庫歷史裡的敏感資訊
git log --all --full-history -- "**/*.py" | xargs grep -l "api_key\|secret"

# 或者用專門工具
pip install trufflehog
trufflehog git file://. --only-verified

發現洩露就立刻到 Binance 刪除該 Key,重新建立一個。

定期輪換 Key

建議每 3-6 個月輪換一次 API Key:

  1. 建立新 Key
  2. 更新程式碼和環境變數使用新 Key
  3. 驗證新 Key 正常工作
  4. 刪除舊 Key

監控異常 API 呼叫

在 Binance API 管理頁面,可以看到每個 Key 的呼叫日誌。定期檢查:

  • 是否有意料之外的 IP 呼叫
  • 是否有非策略時間段的請求
  • 是否有提現相關的嘗試

API 限流與合理使用

Binance 對 API 有頻率限制,超限會被封禁 IP:

限制型別預設限制
請求頻率1200 次/分鐘(權重計算)
下單頻率50 單/10 秒(現貨)
WebSocket 連線每個賬號最多 5 個

量化程式碼裡需要處理限流:

import time
from binance.exceptions import BinanceAPIException

def safe_api_call(func, *args, **kwargs):
    """帶重試的 API 呼叫"""
    max_retries = 3
    for i in range(max_retries):
        try:
            return func(*args, **kwargs)
        except BinanceAPIException as e:
            if e.code == -1003:  # 頻率超限
                wait_time = 60 * (i + 1)
                print(f"Rate limited, waiting {wait_time}s...")
                time.sleep(wait_time)
            else:
                raise
    raise Exception("Max retries exceeded")

測試網(Testnet)開發除錯

開發新策略時,先在測試網驗證,不要直接用真實賬號:

  • 測試網地址:testnet.binance.vision
  • 免費領測試幣,隨便用
  • API 介面和主網一致,程式碼可以直接遷移
# 切換到測試網
from binance.client import Client

client = Client(
    api_key=os.environ['BINANCE_TESTNET_KEY'],
    api_secret=os.environ['BINANCE_TESTNET_SECRET'],
    testnet=True  # 關鍵引數
)

相關閱讀:


📷 封面圖 · Flux Schnell AI 生成 · panshi.io 品牌風格