Skip to content

Document named IP lists (wafList) — Firewall page, permissions, transform fix#66

Open
acoshift wants to merge 2 commits into
mainfrom
waf-ip-lists
Open

Document named IP lists (wafList) — Firewall page, permissions, transform fix#66
acoshift wants to merge 2 commits into
mainfrom
waf-ip-lists

Conversation

@acoshift

Copy link
Copy Markdown
Member

Summary

Documents the WAF named IP lists feature per SPEC-waf-ip-lists.md §10:

  • content/networking/waf.md — new Named IP lists section: concept, deploys wafList set/get/list/delete CLI examples, ipInList(request.remote_ip, "name") reference syntax, exact expansion semantics (platform macro → ipInCidr chain; empty list never matches; macro form round-trips through waf.get/console), caps table (incl. list-name constraint and the WAF_COST_LIMIT >= 10000 self-hosted note), re-materialization on list edit, delete-while-referenced error (verbatim server format), performance guidance, console lists page pointer, and the wafList.* permission gap callout.
  • content/networking/waf.md — corrects the expression surface: request.iprequest.remote_ip (the engine key is remote_ip; ip does not exist) and documents ipInCidr.
  • content/networking/transform.md — same request.iprequest.remote_ip fix on the sibling page (transform filters compile over the identical request.* surface; a copied request.ip filter eval-errors and silently never applies).
  • content/access/roles.md — adds the wafList.list/get/set/delete row (camelCase; not covered by existing waf.* grants — spec §7) and corrects the "permissions are always lowercase" claim to exact/case-sensitive matching, since wafList.* is the first mixed-case permission family.

All values (five caps, name constraint 3–26 chars ^[a-z][a-z0-9\-]*[a-z0-9]$, error wording, CLI flags, console operator labels) were checked against the implementation branches (api/apiserver/console/deploys waf-ip-lists) and parapet v0.18.4 pkg/waf.

Test evidence

  • hugo --minify builds clean (59 pages, no warnings).
  • grep -rn 'request\.ip\b' content/ — no remaining stale references.
  • Go build/vet/test and console bun lint/check/test: N/A — docs-only repo, no code.

Rollout / cross-feature notes

  • Docs-only; publish after the feature ships: apiserver wafList.* migration before binary, then api re-pin in apiserver/console/deploys/mcp per the spec's rollout gates.
  • No conflict expected with apiserver#238 (server-side CEL compile validation on waf.set): different repo, and #238 validates the expanded expression — exactly the behavior the "How expansion works" section documents.
  • Screenshot of the console lists page not included; can be added via the usual docs screenshot refresh once the console branch is deployed.

Spec: SPEC-waf-ip-lists.md

acoshift added 2 commits July 11, 2026 00:36
Adds a "Named IP lists" section: creating lists via the CLI, the
ipInList(<field>, "<list-name>") macro in rule expressions and limit
filters, expansion semantics (round-trip storage, bare-IP /32//128,
empty list never matches, re-materialization fan-out), the caps table
with the WAF_COST_LIMIT >= 10000 operator note, and the
delete-while-referenced error. Cross-links the macro from the
expression reference as a platform macro distinct from the engine
surface.

Also corrects the expression reference to the real engine field
request.remote_ip (the page said request.ip, which the engine does not
define) and documents ipInCidr, which the new section builds on.

Note: apiserver#238 (waf-test) adds server-side CEL compile validation
to waf.set; per the lists design that validation runs on the expanded
expression, which is exactly the behavior documented here ("stores what
you wrote", expansion at apply time). No merge conflict expected — this
change touches only the docs repo.
…rm request.ip

- roles.md: add the wafList.* permission row (camelCase, not covered by
  waf.*) and correct the "always lowercase" claim to exact/case-sensitive
  matching, since wafList.* is the first mixed-case permission family.
- waf.md: note the wafList.* permission gap next to the feature, add the
  list-name constraint (3-26 chars, lowercase/digits/hyphens) to the caps
  table, and point at the console lists page (Firewall page > IP lists).
- transform.md: request.ip -> request.remote_ip; the engine surface has no
  ip key, so a copied filter eval-errors and silently never applies. Same
  fix waf.md already got on this branch.

Docs-only change; no code path shared with apiserver#238 (waf.set CEL
compile validation), which validates the expanded expression exactly as
the "How expansion works" section here describes - no conflict expected.
@deploys-app

deploys-app Bot commented Jul 11, 2026

Copy link
Copy Markdown

Preview docs-pr-66

URL: https://docs-pr-66-606515731026706458.rcf2.deploys.app

Site: a5cdc9cadd33f72a00ddb7fbd33c606cf8fee2867301a58e7c81d6071f42ee3f

Commit: 797e6ac

updated 2026-07-11T01:24:29Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant