雲控開關

發出去還能收回來的產物——在入口網站一鍵停用或恢復,在它下一次檢查時生效。

MagicLock 預設加密出來的一切都完全離線、永遠能跑。這是一個承諾,而承諾是雙向的:離線產物一旦發出去,你就再也搆不著它了。雲控開關是為那些你確實需要搆得著的場景準備的選用項目。

保護時加上 --web-gate,產物在解密之前會先去取一份由你掌控的簽章許可。你在入口網站把開關撥到關,它就會停——所有執行它的地方,在各自下一次檢查時。撥回來它又能跑,不用重新發佈。

離線產物(預設)雲控產物(--web-gate
承諾永遠能跑——訂閱到期、席位變動都不影響你說了算——入口網站一鍵停用/恢復
執行時連網從不許可有效期內不連網;過期後更新
發出去之後還能停嗎不能——這是刻意的設計能,在它下一次檢查時

適合租賃與訂閱、必須到期即停的試用評估、尾款交付保險、以及外洩止損。其餘情況用預設的離線產物就好。這個選擇是按產物而不是按帳號的——同一個產品裡兩種可以混用。

開啟它

shell
magiclock protect app.py --web-gate
magiclock protect-model weights.bin --web-gate
magiclock build app.py --web-gate

登記發生在加密的那一刻,需要連網並已登入。生產一個雲控產物沒有離線後備——一個從未被登記過的產物根本不可能被控制,MagicLock 不會假裝可以。

執行時會發生什麼

  1. 產物向伺服器索取一份簽章的允許或拒絕。
  2. 在這份許可仍然有效期間,它完全不連網執行——不是每次執行都要回連。
  3. 許可過期後它會去更新。收到拒絕就立即停止——沒有寬限。
  4. 如果更新因為斷網而失敗,它會在寬限視窗內繼續執行,視窗過後 fail-closed。

有兩個細節值得知道。拒絕是黏著的:在一台斷網機器上重放一份舊的允許快取,無法讓已停用的產物復活。以及首次執行必須連網——此時還沒有任何快取許可,也就沒有東西可以後備。

寬限視窗

--gate-grace 決定產物在最後一次取得許可之後還能離線工作多久:

shell
magiclock protect app.py --web-gate --gate-grace 24h
magiclock protect app.py --web-gate --gate-grace 7d

可設 1h30d,預設 12h。設得越短控制越緊,但也越依賴你客戶那邊的網路——按實際部署情境來定,而不是按緊張程度。--gate-grace 只能與 --web-gate 一起使用。

管理已經發出去的東西

在客戶入口網站的 產物 頁面,可以看到你登記過的全部產物、它們的狀態與近期活動。停用會在該產物下一次檢查時生效,恢復同樣快。

命令列:

shell
magiclock artifacts     # id、標籤、狀態與閘門活動

刪除產物是永久的:此後它會一直回答拒絕,且無法恢復。除非你要的正是這個效果,否則請用停用。

讓停用更快生效

雲控產物按它自己的檢查點複查,所以一個長駐行程(伺服器、worker)可能一直靠啟動時取到的那份許可在跑。如果你需要入口網站裡的停用盡快落到這類行程上,讓它定時呼叫 magiclock.revalidate() —— 那會當場強制取一份新許可。這就是「幾秒內停」與「最終會停」的差別。

雲控不是什麼

它不是授權檢查。訂閱到期只會讓你無法打包產物——不會反過來停掉你已經發出去的東西,無論那是不是雲控產物。入口網站裡那個開關是你的,也是唯一能停下雲控產物的東西。

它也不改變預設行為。沒有加 --web-gate 保護的產物永遠保持離線,無法被遠端停止——包括我們也不能。

可用性

雲控開關包含在每一個付費方案中。它不屬於免費試用——免費試用提供的是完整的離線保護。

為什麼繞不過去

閘門參數是放在加密信封的認證資料內部的,而不是附在旁邊——剝掉它、改掉它、或者移植到另一個產物上,都會直接讓解密失敗。編譯產物則把同樣的參數作為逐模組編譯進去的常數攜帶。

許可由固定在你的 MagicLock 套件內的廠商金鑰簽章,因此偽造或重放的判決無法通過驗章。用於判斷過期與寬限的時鐘,取的是系統時鐘與持久化高水位標記之中較晚的那個,所以把機器時鐘往回撥並不能延長任何東西。