메인 콘텐츠로 건너뛰기
firewall 정책은 순서가 있는 규칙 목록입니다. 이 페이지는 규칙이 표현할 수 있는 것 — 매칭 언어, 판정, 그리고 엔진이 그것들을 평가하는 방식 — 에 대한 완전한 레퍼런스입니다. 규칙은 콘솔 규칙 에디터에서 작성되며, 이는 구조화된 JSON 매치 객체를 씁니다. 아래의 모든 것은 그 어휘를 기술하므로, UI에서 빌드하든 API를 통해 포스트하든 규칙을 정확하게 읽고, 추론하고, 검증할 수 있습니다.

1. 규칙의 해부

필드타입의미
priorityint낮을수록 먼저 실행됩니다. 동점은 규칙 id로 깨집니다.
labelstring사람이 읽는 이름, 이벤트와 감사에 표시됨.
stageenum표면inbound / response / mcp / egress. 비어 있음 = 모든 표면.
tool_name_globstring툴 이름에 대한 Glob.
skill_name_globstring소유하는 skill에 대한 선택적 glob. 툴 glob과 AND됨; 비어 있음 = 임의의 skill.
verdictenum액션 — §7 참조.
args_matchobject선택적 인자 술어.
sanitizeobject마스킹 구성, verdict = sanitize일 때 사용됨. §5 참조.
egressobject호스트/CIDR 허용/거부 목록, stage = egress일 때 사용됨. §6 참조.
cap_cost_centsint실행 비용 상한, verdict = cap_cost일 때 사용됨.
sequenceobject순서가 있는 다단계 매치, 반응적으로 강제됨. §8 참조.
notesstring작성자 근거; 엔진에 의해 무시됨.
규칙은 선언된 모든 조건이 모두 성립할 때 툴 호출에 매치합니다: 스테이지가 매치(또는 비어 있음), 툴 glob 매치, skill glob 매치(또는 비어 있음), 인자 절 매치(또는 부재), 그리고 egress 범위 매치(egress 규칙만). 엔진은 규칙을 우선순위 순으로 순회하며 첫 매치가 이깁니다.

2. 툴 이름 glob

의도적으로 작은, 대소문자를 구분하는 문법 — 정규식의 놀라움 없음, 선형 시간, 릴레이 핫 경로에서 안전:
패턴매치
"" 또는 *모든 툴.
foo.*접두사 — foo.bar, foo.exec(맨 foo는 아님).
*.exec접미사 — shell.exec, db.exec(맨 exec는 아님).
*.shell.*중위 — local.shell.exec(각 측에 ≥1자 필요).
그 외 모든 것정확한 문자열 매치(foo.*.bar 포함).
툴은 관례적으로 server.tool 또는 category.action으로 네임스페이스 처리되므로, shell.*는 전체 패밀리를 잡고 *.delete는 서버 전반에서 한 동사를 잡습니다.

3. Skill 이름 glob

동일한 glob 문법이, 툴 호출의 소유하는 skill에 대해 매치됩니다(예: community.*, builtin.send). 그것은 tool_name_glob과 AND되므로:
tool_name_glob:  http.fetch
skill_name_glob: community.*
http.fetchcommunity.* skill에 의해 소유될 때에만 매치합니다 — 동일한 툴을 내장 skill에서는 신뢰하되 커뮤니티 것에서는 게이트하세요. 빈 skill glob은 임의의 소유자에 매치합니다. 툴 호출이 skill에 어떻게 귀속되는지는 Skills에서 다룹니다.

4. 인자 절

