You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Split out of the #156 roadmap spike (Tier 4: provider epic). Medium-large.
Cost profile
Cloud Armor custom rules use CEL — another flat expression-string DSL, structurally the same problem as Cloudflare's wirefilter. Expect to reuse the pattern doorman already built (ExpressionBuilder for generation + WirefilterParser for parsing, ~967 lines combined) but not the code: a CelExpressionBuilder + CelParser pair of comparable size.
That puts this in the ~5-6x cost class relative to a structured-JSON provider. Budget accordingly — the expression layer, not the client or service, is the bulk of the work.
Note the parser side is now a well-understood problem: #178 established the "invert our own generator" approach (parse exactly the grammar subset we emit, report anything else as unparseable rather than guessing). Apply the same discipline to CEL — do not attempt general-purpose CEL parsing.
Dependencies
Required:#181 (open ProviderType), #182 (generalize credentials — GCP service-account/OAuth2 is the case that most stresses the current flat-token assumption) Required:#185 (multi-resource targeting) — Cloud Armor policies attach to N backend services; this is not optional for real use Recommended:#183 (managed rule groups) — preconfigured OWASP CRS rules are most of a typical Cloud Armor policy Recommended first:#179 — Cloud Armor requires an explicit integer priority on every rule, so doorman's ordering story must be real before this lands
Scope
CloudArmorClient extending BaseFirewallClient, with GCP OAuth2/service-account auth
Split out of the #156 roadmap spike (Tier 4: provider epic). Medium-large.
Cost profile
Cloud Armor custom rules use CEL — another flat expression-string DSL, structurally the same problem as Cloudflare's wirefilter. Expect to reuse the pattern doorman already built (
ExpressionBuilderfor generation +WirefilterParserfor parsing, ~967 lines combined) but not the code: aCelExpressionBuilder+CelParserpair of comparable size.That puts this in the ~5-6x cost class relative to a structured-JSON provider. Budget accordingly — the expression layer, not the client or service, is the bulk of the work.
Note the parser side is now a well-understood problem: #178 established the "invert our own generator" approach (parse exactly the grammar subset we emit, report anything else as unparseable rather than guessing). Apply the same discipline to CEL — do not attempt general-purpose CEL parsing.
Dependencies
Required: #181 (open
ProviderType), #182 (generalize credentials — GCP service-account/OAuth2 is the case that most stresses the current flat-token assumption)Required: #185 (multi-resource targeting) — Cloud Armor policies attach to N backend services; this is not optional for real use
Recommended: #183 (managed rule groups) — preconfigured OWASP CRS rules are most of a typical Cloud Armor policy
Recommended first: #179 — Cloud Armor requires an explicit integer priority on every rule, so doorman's ordering story must be real before this lands
Scope
CloudArmorClientextendingBaseFirewallClient, with GCP OAuth2/service-account authCloudArmorFirewallServiceimplementingIFirewallProviderCelExpressionBuilder+CelParser(mirroring the wirefilter pair, including round-trip tests)FieldMapperentries for CEL's request attribute pathsKnown unknowns
expr.expressionfield (it's narrower than full CEL)download/backupcan faithfully reconstruct a policy that mixes custom + preconfigured rulesAcceptance criteria