章節 應用程式

操作章節 03

應用程式

透過 Merak 發布一個服務:流量真正送到哪裡、成員用什麼名稱連它,以及誰可以連上它。

更新日期

路徑: /application · 選單: 管理 › 應用程式 · 頁面權限: application:R

在 Merak 裡,應用程式(Application) 就是一個被發布出來的服務。它帶有兩個端點:

端點是什麼
服務端點(host)真正的後端目標——流量最後送達的位址與連接埠。
虛擬 DNS(intercept)成員實際輸入的名稱與連接埠。Agent 會在本機攔截它,再把流量通到服務端點。

這一章能幫你完成什麼

  • 身為管理員,我想看到所有已發布的服務與它們的狀態,以便管理端點與可用性。
  • 身為管理員,我想登錄一個新服務,讓大家可以透過 Merak 連上它。
  • 身為管理員,我想在建立當下就授權給成員與組織,一次把設定做完。
  • 身為管理員,我想啟用、停用或刪除應用程式,以控制它的可用性。
  • 身為管理員,我想看到應用程式與成員之間的視覺化拓撲,快速掌握存取關係。
  • 身為管理員,我想把服務發布給沒有安裝 Agent 的瀏覽器,讓外包人員與非受管裝置也能使用。

1. 應用程式清單

1.1 欄位

欄位說明
名稱顯示名稱。
描述空白時顯示 -
通訊協定類型TCP / UDP(第四層)。預設隱藏。
服務 IP 端點格式為 protocol://host:port
虛擬 DNS 端點格式為 protocol://host:port
狀態啟用中/未啟用。
建立時間預設隱藏。
建立者預設隱藏。
更新時間預設隱藏。
更新者預設隱藏。
操作依狀態與權限過濾後的按鈕。

隱藏欄位可以從操作欄標題上的 欄位設定 齒輪打開,那裡也可以拖曳調整欄位順序。此設定存在瀏覽器本機,登出後仍保留。

1.2 狀態

狀態意義
啟用中運作中,服務可以被連上。
未啟用已停止,服務無法被連上。

1.3 篩選與排序

篩選條件型態說明
關鍵字文字比對名稱。
狀態核取方塊啟用中/未啟用。
Agentless核取方塊開/關。受功能旗標控制。只勾一個才會生效,兩個都勾或都不勾 = 不篩選。
組織多選需要 organization:R,否則不顯示此條件。
排序名稱、狀態、建立時間、更新時間。預設為建立時間、由新到舊。

點擊可排序的標題會循環:未排序 → 遞增 → 遞減 → 取消排序。

1.4 分頁

每頁 10 / 20 / 50 / 100 筆,預設 20。頁尾顯示 共 {total} 筆;若有服務數量上限,會再加上 / 上限 {limit}

1.5 列的捷徑

雙擊某一列可開啟詳細頁。單擊列身只有在 已進入選取模式(至少勾了一個核取方塊)之後才會切換選取狀態。


2. 列上的操作

操作允許的狀態權限
詳細資料任何狀態頁面存取權
複製任何狀態application:C
啟用未啟用application:U
停用啟用中application:U
刪除僅未啟用application:D

要刪除,先停用。 刪除按鈕只出現在未啟用的應用程式上。若因為仍有關聯資源而刪除失敗,你會看到錯誤訊息,而且 沒有強制刪除選項——請先自行清掉關聯。(只有成員有強制刪除的退路。)


3. 建立應用程式

路徑: /application/create · 權限: application:C

三個步驟的精靈,加上結果頁。

3.1 步驟一——基本資料

欄位必填規則
名稱必須唯一。輸入時即時檢查,重複時無法按 下一步
描述自由文字。

3.2 步驟二——服務端點

欄位必填預設值說明
通訊協定類型(L4)TCPTCP 或 UDP。建立後即固定,見 §6
通訊協定(L7)https自由文字,會依 L4 類型提供建議值。
服務主機127.0.0.1IPv4、IPv6 或主機名稱。
服務連接埠4431–65535。
虛擬 DNS 主機localhost成員實際輸入的名稱。
虛擬 DNS 連接埠4431–65535。

端點衝突偵測

每個端點是以 成對 檢查的——位址 連接埠一起看。改動任一半都會重跑該組的檢查,因此不會殘留舊值造成的訊息。

組合與既有應用程式衝突時
虛擬 DNS擋下送出。 衝突的應用程式名稱會顯示在位址欄位上。
服務端點只提示、不阻擋。 端點欄位下方會出現說明,指出是哪個應用程式。

