ProficientNowTechRFCs

10. Rationale

RFC-TENANT-SECURITY-0001                                        Section 10
Category: Standards Track                                        Rationale

10. Rationale

← Tenant Isolation | Index | Next: Evolution →


10.1 Overview

This section documents the key architectural decisions, alternatives considered, and rationale for selections made in this RFC. Each decision references the invariants it supports.


10.2 WAF Solution Selection

10.2.1 Decision

Selected: BunkerWeb

BunkerWeb is selected as the unified ingress controller and Web Application Firewall.

10.2.2 Alternatives Considered

AlternativeDescription
SafeLineML-based semantic analysis WAF
CorazaGo-based WAF library for Envoy
ModSecurityTraditional WAF engine

10.2.3 Evaluation Criteria

CriterionWeightRationale
OWASP CRS CompatibilityHighIndustry standard, auditable rules
Kubernetes NativeHighOperational simplicity
Open Source (Free)HighNo licensing costs or app limits
Ingress ReplacementMediumAddress NGINX Ingress retirement
Management UIMediumOperational efficiency
Rule TransparencyHighSecurity auditability

10.2.4 Comparison

CriterionBunkerWebSafeLineCorazaModSecurity
OWASP CRSIntegratedNot compatibleCompatibleNative
KubernetesHelm + IngressDocker-firstEnvoy pluginNGINX module
LicenseAGPLv3 (free)GPL-3.0 (10 app limit)Apache 2.0Apache 2.0
UIWeb UIWeb UINoneNone
TransparencyAuditableBlack-boxAuditableAuditable
IngressCan replaceNoNoNo
StatusActiveActiveActiveMaintenance

10.2.5 Decision Rationale

BunkerWeb was selected because:

FactorRationaleInvariant Support
OWASP CRS integrationIndustry-standard rules, auditable by security teamsINV-1
Kubernetes-nativeHelm chart, Ingress controller capabilityOperational
Unlimited free tierNo artificial app limits unlike SafeLineCost
Rule transparencyOWASP CRS rules are publicly documentedINV-9, INV-13
Ingress replacementSolves NGINX retirement requirementOperational
Web UIReduces operational burdenOperational

10.2.6 Rejected Alternatives

SafeLine Rejected Because:

ReasonImpact
No OWASP CRS compatibilityCannot use industry-standard rules
Proprietary semantic engineRules are not auditable (black box)
10 app limit (free tier)Would require paid tier for production
Docker-firstKubernetes deployment requires workarounds

Coraza Rejected Because:

ReasonImpact
Library onlyRequires separate ingress integration
No management UIHigher operational burden
Envoy-focusedBetter suited for Envoy Gateway, not current stack

ModSecurity Rejected Because:

ReasonImpact
End-of-life (July 2024)No active development
No standalone deploymentRequires NGINX/Apache integration

10.3 Ingress Architecture

10.3.1 Decision

Selected: BunkerWeb as Combined Ingress + WAF

Rather than separate ingress controller and WAF, BunkerWeb serves both functions.

10.3.2 Alternatives Considered

AlternativeDescription
NGINX Ingress + Separate WAFTraditional separation
Gateway API + CorazaModern API with WAF plugin
Service Mesh IngressLinkerd or Istio ingress

10.3.3 Decision Rationale

FactorRationale
Unified solutionSingle component to manage
NGINX Ingress retirementNeeds replacement by March 2026
Reduced complexityFewer moving parts
Consistent securityWAF always in path (INV-1)

10.3.4 Rejected Alternatives

NGINX Ingress + Separate WAF Rejected Because:

ReasonImpact
NGINX Ingress end-of-lifeMarch 2026 retirement
Two components to manageIncreased complexity
Potential bypassWAF could be misconfigured

Gateway API + Coraza Rejected Because:

ReasonImpact
Increased complexityTwo separate components
No management UIHigher operational burden
Current stack mismatchEnvoy not deployed

10.4 Network Policy Model

10.4.1 Decision

Selected: Kubernetes NetworkPolicy (Standard API)

Use standard Kubernetes NetworkPolicy resources rather than CNI-specific CRDs.

10.4.2 Alternatives Considered

AlternativeDescription
Calico-specific policiesCiliumNetworkPolicy or Calico CRDs
Service mesh policiesLinkerd AuthorizationPolicy

10.4.3 Decision Rationale

FactorRationaleInvariant Support
PortabilityStandard API works with any CNIOperational
SimplicityWell-understood APIOperational
Calico supportCalico fully supports NetworkPolicyINV-5, INV-6, INV-7
GitOps friendlyStandard resources sync easilyINV-12

10.4.4 Rejected Alternatives

Calico-Specific Policies Rejected Because:

ReasonImpact
Vendor lock-inTied to Calico CNI
ComplexityAdditional API to learn
Standard sufficiencyNetworkPolicy meets requirements

Service Mesh Policies Rejected Because:

ReasonImpact
Different layerMesh handles East-West only
Scope overlapWould duplicate network policy function
RFC boundaryService mesh in RFC-WORKLOAD-IDENTITY

10.5 Rate Limiting Location

10.5.1 Decision

Selected: Gateway-Level (BunkerWeb)

Rate limiting is implemented at the ingress layer.

10.5.2 Alternatives Considered

AlternativeDescription
Application-levelEach application implements limits
Both gateway and applicationDefense in depth

10.5.3 Decision Rationale

FactorRationale
Single enforcement pointConsistent behavior
Early rejectionSaves backend resources
Centralized managementEasier to configure and monitor
Application simplicityApplications don't need rate limit logic

10.5.4 When Application-Level is Appropriate

Application-level rate limiting MAY be added when:

ScenarioRationale
User-specific quotasGateway doesn't know user identity
Complex business rulesCustom logic required
Fine-grained controlPer-operation limits

10.6 Certificate Authority

10.6.1 Decision

Selected: Let's Encrypt via cert-manager

Automated certificate issuance from Let's Encrypt.

10.6.2 Alternatives Considered

AlternativeDescription
Vault PKIInternal CA from Vault
HybridLet's Encrypt external, Vault internal

10.6.3 Decision Rationale

FactorRationaleInvariant Support
AutomationFully automated lifecycleINV-3, INV-14
TrustPublicly trusted certificates
CostFree certificatesCost
Integrationcert-manager well-supportedOperational

10.6.4 When Vault PKI is Appropriate

Vault PKI MAY be used for:

ScenarioRationale
Internal servicesNot exposed to internet
mTLSService-to-service (RFC-WORKLOAD-IDENTITY)
Custom validitySpecific certificate lifetimes

10.7 Bot Mitigation Strategy

10.7.1 Decision

Selected: Challenge-Based Verification

Use progressive challenges (cookie, JavaScript, CAPTCHA) for bot detection.

10.7.2 Alternatives Considered

AlternativeDescription
ML-based detectionMachine learning models
IP reputation onlyBlock known bad IPs

10.7.3 Decision Rationale

FactorRationale
User experienceProgressive challenges minimize friction
FlexibilityMultiple challenge providers supported
TransparencyChallenge logic is understandable
IntegrationBunkerWeb supports multiple providers

10.8 Decision Summary

Decision AreaSelectionKey Rationale
WAFBunkerWebOWASP CRS, Kubernetes-native, free
IngressBunkerWeb (combined)Unified solution, replaces NGINX
Network PolicyKubernetes NetworkPolicyStandard API, portable
Rate LimitingGateway-levelCentralized, early rejection
CertificatesLet's Encrypt + cert-managerAutomated, free, trusted
Bot MitigationChallenge-basedProgressive, flexible

Document Navigation


End of Section 10