shell.exec ổn cho ls; nó là một thảm họa cho
rm -rf /. db.query ổn trên một replica; trên prod nó là một mối nguy. Sự
khác biệt nằm trong đối số, và một quy tắc tên-tool không thấy được nó.
Mệnh đề argument của Firewall (args_match_json) lấp khoảng trống đó.
Chúng kiểm tra các đối số cụ thể mà mô hình chọn cho một cuộc gọi tool và
quyết định verdict từ giá trị của chúng — nên bạn có thể cho phép một tool
rộng rãi trong khi deny một hình dạng nguy hiểm duy nhất mà nó có thể mang.
Trang này là hướng dẫn tập trung để soạn những mệnh đề đó; để biết toàn bộ từ
vựng quy tắc, xem Quy tắc Firewall, và để biết
mô hình chính sách quanh chúng, xem Firewall.
Giá trị đối số chỉ tồn tại một khi mô hình đã chọn cách gọi một tool, nên
các mệnh đề argument thuộc về các stage
response và mcp. Trên inbound — nơi agent chỉ quảng bá các định nghĩa
tool — không có đối số tại thời điểm gọi để kiểm tra.1. Khi nào kiểm tra đối số cuộc gọi tool
Dùng một mệnh đề argument bất cứ khi nào một tool an toàn nói chung nhưng nguy hiểm ở một hình dạng cụ thể:Lệnh phá hủy
Allow
shell.exec, nhưng deny khi lệnh khớp rm -rf, mkfs, hoặc
dd if=.Bán kính tác động production
Allow
db.query, nhưng deny (hoặc giữ lại chờ phê duyệt) khi đích kết nối
là prod.Đích đến nội bộ
Allow một tool fetch, nhưng deny khi đối số
url/ip của nó rơi vào một
dải RFC-1918 hoặc IP cloud-metadata.Thao tác quá khổ
Allow một tool hàng loạt, nhưng deny khi một đối số
limit hoặc count
vượt một trần số.2. Hình dạng của một tập mệnh đề
args_match_json là một chuỗi mã hóa JSON mà giá trị giải mã của nó là
một đối tượng giữ một danh sách clauses. Mỗi mệnh đề là một bộ ba
{ path, op, value }, và mọi mệnh đề AND với nhau — quy tắc chỉ kích hoạt
khi mọi mệnh đề đều đúng. Khi giải mã, giá trị trông như:
"args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}".
Một args_match_json trống hoặc vắng mặt là đúng một cách rỗng — quy tắc
khớp chỉ trên glob tên-tool của nó, đúng như một quy tắc chỉ-tên làm.
3. Toán tử
Bảy toán tử tạo nên từ vựng đóng. Console kiểm tra toán tử và hình dạng giá trị của nó khi bạn lưu, nên một mệnh đề dị dạng không bao giờ được lưu.| Toán tử | Khớp khi |
|---|---|
eq | Bằng vô hướng (số được so sánh theo số; sai kiểu là không khớp). |
contains | Chuỗi con — cả hai toán hạng phải là chuỗi. |
regex | Một mẫu Go RE2 khớp giá trị chuỗi (thời gian tuyến tính, không backreference). |
in | Giá trị là một phần tử của mảng JSON đã cho. |
cidr_match | IP dạng chuỗi rơi vào CIDR đã cho. |
gt / lt | Lớn-hơn / nhỏ-hơn theo số (chuỗi không bị ép kiểu). |
4. Cú pháp path
path của một mệnh đề là một tập con JSONPath nhỏ trên đối tượng đối số
của tool:
$.foo, $.foo.bar — truy cập trường
$.foo, $.foo.bar — truy cập trường
Đọc một trường đối tượng cấp cao nhất hoặc lồng nhau theo tên.
$.foo[0], $.arr[1].k — chỉ mục mảng
$.foo[0], $.arr[1].k — chỉ mục mảng
Index vào một mảng, tùy chọn tiếp tục vào các trường của phần tử.
$ — toàn bộ đối tượng đối số
$ — toàn bộ đối tượng đối số
Khớp với toàn bộ blob đối số (hữu ích với
contains hoặc regex cho một
lần quét thô).5. Một ví dụ đã làm
Bạn để các agent của mình chạyshell.exec tự do, nhưng một force-delete đệ
quy không bao giờ nên đến được shell. Soạn một quy tắc stage response deny
shell.exec chỉ khi đối số command trông có vẻ phá hủy.
Mở trình chỉnh sửa quy tắc
Trong console, mở chính sách firewall gắn vào key của agent bạn (hoặc mặc
định của workspace) và thêm một quy tắc. Chỉnh sửa chính sách là một hành
động Developer+ — Member có thể đọc chính sách nhưng không ghi chúng.
Khớp tool trên stage response
Đặt stage thành
response và glob tool thành shell.exec. Stage
response mang các đối số mà mô hình đã chọn, thứ mà mệnh đề cần.Thêm mệnh đề argument
Thêm một mệnh đề
regex trên $.command, rồi đặt verdict thành deny:args_match_json là một chuỗi mã hóa JSON; giá trị giải mã của nó là đối
tượng { "clauses": [ … ] } hiển thị ở §2.Chạy thử nó trước khi phụ thuộc vào nó
Dùng tab Test để đánh giá quy tắc trên
một cuộc gọi
shell.exec mẫu. Nó trả về verdict, quy tắc đã khớp, và lý
do — không gì được dispatch và không gì được lưu.shell.exec với "command": "ls -la" chảy qua như trước, trong khi
"command": "rm -rf /var" bị deny. Một deny trên response để mô hình thấy
một lỗi tool và phản ứng — chọn tool khác, hỏi người dùng, hoặc dừng — thay vì
crash.
6. Mệnh đề fail closed — quy tắc, không phải request
Nếu một mệnh đề không đánh giá được — path không phân giải, đối số dị dạng, hoặc một regex / CIDR không hợp lệ — mệnh đề đánh giá thành false và quy tắc đơn giản không kích hoạt. Cuộc gọi rơi xuống quy tắc kế tiếp hoặcdefault_verdict của chính sách. Một mệnh đề hỏng không bao giờ tự-deny và
không bao giờ làm rối relay.
7. Kết hợp mệnh đề với phần còn lại của một quy tắc
Các mệnh đề argument xếp chồng với mọi thứ khác mà một quy tắc biểu đạt — chúng là một điều kiện được AND trong số nhiều:| Kết hợp với | Hiệu ứng |
|---|---|
tool_name_glob | Mệnh đề chỉ chạy một khi tên tool khớp — tên trước, đối số sau. |
skill_name_glob | Quản trị đối số của cùng tool khác nhau theo skill sở hữu (vd: chặt hơn trên community.*). |
verdict | Ghép mệnh đề với deny, sanitize, pending_approval, hoặc cap_cost, không chỉ deny. |
| Nhiều mệnh đề | Tất cả phải đúng — kết hợp một kiểm tra command regex với một kiểm tra environment in để thu hẹp một deny thật chặt. |
8. Cái này khớp vào đâu
Quy tắc Firewall
Tham chiếu quy tắc đầy đủ — glob, mệnh đề, sanitizer, egress, và chuỗi.
Argument cookbook
Các công thức
args_match_json copy-paste cho các hình dạng nguy hiểm phổ
biến.Stage Firewall
Tại sao mệnh đề argument sống trên
response và mcp, không phải
inbound.Block tool
Deny một tool dứt khoát khi không đối số nào an toàn.
