tool_name_glob) và argument nào (các mệnh đề args_match trên các trường
JSONPath). Trang này là ngữ pháp chính xác cho cả hai —
một mẫu khớp gì, không khớp gì, và mỗi toán tử ép kiểu ra sao — để một quy tắc bạn soạn
trong console hành xử đúng như bạn đọc nó ở đây.
Use-case nổi bật: biến một “block shell.exec” thô bạo thành một “block shell.exec chỉ
khi lệnh trông giống rm -rf” có phẫu thuật. Glob chọn họ tool; các toán tử argument
chọn cuộc gọi nguy hiểm bên trong nó.
Đây là tham chiếu cú pháp. Về nơi các mệnh đề này nằm trên một quy tắc, thứ tự quy tắc, và
verdict, xem tham chiếu sâu Quy tắc firewall. Về chính các
trường của quy tắc, xem tổng quan Firewall.
1. Cú pháp này áp dụng ở đâu
Cả hai dạng đều được soạn trên một quy tắc firewall, trong console dưới/console/firewall
(ghi yêu cầu Developer+). Bạn không bao giờ gọi trực tiếp matcher — gateway đánh giá nó
trên mọi cuộc gọi tool đối với chính sách đã phân giải.
Một quy tắc khớp khi bề mặt của nó, tool_name_glob của nó, glob skill tùy chọn của nó,
và các mệnh đề args_match của nó tất cả khớp; match đầu tiên thắng.
2. Ngữ pháp glob tên-tool
tool_name_glob là một ngữ pháp có chủ đích nhỏ, dự đoán được — không phải một regex đầy
đủ. Các mẫu được khớp phân biệt chữ hoa-thường (tên tool MCP theo quy ước là
chữ-thường-có-dấu-chấm, nên một lần case-fold sẽ làm bạn ngạc nhiên khi bạn sao chép một tên
từ tab Discovered tools).
* (hoặc rỗng) — khớp mọi tool
* (hoặc rỗng) — khớp mọi tool
Một mẫu rỗng hoặc một
* trơ khớp tất cả các tool. Dùng nó trên một quy tắc catch-all,
hoặc dựa vào default_verdict của chính sách thay vào đó.foo.* — khớp tiền tố
foo.* — khớp tiền tố
shell.* khớp shell.exec, shell.read, shell.write. Nó không khớp shell
trơ (dấu chấm là bắt buộc — một glob tiền tố chỉ bao phủ các con có namespace).*.exec — khớp hậu tố
*.exec — khớp hậu tố
*.exec khớp shell.exec có namespace và exec trơ, không-namespace (các function
call provider-native và các MCP server không-namespace phơi bày tool dưới động từ trơ,
nên một quy tắc hậu tố bao phủ cả hai hình dạng). Hậu tố giữ neo ở một dấu chấm hoặc đầu
chuỗi, nên *.exec không khớp shell.execute.*.X.* — khớp giữa (infix)
*.X.* — khớp giữa (infix)
*.shell.* khớp bất kỳ hình dạng <server>.shell.<verb> nào —
local.shell.exec, byo.shell.run. Nó yêu cầu ít nhất một ký tự ở mỗi bên của infix,
nên *.shell.* không khớp shell trơ hay .shell. một mình. Chỉ hình dạng đối
xứng *.X.* được xử lý như một infix; một mẫu hỗn hợp như foo.*.bar rơi xuống khớp
chính xác.bất cứ thứ gì khác — khớp chính xác
bất cứ thứ gì khác — khớp chính xác
Bất kỳ mẫu nào không phải một trong bốn hình dạng wildcard ở trên (bao gồm một tên tool
literal, hoặc một combo méo như
foo.*.bar) được so sánh như một chuỗi chính xác, phân
biệt chữ hoa-thường.3. Các mệnh đề argument JSONPath
args_match là một tập mệnh đề, mỗi cái là một bộ ba {path, op, value}. path là một
JSONPath vào đối tượng argument của cuộc gọi tool; op là một trong bảy toán tử; value là
cái để so sánh đối với. Tất cả các mệnh đề trong một quy tắc được AND lại với nhau —
mỗi mệnh đề phải khớp để quy tắc kích hoạt.
Tập con JSONPath được hỗ trợ
| Hình dạng | Khớp |
|---|---|
$.foo | Một key cấp cao nhất. |
$.foo.bar | Một key lồng nhau. |
$.foo[0] | Một phần tử mảng theo chỉ số. |
$.arr[1].k | Chỉ số rồi key (tổ hợp của các cái trên). |
$.*), filter ($.foo[?(...)]), slice
($.foo[0:2]), hoặc đệ quy đi xuống ($..foo).
Fail-closed trên path. Nếu path của một mệnh đề phân giải về không gì cả — key thiếu,
các argument không phải JSON hợp lệ, hoặc value sai kiểu cho toán tử — mệnh đề đó đánh giá
thành false, quy tắc không kích hoạt, và việc đánh giá rơi xuống quy tắc tiếp theo
hoặc mặc định chính sách. Một argument méo không bao giờ tự-deny và không bao giờ làm sập
engine.
4. Các toán tử argument
Bảy toán tử, một tập đóng. Trình validator console và engine live chia sẻ đúng cùng từ vựng, nên một mệnh đề lưu được là một mệnh đề chạy được.| Toán tử | So sánh | Quy tắc kiểu |
|---|---|---|
eq | Bằng chính xác. | Có kiểu: string↔string, bool↔bool, hoặc number↔number. Kiểu hỗn hợp không bao giờ khớp. |
contains | Chứa chuỗi con. | Cả hai bên phải là string; bất cứ thứ gì khác là không-khớp. Một value rỗng khớp mọi string. |
regex | Một mẫu RE2 (thời gian tuyến tính, không backreference) đối với một string. | Value và arg đã phân giải đều phải là string. Một mẫu không hợp lệ vô hiệu mệnh đề (không bao giờ khớp). |
in | Thành viên — value bằng bất kỳ phần tử nào của một list. | Value phải là một JSON array; mỗi phần tử so sánh với ngữ nghĩa eq. |
cidr_match | Value đã phân giải là một IP bên trong mạng đã cho. | Value là một chuỗi CIDR (IPv4 hoặc IPv6, vd: 10.0.0.0/8, fd00::/8); arg phải parse được thành một IP. |
gt | Lớn-hơn, số. | Cả hai bên phải ép được thành một số. Một string trông giống số không được ép — đó là một mismatch kiểu (không-khớp). |
lt | Nhỏ-hơn, số. | Cùng quy tắc chỉ-số như gt. |
5. Một ví dụ chạy thực
Chặn một lần export database phá hủy, nhưng chỉ khi nó nhắm tới một connection production qua một host mạng riêng:db.* scope quy tắc vào họ tool database; ba mệnh đề AND với
nhau nên verdict (một deny, chẳng hạn) kích hoạt chỉ khi statement phá hủy và
connection là một trong hai target prod có tên và host của nó rơi vào dải riêng
10.0.0.0/8. Một db.query đối với một connection dev trên một IP công khai lướt qua quy
tắc này mà không hề hấn.
6. Các quy tắc egress (host / CIDR)
Toán tửcidr_match ở trên khớp một IP mà một tool báo cáo trong các argument của nó.
Điều đó khác với một quy tắc bề mặt egress, vốn đánh giá đích đến đi ra ngoài mà một
tool thực sự vươn tới bằng một danh sách allow hoặc deny host/CIDR — phòng vệ SSRF và
exfiltration dữ liệu chính. Các quy tắc egress
dùng cùng ký hiệu CIDR nhưng sống trên bề mặt egress; xem
Quy tắc firewall để biết định dạng danh sách egress.
Không preset nào cung cấp các quy tắc egress CIDR cho bạn — autonomy level
tight từ chối
các tên tool dạng fetch phổ biến (http_fetch, fetch_url, web_search, request),
không phải các dải mạng. Hãy soạn quy tắc deny host/CIDR của riêng bạn khi bạn cần ghim
egress vào các đích đến cụ thể.7. Tham chiếu nhanh
Các hình dạng glob
* tất cả · foo.* tiền tố · *.exec hậu tố (+ động từ trơ) · *.X.*
infix · bất cứ thứ gì khác chính xác. Phân biệt chữ hoa-thường.JSONPath
$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. Không wildcard,
filter, slice, hay đệ quy đi xuống.Toán tử string
eq (có kiểu) · contains (chuỗi con) · regex (RE2) ·
in (thành viên list).Toán tử số & mạng
gt / lt (chỉ số, không ép string) · cidr_match
(IPv4/IPv6 trong dải).Liên quan
Quy tắc firewall
Mô hình quy tắc đầy đủ — bề mặt, thứ tự, sanitizer, sequence, và danh sách egress.
Cuộc gọi tool nguy hiểm
Mối đe dọa mà các mệnh đề này phòng vệ, và cách scope một quy tắc vào nó.
Bảng thuật ngữ verdict
allow, audit, deny, sanitize, và phần còn lại làm gì một khi một quy tắc khớp.Tại sao bị chặn?
Truy vết một lần chặn cụ thể về quy tắc và mệnh đề đã kích hoạt.
