메인 콘텐츠로 건너뛰기
firewall 정책은 순서가 있는 규칙 목록이고, 규칙은 그저 작은 필드 묶음입니다: 어떤 툴 호출에 매치하는지, 어떤 표면에서, 그리고 그것에 대해 무엇을 할지. 다른 누군가가 작성한 규칙을 읽어야 할 때 — 또는 구축 중인 것에 대해 정확히 추론할 때 — 필드 목록을 한 곳에서 원합니다. 그것이 이 페이지입니다. 규칙은 콘솔 규칙 편집기에서 작성하며(쓰기는 Developer+ 필요); 편집기는 아래의 구조화된 필드를 씁니다. 이 페이지는 필드 수준 맵입니다; 심층 매칭 엔진은 Firewall Rules에 존재합니다.

1. firewall 규칙 스키마 한눈에 보기

모든 규칙은 같은 필드를 담습니다. verdict만 항상 필수입니다 — 그 외 모든 것은 규칙이 무엇에 매치하는지를 좁히거나 선택한 판정을 구성하며, 없는 매처는 공허하게 참입니다.
필드목적
priority평가 순서 — 낮은 것이 먼저 실행됨.
verdict규칙이 매치할 때의 액션(필수).
stage범위 지정할 표면; 비움 = 전부.
tool_name_glob툴 이름에 대한 Glob.
args_match_jsonJSONPath 인자 술어, JSON으로 인코딩된 문자열로.
egress_json호스트 / CIDR 허용-거부 목록(egress 규칙), JSON으로 인코딩된 문자열로.
sanitize_json리댁션 구성(verdict = sanitize일 때), JSON으로 인코딩된 문자열로.
cap_cost_centsUSD 센트의 실행 비용 상한(verdict = cap_cost일 때).
sequence_json순서 있는 다단계 체인 술어(시퀀스 규칙), JSON으로 인코딩된 문자열로.
label / notes사람 이름과 근거 — 이벤트에 표시되고, 엔진은 무시함.
규칙은 선언된 매처가 모두 한 번에 성립할 때 발동합니다 — 스테이지가 매치(또는 비어 있음), 툴 glob가 매치, 인자 절이 매치(또는 없음), 그리고 egress 범위가 매치(egress 규칙만). 엔진은 규칙을 우선순위 순으로 순회하고 첫 매치가 이깁니다; 아무것도 매치하지 않으면, 정책의 default_verdict이 적용됩니다.

2. priority — 평가 순서

정수 서수. 낮은 것이 먼저 실행됩니다; 같은 우선순위의 두 규칙은 규칙 id(삽입 순서)로 동점을 깹니다. 구체적인 깎아내기를 광범위한 잡-전부 위에 두세요 — 우선순위 10의 신뢰하는 툴 하나에 대한 allow이 우선순위 100deny *를 이깁니다.
나중에 전체 정책을 다시 번호 매기지 않고도 두 기존 규칙 사이에 새 규칙을 끼워 넣을 수 있도록 간격(10, 20, 30)을 남기세요. 순서 지정 전략은 규칙 우선순위를 참조하세요.

3. verdict — 액션

유일한 필수 필드. 규칙이 매치하면, 그 판정이 호출에 무슨 일이 일어나는지를 결정합니다:
Verdict효과
allow호출을 통과시킴, 로깅됨.
audit허용하고 검토를 위해 기록 — 일반적인 default_verdict.
deny호출을 차단.
sanitize인자에서 매치된 부분 문자열을 가린 다음, 전달.
pending_approval사람 검토자를 위해 호출 보류.
cap_cost에이전트 실행의 누적 지출이 상한을 넘으면 거부.
denyinbound 표면에서 HTTP 400 firewall_blocked을, 또는 mcp 표면에서 툴 오류를 반환합니다. 보류된 호출은 에이전트가 폴링하는 id와 함께 HTTP 400 firewall_approval_pending을 반환합니다. shadow mode에서 모든 강제 판정이 audit로 강등되고 이유에 [shadow] would …가 접두됩니다. 전체 표와 block 형태는 Verdicts를 참조하세요.

4. stage — 강제 표면

