本卡屬 FR-187(母卡 CM-3711),第 2 批 C:金鑰登記簿、Agent 授權照開通、註冊碼管理(主系統 repo
compliance-manager-be,9 檔/約 822 行)。只掃不修。工作坊會用.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描,小弟不必自己打指令。
用 Claude Code 官方 claude-security plugin 掃「金鑰登記簿、Agent 授權照開通、註冊碼管理」這一塊,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題,修是另外開卡的事。
三件事:①FR-171 的金鑰登記簿(主系統用哪幾把鑰匙簽發給 Agent 的通行證,可以新增、啟用、撤銷);②FR-182 Agent 授權照線上開通(Agent 帶註冊碼來,主系統代它向 License Center 開通);③註冊碼的產生與撤銷。
登記簿是全部 Agent 的信任根:誰能換鑰匙,誰就能讓所有 Agent 改信他的鑰匙。授權照開通是不需登入的入口,任何人只要有一把註冊碼就能打。
背景:這一輪掃的是 2026-11-01(FR-172 開案)到 11-09 之間主專案與 jedi-remote-agent 新寫或大改的程式(FR-171/172/178/179/180/181/182),這些程式都沒掃過。
core/plugins/_agent_keys.py
app/remote_agent/service/trust_anchor_service.py
api/remote_agent/routes/trust_anchor_route.py
domain/remote_agent/trust_anchor_domain_service.py
infra/remote_agent/trust_anchor_repo_impl.py
core/trust_anchor_bootstrap.py
app/remote_agent/service/agent_license_activation_service.py
api/remote_agent/routes/agent_license_route.py
api/remote_agent/routes/agent_enroll_token_route.py
檔數 9、約 822 行。驗檔數:git -C <工作目錄> ls-files -- core/plugins/_agent_keys.py app/remote_agent/service/trust_anchor_service.py api/remote_agent/routes/trust_anchor_route.py domain/remote_agent/trust_anchor_domain_service.py infra/remote_agent/trust_anchor_repo_impl.py core/trust_anchor_bootstrap.py app/remote_agent/service/agent_license_activation_service.py api/remote_agent/routes/agent_license_route.py api/remote_agent/routes/agent_enroll_token_route.py | wc -l 應為 9。scope 外的檔不要讀,除非下面「重點看什麼」明寫「只追這幾行」;越界的發現首腦驗收時會挑掉。
首腦讀過程式碼後認為最容易出事的地方,是思考起點不是檢查清單,行號以 2026-11-09 的主線為準,對不上就以內容為準。工具不會照這份走,掃完後你要自己逐條對一遍:工具沒報的,開檔看一眼,寫「人工查過:成立/不成立/為什麼」。
trust_anchor_route.py 每支都掛 require_platform_admin_route;_agent_keys.py:165-196 的 guarded=False 四支由端點自己守、guarded=True 四支要經 remote_agent._admin_guarded 套能力點。核對 core/plugins/remote_agent.py:424-425 的掛法,確認 guarded=True 那四支真的有被掛上而且有套到守門(只追這兩行,不掃整支 remote_agent.py)。trust_anchor_service.py:82-117 新增/啟用/撤銷:能不能撤掉最後一把在用的鑰匙,讓全部 Agent 都驗不過;private_key_ref 是相對路徑,讀私鑰的地方有沒有擋 ../(資料表被改就能指到任意檔)。_write_private_key(trust_anchor_service.py:170)0600+O_EXCL:保管目錄在容器的哪裡、會不會跟著備份或診斷包流出去。core/trust_anchor_bootstrap.py:開機補登三列共用一把公鑰,那把從哪裡讀;補登在什麼條件下會覆蓋既有的列。agent_license_route.py:27-39 不需登入:有效註冊碼就能代打 License Center,而且刻意不看剩餘次數(agent_license_activation_service.py:71-90)。這個端點有沒有頻率限制;所有客戶都經同一個主系統 IP 去打 LC,LC 的鎖定會不會變成「一個人亂打,全部客戶都被鎖」。agent_license_activation_service.py:92-127:LC 回應的 license 原樣回給呼叫者(不驗章,Agent 端會驗);log 只記雜湊,確認開通碼與指紋全文沒有進 log。agent_enroll_token_route.py:產生、撤銷註冊碼的能力點;產出的明文註冊碼有沒有進 log 或 api 日誌。