fix(security): Architecture Review 修復 5 項高信心問題
安全修復 (P0):
1. ssh_provider: 新增 _validate_param() 白名單驗證,防止 command injection
- container_name/service/filter_name: [a-zA-Z0-9._-]{1,128}
- compose_dir: 必須以 /opt/ 或 /srv/ 開頭,禁止 ..
- domain: FQDN 白名單
- tail/port/lines: int() 轉換 + 上下限夾緊
2. ssh_provider: known_hosts=None 改為讀 SSH_MCP_KNOWN_HOSTS_FILE 環境變數
- 預設仍 None(內網快速啟動),但啟動時寫入 warning log
- 設定文件:ops/runbooks/ssh-mcp-setup.md (待補)
模組化修復 (P1):
3. km_conversion_service: 移除 import 時的 ALERT_EVENT_TYPES.update() 副作用
- ADR-071 event types 移入 alert_operation_log_repository.py 靜態集合
4. telegram_gateway: create_task() 改為 await + try/except
- 避免 DB session 關閉後的競爭條件
- KM 轉換失敗記錄 warning log,不中斷主流程
5. km_conversion_service: 新增頂層 try/except,錯誤一律 error log 後 re-raise
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2731,13 +2731,20 @@ class TelegramGateway:
|
||||
success=True,
|
||||
)
|
||||
|
||||
# 觸發 KM 轉換(重讀最新 incident)
|
||||
# 觸發 KM 轉換(直接 await,避免 create_task() 在 DB session 關閉後的競爭條件)
|
||||
# 重讀 incident 確保 manual_fix_steps 已寫入
|
||||
incident_updated = await incident_repo.get_by_id(approval.incident_id)
|
||||
if incident_updated:
|
||||
from src.services.km_conversion_service import get_km_conversion_service
|
||||
km_svc = get_km_conversion_service()
|
||||
import asyncio as _asyncio
|
||||
_asyncio.create_task(km_svc.convert(incident_updated))
|
||||
try:
|
||||
await km_svc.convert(incident_updated)
|
||||
except Exception as _km_err:
|
||||
logger.warning(
|
||||
"km_conversion_failed",
|
||||
incident_id=approval.incident_id,
|
||||
error=str(_km_err),
|
||||
)
|
||||
|
||||
# 回覆確認
|
||||
await self._send_request("sendMessage", {
|
||||
|
||||
Reference in New Issue
Block a user