Skip to content

Axum reference infrastructure #1578

Open

Description

@aram356

Summary

Reference infrastructure: DynamoDB, a readiness signal that reports degraded identity without failing the load balancer health check, JSON logs, two or more tasks, IPv6 CloudFront ranges, geo on, CloudFront's JA4 header forwarded, and an example rate-based rule at the load balancer.

Part of #1558, server-side identity on every adapter. Plan ID A7, planned in wave 8 (MVP: Fastly and Axum); priority P1, size L. Design: spec; order and dependencies: plan.

Requirements

AX-3 Trusted IP and geo

The client IP comes only from trusted CloudFront and load balancer hops, IPv4 and IPv6. Country and US region come from CloudFront headers only from a trusted hop. The reference deployment enables geo, because an unknown country fails closed and issues no EC.

AX-6 Reference infrastructure

The reference stack wires the DynamoDB table, port 443 egress for vendor APIs, a readiness signal, JSON logs, two or more tasks and an example rate-based rule at the load balancer, since Axum's own limits are off by default (DEC-11). A store outage only degrades identity (Failure handling), so the load balancer health check stays green while identity reports itself degraded. IABTechLab/edgezero#275 serves Axum on a current-thread runtime, so capacity comes from task count.

ID-6 Rate limiting (after the MVP, DEC-15)

In the MVP, Fastly keeps main's limits on batch sync and pull sync and #1487's per-provider lookup limit, and Axum has none because the deployer's load balancer limits traffic (DEC-11). Until EZI-5, Fastly's limiter stays the existing fastly::erl bridge in the Fastly adapter, and T21 keeps it when it moves the handlers into core. After the MVP, provider lookups, batch sync, pull sync and record creation are rate limited on every supported adapter except Axum, where every limit stays off by default; batch sync is keyed per partner and the other keys follow DEC-15, and an Axum limit turned on in configuration runs per task, divided by the configured task count.

ID-7 Abuse resistance

Where a trusted JA4 is available, record creation is refused when the JA4's TLS client family contradicts the User-Agent's browser family; a JA4 the rule does not recognize, or no trusted JA4 at all, does not block (DEC-18). The family rule and its data live in core with T12, which owns keeping them current; JA4 comes only from EdgeZero's ctx.ja4() (EZI-3).

Current state

What the code does today, from the design's survey at the revisions it names:

Acceptance criteria

  • AX-3: An untrusted peer with forged forwarded and geo headers gets its own IP and no geo
  • AX-3: A trusted IPv6 CloudFront hop is accepted
  • AX-3: The reference deployment applies with geo on
  • AX-6: The stack applies with those properties, the rate rule refuses traffic over its threshold, and with DynamoDB unreachable pages keep serving while identity reports degraded
  • ID-6: In the MVP, Fastly's existing limits still refuse or skip over-limit requests after T21 and Axum's default configuration applies no limit
  • ID-6: After the MVP, per-adapter tests hit each limit, and an Axum limit turned on for two tasks refuses at half the limit
  • ID-7: On each supported adapter a scripted client with a browser User-Agent and a non-browser JA4 creates no record, a current Chrome, Safari and Firefox JA4 that no list names still creates one, and a request with no trusted JA4 is not refused for lacking one

Dependencies

Blocked by:

Blocks:

Related pull requests

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions