Enforce HTTP Intent at a Destination Waypoint
Add method-and-path authorization at the destination waypoint while refusing to claim an HTTPRoute that the repository does not declare.
System map · Day 33
Whole-system design
Five stable layers. Today's work is expanded and linked; the rest stays in context.
Product and authority
Covered — People and product entry points · HelixWorks control plane · Generated application plane
Identity and policy
Source-backed today
Adds HTTP method and path intent on top of the already established workload identity.
Delivery and desired state
Covered — Git desired state · CI and immutable artifacts · Argo CD reconciliation
Cloud and orchestration
Covered — Terraform and AWS APIs · Accounts, VPC, DNS, and private paths · Kubernetes or EKS control plane
Compute and traffic
Covered — Worker compute
Platform service workloads
Source-backed today
Limits generator access to the control-plane principal and the exact POST generation operation.
Generated app workloads
Source-backed today
Receives only requests admitted by destination-owned L7 policy rather than trusting callers.
Ambient mesh data plane
Source-backed today
Routes destination traffic through a waypoint that parses and authorizes HTTP before forwarding.
Storage and evidence
Covered — Infrastructure state · Cluster desired and live state · Product data and artifacts · Evidence and observability
The enterprise problem and today’s slice
Enterprise problem: Connection-level permission cannot distinguish “generate an artifact” from “delete a runtime,” so an allowed caller may still perform an unsafe HTTP action. Whole-course context: The incoming ambient-l4-local gate authenticates direct ServiceAccount connections and has live positive/denied evidence, but it deliberately has no waypoint or HTTP policy. Today’s slice: Applying full ambient-local adds the destination waypoint, selects it on the namespace, rewrites all five L4 destinations to accept only the waypoint principal, and adds four exact targetRefs L7 policies. Gateway API supplies the waypoint Gateway, but this repository declares no HTTPRoute, so no traffic split or rewrite is claimed. End-of-day evidence: Accepted/Programmed waypoint, waypoint-only L4 rewrite, exact L7 policies, verifier-executed POST success, verifier-executed GET 403, no-HTTPRoute check, environment, time, run, and trace prove the boundary. Still unsolved: Migration, telemetry, failure recovery, rollback, and EKS ownership follow next.
Customer outcome and implementation focus
The customer outcome is a reviewable enforce http intent at a destination waypoint change, not a collection of requirements. This day starts with the implementation boundary, then uses the command or manifest below to produce positive, denied, and recovery evidence.
Components in focus
Waypoint proxy, Istio authorization policy controller, ServiceAccounts, and destination API; waypoint and application pods; Kubernetes etcd and access logs/traces; cache: not involved.
This map names the implementation boundary for this day. The service or controller changes only the state it owns; runtime and audit evidence let the operator distinguish a declared change from an effective one.
Verify policy and the route veto
Gateway readiness does not prove HTTP authorization or routing, so inspect all three claims independently.
: "${MESH_CONTEXT:?set the exact kubectl context}"
kubectl --context "$MESH_CONTEXT" apply -k gitops/apps/forge/overlays/ambient-local
MESH_CONTEXT="$MESH_CONTEXT" ./scripts/verify-istio-ambient.sh l7
kubectl --context "$MESH_CONTEXT" -n helixworks-forge wait gateway/forge-waypoint --for=condition=Programmed --timeout=180s
kubectl --context "$MESH_CONTEXT" -n helixworks-forge get authorizationpolicy generator-from-control-plane runtime-from-control-plane evidence-from-control-plane broker-from-publishers
if kubectl --context "$MESH_CONTEXT" -n helixworks-forge get httproute -o name | grep -q .; then
echo "route veto: implementation unexpectedly contains HTTPRoute desired state" >&2
exit 1
fi
The scoped repository verifier is executable evidence, not an instruction comment: it checks enrollment and L4 prerequisites, requires the namespace waypoint label, waits for Gateway Accepted/Programmed and waypoint rollout, verifies all four targetRef policies, then sends authenticated POST /generate and requires a generated artifact. It immediately sends GET /generate from the same control-plane workload and accepts only HTTP 403. A successful kubectl get without these requests is not L7 proof.
Gateway API’s HTTPRoute resource models HTTP routing rules, but installing its CRD or creating a Gateway does not create a route (Gateway API HTTPRoute).
Before and after, side by side
L4 identity previously answered only whether the control plane could connect, leaving every HTTP operation equally reachable. The waypoint now permits specific destination methods and paths while routing remains explicitly undeclared.
Key takeaways
The waypoint is an L7 enforcement point; it is not itself an HTTP routing policy.
- Attach ambient L7 policy to destination Services with
targetRefs. - Prove both allowed and denied HTTP operations using the same authenticated caller.
- Claim route behavior only when an HTTPRoute exists in Git, is Accepted, and changes observed requests.
Checklist
L7 policy is ready only when attachment, behavior, and absence claims are independently verified.
- [ ] Gateway Accepted and Programmed with namespace selection recorded
- [ ] Full
ambient-localreplaces the Day 32 direct L4 principals with waypoint-only L4 principals - [ ] Four exact Service-targeted policies reconciled
- [ ] Repository L7 verifier executes allowed POST and requires wrong-method GET
403 - [ ] Zero HTTPRoute desired/live state recorded; no routing outcome claimed