규칙을 firewall의 표면 중 하나에 고정합니다. 비워두면 규칙이 모든 표면에 적용됩니다:
에이전트가 요청에서 모델에게 광고하는 툴. 위험한 툴을 모델이 선택조차 하기 전에 차단합니다.
모델이 응답에서 발행하는 tool_calls.
Firewall MCP 게이트웨이를 통해 라우팅된 tools/call.
툴이 도달하는 아웃바운드 호스트 / IP / CIDR — SSRF 및 데이터 유출 표면.
일부 판정 + 스테이지 짝짓기는 판정이 거기서 발동할 수 없기 때문에 저장 시 거부됩니다: cap_cost는 디스패치 전 실행 비용 상한이라 responseegress에서 비활성입니다; pending_approvalinbound에서만 보류하므로, 명시적 response/egress 고정은 거부됩니다. 편집기는 이 조합을 숨깁니다; API는 그것들을 거부합니다. Stages 참조.

5. tool_name_glob — 어떤 툴

툴 이름에 대한 작고, 대소문자 구분 glob — 전체 패밀리를 위한 shell.*, 서버 전반의 동사를 위한 *.delete, 하나의 정확한 툴을 위한 http_fetch. 비었거나 *은 모든 툴에 매치합니다. 선택적 skill 이름 glob(같은 문법)은 소유 skill에 대한 두 번째 조건을 AND하므로, 내장 skill의 툴을 신뢰하고 커뮤니티 것에서는 게이트할 수 있습니다. 전체 문법 — 접두사, 접미사, 중위, 정확, 그리고 사람들이 걸려 넘어지는 엣지 — 는 자체 레퍼런스입니다: Glob 패턴 구문.

6. args_match_json — 어떤 인자로

glob는 어떤 툴에 답합니다; args_match_json어떤 인자로에 답합니다 — “shell.exec 차단”과 “명령이 rm -rf일 때만 shell.exec 차단”의 차이. 그 값은 모두 AND된 JSONPath 절 집합을 담은 JSON으로 인코딩된 문자열입니다. 디코딩하면, 절 객체는 다음과 같이 보입니다:
{
  "clauses": [
    { "path": "$.command",    "op": "regex",      "value": "rm -rf|drop table" },
    { "path": "$.connection", "op": "in",         "value": ["prod", "replica"] },
    { "path": "$.ip",         "op": "cidr_match", "value": "10.0.0.0/8" }
  ]
}
요청 본문에서 그 필드는 그 객체를 이스케이프 문자열로 담습니다, 예: "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}". 연산자는 eq, contains, regex, in, cidr_match, gt, 그리고 lt입니다. 없는 args_match_json은 공허하게 참입니다 — 규칙은 glob만으로 매치합니다. 전체 술어 언어, path 구문, 그리고 깨진 절의 페일 클로즈 동작은 인자 검증인자 쿡북에 있습니다.

7. egress_json — 어떤 목적지

egress 표면에서 사용: 툴이 도달하는 아웃바운드 목적지에 대해 매치되는 호스트 / CIDR 허용-및-거부 목록을 담은 JSON으로 인코딩된 문자열. 디코딩하면, 객체는 다음과 같이 보입니다:
{
  "deny":  ["169.254.169.254", "10.0.0.0/8"],
  "allow": ["api.openai.com"]
}
항목은 CIDR, IP 리터럴, 또는 대소문자 구분 없는 호스트명으로 매치합니다. 극성은 판정을 따릅니다 — 강제 판정에서는 deny 목록이 차단되는 것을 정의하고 allow이 거기서 예외를 깎아냅니다.
Baseline firewall 템플릿은 즉시 사용 가능한 SSRF / 클라우드 메타데이터 거부 목록(메타데이터 IP 169.254.169.254, RFC-1918 범위, loopback, link-local, 그리고 metadata.google.internal)을 가진 egress 거부 규칙을 제공하므로, 그것들을 직접 작성할 필요가 없습니다. 게이트하고 싶은 다른 모든 것에 대해 자체 목적지를 위에 추가하세요. 전체 레시피는 Egress 제어를, 왜 중요한지는 데이터 유출을 참조하세요.

8. sanitize_json — 인자 가리기

