Deployment
Envoy
Bulwark currently runs only as an external processor for Envoy. Other deployment models are planned, but currently Envoy is required to use Bulwark.
Deployment with Envoy
Bulwark should generally be configured to run at the front of the HTTP filter chain and in front of the filter for the router. It will process incoming requests, responding to them as directed by its plugins. Bulwark may be scaled as its own service, independent of Envoy itself.
Example Reverse Proxy Envoy Config
Remote State
Bulwark offers plugins the ability to store state via a number of its API functions. This capability is accomplished via Redis. Bulwark may be used without Redis to reduce deployment complexity, however in this configuration, all plugins must be stateless.
Injected HTTP Headers
Bulwark injects two headers into every request sent onwards to interior services: Bulwark-Decision
and Bulwark-Tags
.
Both headers are formatted according to the Structured Field Values for HTTP specification and may be parsed
by any of its implementations. The Bulwark-Decision
header contains the values for the combined decision output for
the corresponding request. The Bulwark-Tags
header contains the tags that were associated with the combined decision.
There is a planned improvement to introduce a signature for these and any other headers
Bulwark may emit in the future.
Notably, these headers represent the verdict rendered by the first phase of processing only. At the point where headers are rendered, the request body will not have been processed yet.
Interior services may use this information to enrich business event data, for logging purposes, or to relocate the point of decision-making. This may be particularly relevant if Bulwark is configured in observe-only mode.