為什麼兩者不同。 虛擬 DNS 重複是真正的衝突:兩個應用程式攔截同一組名稱與連接埠,在成員的 DNS 階段根本分不出來。服務端點重複則是合理的拓撲:一台後端常常在同一組 IP:port 上提供多個站台,靠 HTTP Host 標頭或 TLS SNI 區分。Merak 把它正確建模為「一個站台一個應用程式,各自有自己的虛擬 DNS,共用同一個服務端點」。若在這裡阻擋,這種後端就只能承載一個應用程式了。

如果衝突檢查本身失敗(例如路由層暫時連不上),系統會視為「沒有衝突」而不阻擋你;送出時後端會再驗證一次。

3.3 步驟三——存取權

欄位必填說明
成員多選,可搜尋,支援無限捲動。
組織多選,可搜尋,支援無限捲動。

兩者都是選填——建立一個完全沒有授權對象的應用程式是合法的。

每個欄位都需要 兩側 的權限

授權會同時寫入應用程式 被授權的對象,因此每個欄位都要求兩邊的權限:

欄位需要的權限
成員application:U member:R member:U
組織application:U organization:R organization:U

兩個欄位是 各自獨立 判斷的——你很可能可以編輯其中一個而不能編輯另一個。無法完整編輯的欄位會以 唯讀 呈現並附上說明,而且 送出時視為空值——它絕不會夾帶預先勾選的值繞過你的權限。應用程式本身還是會建立,只是略過那一項關聯。

這是刻意的:你不該在沒有權限的情況下,替別人的資源做授權決定。

3.4 步驟四——結果

系統會先建立應用程式本體,接著逐一附加成員與組織關聯,採盡力而為策略。只有應用程式本身建立失敗 才會讓結果頁變成紅色;個別關聯失敗不會中止其餘動作。


4. 複製應用程式

入口: 清單列 → /application/create/:id · 詳細頁工具列 → /application/:id/create · 權限: application:C

欄位帶入的值
名稱<來源名稱> - Copy,重複時加編號(Copy1Copy2……最多嘗試 20 次)。
描述原樣複製。
通訊協定類型/協定原樣複製。
服務主機/連接埠原封不動複製。 共用同一個後端目標是合理的,因此不會阻擋送出。
虛擬 DNS 主機原樣複製(它是有意義的資訊,例如真實網域)。
虛擬 DNS 連接埠從來源連接埠往上探測,直到找到沒被使用的(最多 20 次,且不超過 65535)。若都被占用,欄位會留 空白 讓你自己決定。
成員只帶 直接指派 的成員。需要 member:R,否則略過。
組織來源的組織。需要 organization:R,否則略過。

為什麼兩種連接埠處理方式不同。 虛擬 DNS 連接埠純粹是唯一性變數,+1 之後依然有效;服務連接埠則是後端真正在監聽的位置,+1 會種下一個指向空氣的值,那比重複還糟。原樣複製、把選擇權交給你,才是誠實的作法。

為什麼只複製直接指派的成員。 間接存取會隨著你複製的組織一起帶過去。複製兩次會產生一位帶有 直接 授權的成員,即使他離開組織也還留著。

能帶入欄位不等於能編輯欄位——§3.3 的唯讀規則依然適用,唯讀欄位一樣以空值送出。


5. 應用程式詳細頁

路徑: /application/:id · 權限: application:R

5.1 顯示的內容

欄位說明
名稱可就地編輯。
狀態標籤:啟用中(成功色)/未啟用(警示色)。
Agentless受功能旗標控制,見 §8
描述唯讀,即使在編輯模式下也一樣。
通訊協定(L7)可編輯。
通訊協定類型(L4)唯讀,僅一種例外,見 §6
服務 IP 端點位址與連接埠,可編輯。
虛擬 DNS 端點位址與連接埠,可編輯。
建立/更新時間唯讀。
建立者/更新者唯讀。
成員 區塊需要 member:R,否則整個區塊不顯示。
組織 區塊需要 organization:R
Agentless 授權成員 區塊受功能旗標控制,需要 member:R,且該應用程式已開啟 Agentless 才會出現。

5.2 工具列

按鈕出現時機權限
流程圖一律顯示頁面存取權
複製一律顯示application:C
啟用未啟用時application:U
停用啟用中時application:U
刪除僅未啟用時application:D

6. 編輯應用程式

編輯是 在詳細頁上就地進行 的——卡片右上角的鉛筆圖示會切換成儲存/取消。沒有 application:U 時,整組編輯介面都不會出現。

欄位可否編輯
名稱可以。必填,會重新檢查唯一性(排除自己)。
服務主機/連接埠可以。連接埠須為數字。成對衝突只會顯示提示。
虛擬 DNS 主機/連接埠可以。成對衝突 會擋下儲存
通訊協定(L7)可以,也可以清空。
描述不可。
通訊協定類型(L4)不可——僅有下述一種例外。