툴 이름 매칭은 어떤 툴을 답합니다; 인자 절은 어떤 인자로를 답합니다 — “shell.exec 차단”과 “명령이 rm -rf일 때만 shell.exec 차단”의 차이. args_match는 절 세트로, 모두 AND됩니다:
{
  "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는 공허하게 참입니다 — 규칙은 glob만으로 매치합니다.

연산자

연산자매치 조건
eq스칼라 동등성(숫자는 수치적으로 비교됨; 타입 불일치 → 매치 없음).
contains부분 문자열(두 피연산자 모두 문자열이어야 함).
regexGo RE2 패턴이 문자열 값에 매치(선형 시간, 역참조 없음).
in값이 주어진 JSON 배열의 요소임.
cidr_match문자열 IP가 주어진 CIDR 안에 들어감.
gt / lt수치적 초과 / 미만(문자열은 강제 변환되지 않음).

경로 문법

툴의 인자 객체에 대한 작은 JSONPath 부분집합:
  • $.foo, $.foo.bar — 필드 접근
  • $.foo[0], $.arr[1].k — 배열 인덱싱
  • $ — 전체 인자 객체
와일드카드, 필터, 슬라이스, 또는 재귀적 하강 없음.
인자 절은 페일 클로즈합니다 — 요청이 아니라 규칙이. 경로가 해석되지 않거나, 인자가 잘못 형성되었거나, regex/CIDR이 유효하지 않으면, 절은 거짓으로 평가되고 규칙은 그저 발동하지 않습니다 — 호출은 다음 규칙 또는 기본 판정으로 떨어집니다. 깨진 절은 결코 자동 거부하지 않으며 릴레이를 크래시시키지 않습니다. “위험한 모든 것을 잡는” 규칙은 절이 특정 방식으로 실패하기를 의존하기보다, 자체 glob을 가진 명시적 deny로 작성하세요.
콘솔은 저장 시 절을 엄격하게 검증하므로(알 수 없는 연산자, 잘못된 경로, 비배열 in 값, 컴파일 불가능한 regex, 그리고 유효하지 않은 CIDR이 모두 거부됨) 잘못 형성된 절은 애초에 영속화될 수 없습니다.

5. 새니타이저

sanitize 판정은 툴 인자에서 매치된 부분 문자열을 마스킹하고 정화된 호출을 전달합니다 — 전체 액션을 차단하지 않고 에이전트가 툴 인자에 넣은 시크릿이나 PII를 제거하는 데 유용합니다.
{ "presets": ["email", "ssn_us"], "custom": ["foo-\\d+"] }
프리셋 매치는 [redacted:<preset>]로 대체되고; 커스텀 정규식 매치는 [redacted:custom]로 대체됩니다. 내장 프리셋 라이브러리: aws_access_key, aws_secret_key, openai_key, anthropic_key, bearer_token, email, ssn_us, credit_card(Luhn 검사 포함). sanitize 규칙은 최소 하나의 프리셋 또는 커스텀 패턴을 선언해야 합니다 — 빈 새니타이저는 저장 시 거부됩니다. inbound 표면에는 마스킹할 호출 시점 인자가 없으므로, 거기서 sanitize 판정은 block으로 격상됩니다.

6. Egress 목적지 목록

egress 규칙(스테이지 egress)은 아웃바운드 목적지에 매치합니다 — SSRF 및 유출 표면:
{
  "deny":  ["169.254.169.254", "10.0.0.0/8"],
  "allow": ["api.openai.com"]
}
항목은 CIDR, IP 리터럴, 또는 대소문자를 구분하지 않는 호스트명으로 매치됩니다; 호스트명은 최선 노력으로 해석되어 IP/CIDR 항목에 대해 다시 검사됩니다. 극성은 판정을 따릅니다: allow 판정에서는 allow 목록이 범위 내인 것을 정의하고 deny가 그로부터 예외를 깎아냅니다; 강제 판정 (deny)에서는 deny 목록이 차단되는 것을 정의하고 allow가 예외를 깎아냅니다. 169.254.169.254(클라우드 메타데이터 엔드포인트)와 RFC-1918 범위는 거부할 표준적인 것입니다 — block_ssrf_egress 프리셋과 tight 자율성 수준이 정확히 그것을 제공합니다.

7. Verdicts

Verdict효과참고
allow통과시킴, 로깅됨.
audit허용 + 검토를 위해 기록.통상적인 default_verdict.
deny호출 차단.inbound에서 HTTP 400; mcp에서 툴 오류.
sanitize인자 마스킹, 전달.새니타이저 필요; inbound에서 deny로 격상.
pending_approval사람을 위해 보류.승인 저장소 구성 필요; response/egress에서 거부됨.
cap_cost지출 상한을 넘으면 거부.음이 아닌 cap_cost_cents 필요; response/egress에서 비활성.
shadow mode에서는 모든 강제 판정이 audit로 강등되고 이유에 [shadow] would …가 접두됩니다.

8. 시퀀스

일부 위험은 여러 호출에 걸쳐서만 보입니다 — CRM 레코드 50개를 읽고, 내보내고, 외부 호스트에 도달. sequence 규칙은 단일 호출이 아니라 순서가 있는 체인에 매치합니다:
{
  "window_seconds": 600,
  "steps": [
    { "match": "crm.*",   "min_count": 3 },
    { "match": "*.export" },
    { "match": "*",       "egress": true }
  ]
}
각 단계는 선택적 min_count(기본값 1)와 선택적 egress: true(단계가 egress 호출이어야 함)를 가진 툴 glob입니다. 단계는 순서대로 발생해야 하며 — 다른 호출과의 인터리빙은 괜찮습니다 — 전체 체인은 window_seconds(0 = 무제한) 안에 완료되어야 합니다.
시퀀스는 각 호출에 인라인으로가 아니라 비동기 매처에 의해 반응적으로 강제됩니다 — * 단계를 가진 시퀀스는 그렇지 않으면 모든 단일 툴 호출에 매치할 것입니다. 그것들은 이벤트 피드를 켜고 후속 액션을 트리거할 수 있지만, 체인을 완성하는 개별 호출을 실시간으로 차단하지는 않습니다.

9. 내장 프리셋

빈 규칙 대신 프리셋에서 시작하세요. 그것들은 서버 측에서 작성되므로 콘솔과 이 문서는 동일한 동작을 기술합니다:
프리셋무엇을 하는가
block_destructive_shelldeny-by-glob 규칙 세트를 통해 파괴적 셸 명령(rm -rf, mkfs, dd, 포크 폭탄, …)을 거부합니다.
block_ssrf_egress메타데이터 엔드포인트와 RFC-1918 범위로의 egress를 감사합니다.
block_secrets_in_args탐지 지향 — 툴 인자에 나타나는 자격 증명을 플래그합니다.
block_pii_in_tool_results탐지 지향 — 툴 결과의 PII를 표면화합니다.
프리셋을 씨앗으로 적용한 뒤 자유롭게 편집하세요 — 프리셋은 시작점이지 잠금이 아닙니다.

10. 평가, 한계 및 안전

  • 첫 매치가 이깁니다. 규칙은 priority ASC, id ASC 순으로 실행됩니다; 조건이 모두 성립하는 첫 규칙이 판정을 결정합니다. 어떤 규칙도 매치하지 않으면 → 정책 default_verdict.
  • 결정적이고 의존성이 없습니다. Glob과 절 매칭은 네트워크 호출이 없는 순수 문자열/JSON 연산으로, 모든 툴 호출에서 실행하기에 안전합니다. Regex는 RE2입니다 — 선형 시간, 파국적 백트래킹 없음.
  • 페일 클로즈 절. 평가될 수 없는 절은 자동 거부하기보다 그 규칙을 발동하지 않게 만듭니다(§4).
  • 엄격한 저장 시점 검증. Verdict/stage 쌍, 새니타이저 비공백, cap_cost_cents 존재, 절 형태, 그리고 참조 해석이 저장 시 모두 검사됩니다 — 유효하지 않은 규칙은 영속화될 수 없습니다.
  • 감사됨. 모든 규칙 생성/업데이트/삭제는 변경이 커밋된 후 감사 행을 씁니다; 규칙 blob과 시크릿은 결코 감사 로그에 쓰이지 않습니다.

API 레퍼런스

규칙은 정책 아래에 존재하며 워크스페이스 범위입니다; 쓰기는 **Developer+**를 요구합니다.
메서드 및 경로역할목적
POST /api/workspace/firewall/rulesDeveloper+규칙 생성.
PUT /api/workspace/firewall/rulesDeveloper+규칙 업데이트(본문에 id).
DELETE /api/workspace/firewall/rules/:idDeveloper+규칙 삭제.
GET /api/workspace/firewall/presetsMember내장 프리셋 목록.
POST /api/workspace/firewall/testDeveloper+샘플 툴 호출에 대해 정책(규칙 포함) dry-run.
규칙을 의존하기 전에 미리 보려면 Test를 사용하세요 — 아무것도 디스패치하지 않고 판정, 매치된 규칙, 이유를 반환합니다.

더 보기

에이전트 보안을 더 깊이 파고드시나요? 에이전트 보안 (제로 트러스트) 가이드는 이 기능을 제로 트러스트 워크플로 안에 배치합니다.

firewall 정책 구축하기

제로 트러스트 정책을 단계별로 작성한 뒤, 강제하기 전에 섀도잉하세요.

규칙 스키마 레퍼런스

모든 규칙 필드 — glob, 인자 술어, egress, 비용 상한.