verdict = sanitize일 때 사용: 정화된 호출이 전달되기 전에 어떤 프리셋 / 커스텀 regex가 툴 인자에서 매치된 부분 문자열을 가리는지 명명하는 JSON으로 인코딩된 문자열 — 전체 액션을 차단하지 않고 에이전트가 인자에 떨어뜨린 시크릿이나 PII 값을 벗겨내는 데 유용. 디코딩하면, 객체는 다음과 같이 보입니다:
{ "presets": ["email", "ssn_us"], "custom": ["foo-\\d+"] }
Sanitize는 인자만 가립니다 — 툴이 반환하는 콘텐츠는 결코 아닙니다. sanitize 규칙은 최소 하나의 프리셋이나 커스텀 패턴을 명명해야 합니다(빈 새니타이저는 거부됨). inbound 표면에는 가릴 호출 시점 인자가 없으므로, 거기서 sanitize 판정은 deny로 격상됩니다.
프리셋 라이브러리와 리댁션 형태는 응답 정화를 참조하세요.

9. cap_cost_cents — 지출 상한

verdict = cap_cost일 때 사용: 규칙별 실행 비용 상한, USD 센트의 정수. 규칙이 매치하면, 에이전트 실행의 누적 지출이 상한을 넘으면 호출이 거부됩니다 — 폭주 루프를 위한 회로 차단기로, 이벤트에서 allow이나 deny로 해석됩니다. 상한은 명시적이고 음수가 아니어야 하며, 규칙은 responseegress에 고정될 수 없습니다(거기서 판정이 비활성). 전체 동작은 Cap cost에 있습니다.

10. 하나의 완전한 규칙

필드를 종합하기 — shell.exec을 거부하되, 명령이 파괴적으로 보일 때만, 모델이 발행한 툴 호출로 범위 지정:
{
  "priority": 10,
  "label": "block destructive shell",
  "stage": "response",
  "tool_name_glob": "shell.exec",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|mkfs|:\\\\(\\\\)\\\\{\"}]}",
  "verdict": "deny",
  "notes": "fork bombs and recursive deletes only — plain shell.exec audits"
}
스테이지는 response 표면에 매치하고, glob는 shell.exec을 고르고, 단일 절은 파괴적 명령으로 좁히고, 판정은 거부합니다. 명령이 regex에 매치하지 않는 모든 shell.exec은 다음 규칙이나 정책 기본값으로 떨어집니다. 키를 정책에 연결하면(키의 firewall_policy_id) 다음 호출에 라이브입니다 — 재배포 없음.
의존하기 전에 규칙이 정확히 예상한 것에 발동하는지 확인하세요: 규칙 테스트는 샘플 툴 호출에 대해 정책을 dry-run하고 아무것도 디스패치하지 않고 판정, 매치된 규칙, 이유를 반환합니다.

11. 필드가 어떻게 결합되는가

verdict. 그 외 모든 것은 선택적입니다: 빈 stage는 모든 표면에 매치하고, 빈 tool_name_glob(또는 *)은 모든 툴에 매치하고, 없는 args_match_json은 모든 인자에 매치합니다. 맨 { "verdict": "audit" }은 유효한 잡-전부입니다.
그것들은 AND입니다. 규칙은 그 스테이지, 툴 glob, skill glob, 인자 절, 그리고 egress 범위가 모두 성립할 때만 발동합니다. OR을 표현하려면, 별도의 규칙을 작성하세요.
sanitize_jsonsanitize 판정에만 읽힙니다; cap_cost_centscap_cost에만; egress_jsonegress 표면에만. 콘솔은 저장 시 이 짝짓기를 검증하므로, 한 동작을 표시하지만 결코 강제할 수 없는 규칙은 영속화될 수 없습니다.
더 낮은 priority가 이깁니다(동점은 규칙 id로 깨짐) — 첫 매치가 이기고, 평가가 거기서 멈춥니다. 규칙 우선순위 참조.

관련

정책 생성

첫 정책을 작성하고 키를 연결합니다.

Glob 구문

전체 툴 이름 glob 문법.

Verdicts

모든 판정과 block이 어떻게 보이는가.

인자 검증

JSONPath 인자 절 심층.

정책 관리

정책 편집, 버전, 그리고 되돌리기.

Firewall Rules

완전한 매칭 엔진 레퍼런스.
액션 평면이 처음인가요? Firewall 개요에서 시작하거나, 텍스트 스크리닝과 어떻게 짝지어지는지는 Guardrails vs Firewall을 참조하세요.