6.1 一次性的通訊協定類型補寫

若某筆資料 既沒有 L4 也沒有 L7 協定(舊資料,或某些匯入結果),編輯模式會出現 TCP / UDP 單選群組,讓你補上一次。補上之後控制項就消失,類型再度固定。這是不可逆的操作。

端點沒有變動就儲存,永遠不會跟自己衝突——檢查會排除正在編輯的這一筆。


7. 管理誰可以存取這個應用程式

使用詳細頁上的 成員組織 區塊。

7.1 快速選取:沿用另一個應用程式的成員清單

編輯模式下,成員選擇器提供三種搜尋模式,與 02 · 成員 §8.1 描述的成員側選擇器互為鏡像:

搜尋依據行為
關鍵字(預設)篩選成員清單。
應用程式找另一個應用程式,把 它的 成員套進來。
組織找一個組織,把 它的 成員套進來。需要 organization:R
套用模式效果
新增(預設)聯集——加入來源的成員,原本勾選的維持勾選。
移除交集——只取消來源也有的成員。

同樣的三條安全規則適用:從組織繼承的成員在兩個方向上都被排除確認對話框會在變更前逐項列出名稱,以及 套用只改變本機勾選——你仍需確認選擇器並儲存。全部清除 按鈕會透過同一個對話框清空所有可切換的勾選。


8. Agentless 存取(瀏覽器)

受功能旗標控制。

Agentless 不是一種獨立資源,而是 應用程式的一種進階存取模式。開啟後,成員不必安裝 Agent 就能用瀏覽器開啟該服務。

8.1 開啟方式

  1. 開啟應用程式詳細頁並進入編輯模式。
  2. 打開 Agentless 開關並儲存。

佈建完成後,詳細頁會顯示:

欄位說明
狀態provisioning(資訊)/active(成功)/error(危險)。從未啟用過時顯示為關閉。
存取網址成員使用的位址,可一鍵複製。
別名由顯示名稱自動推導,無法自行輸入

8.2 開啟前的三道關卡

開啟 Agentless 必須三個條件同時成立,否則會被擋下。關閉 則永遠允許,讓你隨時可以釋出配額或清除綁定。

關卡未通過時
L7 協定必須是 httphttps拒絕——瀏覽器無法講任意協定。
你的租戶必須已啟用 Agentless 功能拒絕。
Agentless 服務配額 不得已滿拒絕。

在三個條件還沒檢查完之前,開關維持關閉——Merak 選擇安全地失敗,而不是讓你打開一個它還無法確認的東西。

8.3 別名衝突

別名在租戶內必須唯一,而這只有後端能檢查。若發生衝突,錯誤訊息會請你 改應用程式的名稱,而不是換一個別名——因為別名是推導出來的,你根本看不到也輸入不了。

8.4 授權成員

Agentless 授權成員 區塊負責把個別成員綁定到這個應用程式的 Agentless 存取上。綁定就是真正的存取控制:未綁定的成員即使應用程式已開啟 Agentless,也連不上端點。

  • 只有 直接指派 的成員可以綁定。
  • 每一列候選都受 該成員自己的席次 限制:沒有席次的成員會被停用並顯示提示,面板頂端的橫幅會說明還有幾位缺席次。請先從成員那一側授予席次,見 02 · 成員 §6
  • 綁定 不會 消耗席次。席次是在成員資料上授予的。

9. 拓撲圖(流程圖)

路徑: 詳細頁上的 流程圖 按鈕。

一張兩層的圖:應用程式節點,以及掛在它下面的成員節點。

元素行為
應用程式節點綠色。選取後會開啟檢視面板,可在此改名(需 application:U)。
成員節點藍色。唯讀——這裡不提供成員改名。
新增節點新增成員關聯:步驟一選節點種類(目前只有成員),步驟二勾選一位或多位成員。瀏覽清單需要 member:R
畫布可平移、縮放、小地圖、自動置中。重新整理不會覆蓋你手動排好的版面。
返回回到詳細頁。

10. 批次作業

應用程式支援 匯出多選批次操作(啟用、停用、刪除),以及建立與修改兩種模式的 CSV 匯入。應用程式匯入不會默默改掉你留白的狀態或協定——修改模式下的空白儲存格是略過,不是套用預設值。

完整說明:09 · 批次作業


11. 權限總表

工作權限
檢視清單與詳細資料application:R
建立/複製/匯入application:C
編輯、啟用、停用application:U
刪除application:D
建立時編輯成員存取權application:U + member:R + member:U
建立時編輯組織存取權application:U + organization:R + organization:U
顯示成員區塊member:R
顯示組織區塊organization:R
以組織篩選organization:R

接下來