操作章節 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) | 是 | TCP | TCP 或 UDP。建立後即固定,見 §6。 |
| 通訊協定(L7) | 否 | https | 自由文字,會依 L4 類型提供建議值。 |
| 服務主機 | 是 | 127.0.0.1 | IPv4、IPv6 或主機名稱。 |
| 服務連接埠 | 是 | 443 | 1–65535。 |
| 虛擬 DNS 主機 | 是 | localhost | 成員實際輸入的名稱。 |
| 虛擬 DNS 連接埠 | 是 | 443 | 1–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,重複時加編號(Copy1、Copy2……最多嘗試 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 開啟方式
- 開啟應用程式詳細頁並進入編輯模式。
- 打開 Agentless 開關並儲存。
佈建完成後,詳細頁會顯示:
| 欄位 | 說明 |
|---|---|
| 狀態 | provisioning(資訊)/active(成功)/error(危險)。從未啟用過時顯示為關閉。 |
| 存取網址 | 成員使用的位址,可一鍵複製。 |
| 別名 | 由顯示名稱自動推導,無法自行輸入。 |
8.2 開啟前的三道關卡
開啟 Agentless 必須三個條件同時成立,否則會被擋下。關閉 則永遠允許,讓你隨時可以釋出配額或清除綁定。
| 關卡 | 未通過時 |
|---|---|
L7 協定必須是 http 或 https | 拒絕——瀏覽器無法講任意協定。 |
| 你的租戶必須已啟用 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 |
接下來
- 改以團隊為單位授權,而不是一個一個加:04 · 組織
- 確認有路由節點覆蓋該網段:05 · Merak Node