EVE Sidecar · Egress Governance Gateway

A fail-closed gate on AI egress, backed by a signed decision

Envoy asks the EVE Sidecar before every outbound AI or LLM request leaves the pod. The sidecar gets a signed decision from EVE’s hosted control plane, verifies the signature with EVE’s public key, and lets the request through only on a verified ALLOW — anything else, including an outage, is denied. It is a thin, stateless relay, not a self-contained engine. Early access: available to design partners; not publicly distributed.

Or email us directly: [email protected]
EVE Sidecar egress governance gateway: a rack-mounted EVE AI Core appliance with a SYSTEM SECURE status panel and network cables in a data-center rack.
EVE Sidecar — the egress enforcement point, deployed in your own infrastructure. Illustrative.
Controls aligned to ECOA / Reg B SR 26-2 FCRA HIPAA EU AI Act NIST AI RMF SOC 2 Type II in progress

You control which decision fields are sent; in VPC and on-prem deployments, governed content and evidence stay inside your boundary. With EU AI Act GPAI-model obligations applicable since 2 August 2025 and high-risk-system obligations phasing in from 2 December 2027 (Annex III) and 2 August 2028 (Annex I) under Regulation (EU) 2026/1744, and with SR 26-2 (the April 2026 interagency model-risk guidance that superseded SR 11-7, applied primarily to banking organizations above $30B in total consolidated assets) excluding generative and agentic AI from its formal scope while still expecting such technologies to be governed, the record has to exist at the moment of the decision.  Trust Center · Security

Framework mappings describe technical control support and evidence capabilities. They do not constitute legal advice, regulatory certification, or a guarantee that a customer’s deployment is compliant. “SOC 2 Type II — In Progress” means an independent SOC 2 Type II audit is engaged (Decrypt CPA, via Scytale) and the observation period is underway; it is not a completed audit or an issued attestation.

The Problem

Software guardrails are advisory. Auditors want proof.

An in-process SDK or a prompt wrapper is something your developers can disable, forget, or route around — and when an incident happens, you have no cryptographic record that the control ever executed. Regulated buyers need an enforcement point that sits in the network path, fails closed, and produces evidence.

Bypassable by design

A library import can be commented out, a flag flipped, or a second code path can call the model directly. Software-only guardrails depend on every caller cooperating.

No proof it ran

Even when a guardrail is in place, there is rarely a tamper-evident artifact showing the decision executed. “Trust us, it was on” does not survive an exam.

Fails open silently

When the guardrail crashes or times out, most systems let traffic through. The one moment you most need enforcement is the moment it quietly disappears.

How It Works

Envoy asks, EVE decides and signs, the sidecar verifies

Your egress traffic flows through Envoy. Envoy’s ext_authz filter calls the EVE Sidecar (gRPC on port 9002, or HTTP on 9001) before forwarding each request. The sidecar sends request metadata and digests to EVE’s control plane at POST /v1/decisions/authorize, gets back a signed eve.decision.v1, and checks the signature, issuer, tenant, request digest, expiry and replay nonce. Only a verified ALLOW returns OK; everything else returns PERMISSION_DENIED (HTTP 403) and Envoy never sends the request upstream.

Customer App
libs, agents,
LLM callers
Envoy ext_authz →
EVE Sidecar
verifies EVE’s
signed decision
verified ALLOW only →
Upstream API
model / endpoint
on BLOCK, bad signature, or outage: 403 request never forwarded
Decision: EVE CoreGuard policy evaluation in EVE’s control plane · Enforcement: signature + tenant + digest + expiry + replay checks in the sidecar
The sidecar runs on Python with two libraries, cryptography and grpcio. No governance logic, policy packs, model weights, or signing keys are in the image — a build-time guard scans both the staging tree and the exported image and fails the build if any EVE engine code is present. By default only request metadata and digests leave the pod. Request bodies are sent only when you enable content inspection AND enable with_request_body on the Envoy filter — it is commented out in the supplied configuration, and without it Envoy never passes body bytes to the sidecar, so the product flags alone cannot transmit content.
Key Properties

An enforcement point that fails closed and checks the proof

🚫

In the network path

Because the check sits in Envoy rather than in application code, a developer cannot skip it by removing an import or calling the model from a second code path. It is only as mandatory as your network, and in the same-pod topology below a NetworkPolicy alone cannot make it so: a NetworkPolicy selects pods, and every container in a pod shares one network namespace and IP, so a rule that lets Envoy reach the internet lets the application container reach it too. To make the check unavoidable, route egress through a separate Envoy egress-gateway pod and restrict the application pod’s egress to that gateway (a service-mesh egress gateway does this by default). Within a single pod, treat the sidecar as enforcing policy on traffic that reaches Envoy, not as a network-level guarantee that all traffic does.

🔒

Fail-closed enforcement

Control plane unreachable, timeout, malformed response, unknown signing key, expired or replayed decision: every one of these denies the request. The shipped Envoy config sets failure_mode_allow: false, so if the sidecar itself is down, Envoy denies too.

📜

Verifies a signed decision

The sidecar accepts only decisions carrying an asymmetric signature that verifies against EVE’s public key. Today that means ECDSA P-384, ECDSA P-256 or Ed25519 — all three are accepted by the shipped verifier. P-384 is what the hosted service signs with, via an AWS KMS-resident key, so a hosted decision verifies against the deployed sidecar; a self-hosted deployment signing Ed25519 or P-256 verifies the same way. HMAC (shared-secret) and unknown signature types are rejected. The signed decision binds the verdict, tenant, request digest and expiry, so the record of what was allowed can be re-verified later without contacting EVE.

