本卡屬 FR-077(母卡 CM-1591),修 R1(CM-1592)的 F1+F3(心跳)與 F2+F5(ack/result)四條。面板未跑成(額度全滅),runner 逐條開檔核對+首腦親自複核屬實。決策者 2026-09-08 裁 CRITICAL(原 runner 判 HIGH),四條併一張因為修法是同一套機制。

問題是什麼(白話)

我們發給客戶裝在機房的 agent,會定期撥回雲端「報到」(心跳)、領工作、回報結果。這四個網址(register/heartbeat/ack/result)完全不掛任何認證——程式碼註解說「不用驗,因為外層 nginx 會用 mTLS 驗客戶端憑證」。但出貨的 nginx 設定根本沒有那一行。 三個 nginx 設定檔全部 grep 不到 ssl_verify_client

所以實際上:請求裡自己寫「我是哪台 agent」,系統就信。 後果分四層:

業界對照(決策者要求的分析,摘要):Elastic Agent/Kubernetes kubelet/AWS SSM 的共同做法是——註冊後每台 agent 持有自己的金鑰,之後每次通訊都用它證明身分,應用層自己驗;TLS 層的客戶端憑證是加分項,不能當唯一防線。我們已經有 80% 零件(註冊時簽憑證給 agent、agent 端 _post() 也真的用 cert= 出示了憑證),缺的只是「雲端反過來驗」這一段。

首腦核對(2026-09-08,不信 runner 自述):

在哪裡

~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/api/remote_agent_route.py:220-223          ROUTE_TABLE 四條控制面端點第三欄 False
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/plugin.py:create_blueprint()                 False → 不套任何 decorator;RemoteAgentAdapters 沒有 agent 認證插槽
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/app/service/agent_enrollment_service.py:274-311   heartbeat():身分只看 payload 自報,兩處查詢無 tenant_id
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/app/service/agent_enrollment_service.py:186-272   register():簽完憑證後沒把公鑰/憑證指紋存進 remote_agents
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/app/service/agent_task_service.py:73-107     ack_task/receive_result:不驗身分、不查歸屬
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/domain/agent_task/service/agent_task_domain_service.py   狀態機入口 update_status(),歸屬檢查可放這層
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/infra/remote_agent/model/remote_agent.py     要加公鑰欄位
~/Projects/Jedicogy/module/jedi-python-package/jedi-remote-agent/jedi_remote_agent/migrations/                                  隨包 migration 要加一支
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/sql/                                 主專案對應 migration
~/Projects/Billows/Audit-Manager/compliance-manager-be/app/remote_agent/adapter/detection_task_payload_provider.py:110-127   明文憑證落點(本卡不動它,記 follow-up)
~/Projects/Billows/Audit-Manager/compliance-manager-fe/nginx.onprem.conf:63-95                      連帶:補 ssl_verify_client(加分項,非唯一防線)
~/Projects/Billows/Audit-Manager/evidence-agent/core/task_executor.py:_post()                agent 端已用 cert= 出示;需配合改成對請求簽章(見怎麼修)

怎麼修

核心原則:身分是「證明」不是「宣稱」。應用層自己驗,fail closed。 分五步,①②③是必要條件,④⑤是連帶。