Chuyển đến nội dung chính
Nêu tên một tool và deny nó là thô bạo: nó giết tool cho mọi cuộc gọi. Hầu hết thời gian tool ổn và một hình dạng cuộc gọi mới là vấn đề — shell.exec ổn cho đến khi lệnh là rm -rf, db.query ổn cho đến khi nó chạm prod. Sự phân biệt đó là cái mà một mệnh đề argument biểu đạt: một predicate đối số tool jsonpath khớp trên các giá trị mà một agent truyền, nên verdict chỉ kích hoạt trên cuộc gọi nguy hiểm và để phần còn lại yên. Trang này là một cookbook — một nhúm công thức args_match_json copy-paste cho các trường hợp hay gặp nhất. Để biết toàn bộ ngữ pháp mệnh đề, bảng toán tử, và ngữ nghĩa fail-closed, xem Kiểm tra đối số và tham chiếu Schema quy tắc.

1. Một mệnh đề đối số tool jsonpath hoạt động ra sao

args_match_json của một quy tắc là một chuỗi mã hóa JSON mang một tập mệnh đề, tất cả được AND với nhau. Giá trị giải mã là một đối tượng, {"clauses": [ … ]}, trong đó mỗi mệnh đề là một bộ ba { path, op, value }:
  • path — một tập con JSONPath nhỏ trên đối tượng đối số của tool: $.command, $.foo.bar, $.items[0], hoặc $ cho cả đối tượng. Không wildcard, filter, slice, hay đệ quy đi xuống.
  • op — một trong một tập đóng: eq, contains, regex, in, cidr_match, gt, lt.
  • value — literal để so sánh (một chuỗi, số, bool, hoặc — với in — một mảng JSON).
Một mệnh đề được AND lên tool_name_glob của quy tắc: quy tắc chỉ kích hoạt khi tên tool khớp mọi mệnh đề đều đúng. Bỏ args_match_json hoàn toàn (hoặc để nó là một "{}" trống) và quy tắc khớp chỉ trên glob.
Mệnh đề fail closed — quy tắc, không phải request. Nếu một path không phân giải, đối số dị dạng, hoặc một giá trị sai kiểu, mệnh đề đánh giá 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ặc verdict mặc định. Một mệnh đề hỏng không bao giờ tự-deny. Viết tuyến chặn cứng của bạn như một glob deny thuần, không phải một mệnh đề bạn đang dựa vào để fail theo một cách nhất định.

2. Công thức: block một lệnh phá hủy

Trường hợp điển hình. Allow shell.exec nói chung, deny nó chỉ khi lệnh trông có vẻ phá hủy. Một mệnh đề regex trên $.command làm việc đó:
{
  "label": "block destructive shell commands",
  "tool_name_glob": "*.exec",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|mkfs|dd if=\"}]}"
}
Regex là Go RE2 — thời gian tuyến tính, không backreference, không backtracking thảm họa — nên chúng an toàn để chạy trên mọi cuộc gọi tool. Một $.command không-phải-chuỗi (hoặc thiếu) không bao giờ khớp, nên một cuộc gọi dị dạng rơi xuống thay vì bị block nhầm.
Ưu tiên contains hơn regex khi bạn khớp một chuỗi con cố định — nó đơn giản hơn để đọc và không thể bị vấp bởi một metacharacter chưa escape. Dùng regex chỉ khi bạn thực sự cần alternation hoặc anchor.

3. Công thức: deny một tool trên một environment có tên

Cho db.query chạy, nhưng chỉ trên các kết nối an toàn — deny nó khi đích là prod hoặc một replica. Toán tử in khớp giá trị đã phân giải với bất kỳ phần tử nào của một mảng JSON:
{
  "label": "no agent queries against prod",
  "tool_name_glob": "db.query",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.connection\",\"op\":\"in\",\"value\":[\"prod\",\"replica\"]}]}"
}
Giá trị in phải là một mảng JSON — một không-phải-mảng bị từ chối khi bạn lưu quy tắc. Các phần tử so sánh với bằng vô hướng, nên số và chuỗi mỗi cái khớp đúng kiểu của nó.

4. Công thức: deny một đích đến IP riêng hoặc metadata

Khi một tool nhận một IP đích làm đối số, cidr_match kiểm tra liệu nó có rơi vào một CIDR — hình dạng SSRF của “một agent fetch 10.x hoặc địa chỉ cloud metadata”:
{
  "label": "deny tool calls aimed at RFC-1918",
  "tool_name_glob": "*",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.target_ip\",\"op\":\"cidr_match\",\"value\":\"10.0.0.0/8\"}]}"
}
Giá trị đối số phải parse được như một IP literal nằm bên trong CIDR; một hostname hoặc một chuỗi không-IP không bao giờ khớp.
cidr_match chỉ kiểm tra một giá trị đã có trong đối số tool. Để quản trị đích đến mà một tool thực sự với tới ở tầng mạng — danh sách allow và deny host/CIDR — hãy dùng một quy tắc egress chuyên biệt trên bề mặt egress thay vào. Hai cái bổ trợ nhau: kiểm tra đối số trên đường vào, kiểm soát egress trên đường ra.