📦

Kubernetes sidecar

One additional container in the same pod as your app. Stateless and configured by environment variables; it holds no signing key, only EVE’s public key and a bearer token (optionally mTLS) for the control plane. Liveness and readiness use an exec healthcheck.

Deployment Topology

Envoy in front, the sidecar beside it

The sidecar runs next to your application container as Envoy’s authorization service. The reference Envoy filter and a Helm chart are provided to design partners with the image. Your app tags each governed request with x-eve-provider and x-eve-model headers; a request without them is denied.

# Sidecar container — same pod as the app and Envoy
containers:
  - name: eve-sidecar
    image: <YOUR-REGISTRY>/eve-sidecar@sha256:<DIGEST>   # issued with your engagement;
                                                     # not on any public registry
    ports: [{ containerPort: 9002 }, { containerPort: 9001 }]   # gRPC / HTTP ext_authz
    env:
      - name: EVE_SIDECAR_CONTROL_PLANE_URL
        value: "https://api.eveaicore.com"
      - name: EVE_SIDECAR_TENANT_ID     # your tenant; never taken from the request
        value: "org_abc"
      - name: EVE_SIDECAR_AUTH_TOKEN    # control-plane bearer token (from a Secret)
        valueFrom: { secretKeyRef: { name: eve-sidecar, key: token } }
      - name: EVE_SIDECAR_PUBKEY        # EVE public key (PEM) used to verify decisions
        valueFrom: { configMapKeyRef: { name: eve-sidecar, key: pubkey.pem } }

# Envoy HTTP filter — deny if the sidecar is unavailable
- name: envoy.filters.http.ext_authz
  typed_config:
    # Required: without the type URL Envoy rejects typed_config.
    "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
    failure_mode_allow: false
    grpc_service: { envoy_grpc: { cluster_name: eve_sidecar_authz }, timeout: 3s }
    # Body forwarding stays OFF here, matching the shipped reference config.
    # Envoy passes NO body bytes to the sidecar unless you uncomment the
    # line below, which forwards up to 8 KiB of EVERY request. Enable it
    # only for content inspection, and read the data-minimisation rules first.
    # with_request_body: { max_request_bytes: 8192, allow_partial_message: true }
The environment-variable reference, decision table and data-minimisation rules are in the Deployment guide.
Alternative

No Envoy? Call the decision API directly

Teams that don’t run Envoy can ask EVE for a decision in code with the eve-coreguard SDK (pip install eve-coreguard) or a plain HTTPS call to POST /v1/decisions/evaluate. The trade-off: an in-code check is only enforced if every caller makes it, which is exactly what the sidecar removes.

curl -X POST https://api.eveaicore.com/v1/decisions/evaluate \
  -H "Authorization: Bearer eve_<your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"request_id": "req-001", "timestamp": "2026-06-02T00:00:00Z", "tenant_id": "org_abc", "user": {"id": "u_123", "role": "loan_officer"}, "proposed_action": {"type": "loan_approval", "amount": 50000}, "model_output": {"decision": "approve", "confidence": 0.9}, "context": {"credit_score": 720, "debt_to_income": 0.30, "employment_verified": true}, "policy_set": "lending_v1"}'
# -> {"decision": {"status": "ALLOWED"}, "risk": {"risk_level": "LOW"}, "audit": {"audit_id": "aud-001"}}
See the API reference for the full request contract.
Posture & Trust

A thin relay in your pod. No engine to reverse-engineer.

What runs in your pod is a thin, stateless authorization relay — never the governance engine. Decisions are made by the EVE control plane, which runs as EVE-hosted SaaS; VPC, on-prem, and air-gapped deployments of the engine are available to design partners (early access).

☁

The governance plane

All policy evaluation and decision logic run in the EVE control plane. The sidecar sends the request’s metadata and digests, verifies the signed verdict it gets back, and enforces it — it makes no decisions of its own.

✅

Private, pinned image

Each build produces a CycloneDX SBOM, a vulnerability scan, a signature and a pinned digest. The image is shared privately with design partners; it is not on Docker Hub or any public registry, and its source is not distributed.

Honest framing

The EVE Sidecar is in early access. It is built and tested in our CI, and we deploy it with design partners as a controlled pilot. It is not generally available, and there is no self-serve download.
Roadmap

What ships today, and what is coming

We are explicit about the current edges.

CapabilityTodayPlanned
Envoy ext_authz service (gRPC + HTTP) Built; fail-closed decision table Early access
Signed-decision verification Sidecar accepts ECDSA P-384 (what the hosted service signs, via KMS), ECDSA P-256 and Ed25519; HMAC and unknown types rejected Early access
Helm chart + container image Shared privately with design partners Entitled distribution (private registry / cloud marketplace)
Forward-proxy mode (HTTPS_PROXY, TLS interception) Not in the current image Not scheduled
Offline enforcement (no control-plane round-trip) Not available; every decision comes from the control plane Not scheduled
The full list lives in the Deployment guide.

Put a fail-closed gate in front of your AI

We’ll walk through your egress topology, the signed decision your auditors will verify, and an early-access pilot deployment for your environment.

Direct line: [email protected] · See pricing