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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 }
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"}}
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).
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.
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.
We are explicit about the current edges.
| Capability | Today | Planned |
|---|---|---|
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 |
We’ll walk through your egress topology, the signed decision your auditors will verify, and an early-access pilot deployment for your environment.