5. Công thức: giới hạn một đối số số

gtlt so sánh số. Dùng chúng để từ chối một batch size phi lý, một limit quá khổ, hoặc bất kỳ count chạy hoang nào — ở đây, deny một bulk delete nhắm hơn 100 dòng:
{
  "label": "block large bulk deletes",
  "tool_name_glob": "*.bulk_delete",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.count\",\"op\":\"gt\",\"value\":100}]}"
}
Cả hai phía phải là số — một chuỗi trông giống số như "500" là sai kiểu và không khớp, nên quy tắc sẽ không kích hoạt trên một đối số kiểu-chuỗi. Giữ đối số là số, hoặc chuẩn hóa nó trước khi tool thấy nó.

6. Công thức: kết hợp mệnh đề (AND)

Mọi mệnh đề trong một quy tắc AND với nhau, nên bạn có thể thu hẹp một verdict xuống một cuộc gọi rất cụ thể — ví dụ, deny shell.exec chỉ khi nó là một lệnh phá hủy nó nhắm vào một prod host:
{
  "label": "destructive shell on a prod host",
  "tool_name_glob": "*.exec",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|drop table\"},{\"path\":\"$.host\",\"op\":\"in\",\"value\":[\"db-prod-1\",\"db-prod-2\"]}]}"
}
Cần một OR thay vào? Không có OR bên trong một args_match_json đơn — soạn hai quy tắc (hoặc hai glob) ở các ưu tiên khác nhau. Engine duyệt các quy tắc theo thứ tự ưu tiên và match đầu tiên thắng, nên đặt các quy tắc hẹp trước. Xem Ưu tiên quy tắc.

7. Chọn verdict cho hình dạng đã khớp

Một mệnh đề quyết định cuộc gọi nào khớp; verdict của quy tắc quyết định điều gì xảy ra. deny là mặc định của cookbook, nhưng cùng một mệnh đề có thể mang một verdict mềm hơn:
Khi đối số đã khớp mang một secret hoặc PII thay vì một hướng dẫn nguy hiểm, sanitize che các chuỗi con đã khớp khỏi đối số tool và chuyển tiếp cuộc gọi đã làm sạch. Nó chỉ che đối số — không bao giờ che nội dung mà một tool trả về. Xem Sanitize phản hồi.
Giữ đúng hình dạng rủi ro để xem xét thay vì block nó dứt khoát: một người duyệt phê duyệt hoặc từ chối ngoài luồng, và agent gửi lại cuộc gọi đã duyệt một lần. Xem Phê duyệt.
Đặt verdict thành audit để ghi lại cuộc gọi đã khớp mà không block trong khi bạn tinh chỉnh mệnh đề. Ghép với shadow mode để đo một deny trên traffic live trước khi nó thay đổi bất cứ thứ gì.

8. Test mệnh đề trước khi bạn phụ thuộc vào nó

Tab Test của console chạy thử một chính sách trên một cuộc gọi tool mẫu và trả về verdict, quy tắc đã khớp, và lý do — không gì được dispatch, không gì được lưu. Dán một đối tượng đối số thực tế và xác nhận mệnh đề kích hoạt trên các cuộc gọi bạn định và chỉ những cái đó, vì một mệnh đề không phân giải được một giá trị sẽ im lặng không kích hoạt. Xem Test quy tắc.
Mệnh đề được kiểm tra nghiêm ngặt khi lưu — toán tử lạ, path xấu, một giá trị in không-phải-mảng, một regex không biên dịch được, và CIDR không hợp lệ đều bị từ chối, nên một mệnh đề dị dạng không thể được lưu ngay từ đầu.

9. Ai có thể soạn mệnh đề argument

Toàn bộ cái này chạy trong console dưới session của bạn (/api/workspace/firewall/*):
Hành độngVai trò
Đọc chính sách, preset, discovered toolsMember
Tạo / chỉnh sửa / xóa quy tắcDeveloper+
Test sandbox (chạy thử một chính sách)Developer+
Đọc events và tổng hợp lần chạyDeveloper+
Soạn hoặc thay đổi một mệnh đề argument là một thao tác ghi Developer+. Test sandbox cũng là Developer+ — nó có thể xem trước trên một chính sách nháp và dấu vết verdict của nó phơi bày tên chính sách và nhãn quy tắc, nên nó nằm ở phía ghi của ranh giới, không phải phía đọc.

Liên quan

Kiểm tra đối số

Tình huống dùng khớp-đối-số đầy đủ.

Block tool

Deny cả một tool theo tên — không cần mệnh đề.

Kiểm soát egress

Quản trị đích đến host / IP / CIDR đi ra ngoài.

Schema quy tắc

Mọi trường mà một quy tắc có thể mang.

Ưu tiên quy tắc

Match đầu tiên thắng — sắp hẹp trước rộng.

Cuộc gọi tool nguy hiểm

Mối đe dọa mà các công thức này giải quyết.