Roll out DNS-AID across the enterprise.
A playbook for the platform architects and engineering leads who have to greenlight the work. It splits internal and external agents, slots under the gateways and frameworks your teams already run, and treats policy as six layers that have to agree.
Who this is for
Two readers in one document. Use the table of contents on the right to jump to whichever track matches your job today.
Engineering lead scoping cost and risk
You're asking whether DNS-AID is worth the effort, who needs to be involved, and what could go wrong. Skim the architecture in §5–7 if you want; the budget, governance, and risk content is what you came for.
Platform / DNS architect designing the rollout
You're going to draw the zone topology, pick the identity story, and integrate with the mesh and gateway you already operate. Phases and RACI matter; depth is here.
Prerequisites
Honest preconditions. If you don't have one of these, the alternative line tells you the smaller starting point.
Authoritative DNS for the target zones
Existing BIND, PowerDNS, Knot, Infoblox NIOS, Route 53, Azure DNS, or Cloud DNS is fine. DNS-AID is a publishing convention on top of standard records. No new server software to install.
If teams currently publish endpoints via a homegrown registry or pinned Slack messages, see §12 for the shadow-publish migration pattern.DNSSEC on those zones
Most managed DNS providers enable DNSSEC with a few clicks. For self-run BIND or PowerDNS it's a 1–3 day exercise. Treat it as a small prerequisite, not a multi-month project.
If a specific internal zone genuinely cannot be DNSSEC-signed (legacy resolver, regulatory carve-out), substitute TSIG plus network segmentation plus application-layer mTLS as the trust anchor. See the DNSSEC chapter in Learn More.An enterprise IdP
An OAuth2/OIDC issuer of some kind: Okta, Microsoft Entra ID, Auth0, Ping, or Keycloak. For service-to-service traffic, also a workload identity layer (SPIFFE/SPIRE, AWS IRSA, Azure Workload Identity, GCP Workload Identity Federation).
If you do not yet have an org IdP, start with one Keycloak instance for the pilot. Don't pilot without any identity — there's nothing useful to enforce against.A merge-gated DNS change process
Pull-request-based zone updates with CI hooks. The whole guide assumes a publish change is reviewable, lintable, and revertable like any other code change.
If DNS changes are still email-to-NetOps tickets, your §10 phase order has to flex. The platform team owns getting to PR-based zones before agent teams can self-serve.The 30-day shape of a rollout
Three phases. Each one has a scope, exit criteria, and a Looking Glass check before you move on.
Pilot
One team, one agent, internal zone only. One framework integration wired up. LangChain middleware is the easiest first pick.
- Exit: agent discoverable via
dns-aid.org/looking-glass - Exit: one caller integrates end-to-end
- Owner: app team + platform engineer
Canary
3–5 agents across 2 teams. Policy URIs wired at all six §6 enforcement points. IdP integration live. CI lint blocks bad publishes.
- Exit: agent deprecation exercised end-to-end
- Exit: policy update propagates within one TTL
- Owner: platform team + security
Production
Platform team owns the parent zone; teams self-serve via delegated sub-zones. SLOs from §9.4 in place. SIEM and drift detection live. Threat model from §11 signed off.
- Exit: org-wide capability vocabulary published
- Exit: partner onboarding playbook tested (§8.6)
- Owner: platform team + AI governance
Architecture
Three parts: zones, identity, and what runs on top.
5a. Zone architecture & split-horizon
The first decision: one shared _agents zone, per-team delegations, or per-environment? The recommended pattern is split-horizon delegation: a parent zone owned by the platform team, with per-team and per-environment sub-zones delegated via NS records. Internal resolvers see internal zones (corp.acme); external partners see only the public zone (acme.com). Internal agents never resolve externally.
Naming convention: _<agent>._<protocol>._agents.<env>.<scope>.<domain>. For example:
_orders._a2a._agents.prod.corp.acme— internal production A2A agent_support._mcp._agents.prod.acme.com— external production MCP agent_search._a2a._agents.dev.team-discovery.corp.acme— team-delegated dev agent
Multi-cloud and hybrid topology
DNS-AID fits multi-cloud naturally, because DNS already crosses cloud boundaries by design. The pattern: each cloud publishes its own sub-zone on the cloud's native DNS service. _agents.aws.corp.acme on Route 53, _agents.azure.corp.acme on Azure DNS, _agents.gcp.corp.acme on Cloud DNS, _agents.dc1.corp.acme on Infoblox or BIND on-prem. The parent zone, owned by the platform team, delegates to each sub-zone via NS records.
Cloud-to-cloud trust is then native. An agent in AWS resolves an agent in Azure through normal DNS recursion, and the DNSSEC chain validates across the cloud boundary. No per-cloud registry federation, no shared control plane, no synchronization job. This is where DNS-AID quietly wins over a central registry. A multi-cloud, hybrid, or post-M&A federated estate can establish trust between agent fleets just by signing zones. There's no registry to negotiate access to, and no plumbing to maintain between clouds.
Flat zone vs. per-team delegation vs. per-cloud sub-zones
Default
Platform team owns _agents.corp.acme; delegates per cloud (aws, azure, gcp, dc1) and per team within each. Three to four levels of delegation, never more.
When to deviate
Single-cloud orgs with fewer than five teams: a single flat zone is fine. Heavily regulated orgs may want a separate parent zone per BU rather than a single parent.
5b. Identity & auth
DNS-AID publishes where an agent lives and what it claims to do. The agent itself enforces who can call it, with the gateway in front doing the same check. Identity is the load-bearing architectural decision in any rollout.
Human-to-agent vs. agent-to-agent
These are distinct identity flows. Human-to-agent uses interactive OIDC with PKCE, MFA, and conditional access. Agent-to-agent is M2M: short-lived tokens, no interactive consent, audience-bound to the called agent's realm. Mixing the two flows is the most common identity-design mistake in agent rollouts. Decide which one your IdP token represents and bind enforcement to it.
Workload identity is the foundation for M2M
SPIFFE/SPIRE is the mesh-native, vendor-neutral standard. The cloud-native equivalents (AWS IAM Roles for Service Accounts on EKS, Azure Workload Identity on AKS, GCP Workload Identity Federation) are the right starting points if you live entirely in one cloud. Either way the agent's runtime identity becomes the SPIFFE ID or cloud-IAM principal, and the IdP issues short-lived tokens bound to that identity. No long-lived secrets in code or config.
Realm parameter as audience scope
The realm SvcParamKey in the SVCB record (e.g. realm="prod") is the audience scope the agent will accept tokens for. Tokens issued for one realm must not be replayable against another. Treat realm as the token aud claim and validate it at the gateway and at the agent.
DANE/TLSA cert pinning
Where DNSSEC is in place, DANE/TLSA binds the agent's TLS certificate to DNS. That gives you cheap cert pinning with no separate PKI to operate. Where DNSSEC isn't available, fall back to a private CA plus SPIFFE X.509 SVIDs.
IdP outage behavior
What happens when Okta or Entra is down? Decide per-agent. Fail-closed is the default: the gateway returns 503 to callers when token validation can't complete. Fail-open with a tightly-scoped token cache may be acceptable for low-risk, high-availability agents. agentgateway exposes this as an ext_authz policy choice; make it deliberate, not accidental.
Token caching and revocation
Short token TTL (5–15 minutes), plus a revocation list propagated to the gateway. Don't let the SDK cache tokens past their TTL "for performance"; that turns a revocation event into a multi-hour incident.
SPIFFE-everywhere vs. cloud-native workload identity per cloud
Default
Single-cloud, single-mesh org: use the cloud's native workload identity (IRSA, AWI, GCP WIF). Less moving parts, deep platform integration, no extra control plane.
When to deviate
Multi-cloud or hybrid: SPIFFE/SPIRE gives you a single SVID format across clouds and on-prem. Worth the operational complexity when agents cross cloud boundaries.
5c. Upstream services that build on DNS-AID
If DNS-AID is the discovery substrate, what runs on top of it in your stack? Four categories.
Agent framework integrations
Pre-built middleware and tools so application teams don't write DNS code. The DNS-AID project ships integrations for the major frameworks:
- langchain-dns-aid — middleware with
before_agentauto-publish andafter_agentauto-unpublish (prevents stale records). - crewai-dns-aid + crewai-mcp-bridge — tools for CrewAI agents to discover each other.
- autogen-ext-dns-aid, google-adk-dns-aid, haystack-dns-aid, llama-index-tools-dns-aid, mastra-dns-aid, openai-agents-dns-aid, semantic-kernel-dns-aid, agno-dns-aid, and a DSPy example.
auto_publish=True and the team's policy URI into the org's golden Python / TypeScript template.OWASP Agent Name Service (ANS)
ANS is a DNS-inspired registry from the OWASP GenAI Security Project that layers structured naming (protocol://capability.provider.v<version>), PKI identity, ZKP capability validation, and protocol adapters on top of a discovery substrate. DNS-AID is the natural transport: ANS names resolve to DNS-AID SVCB records, and ANS PKI bindings sit alongside DANE/TLSA.
When ANS becomes a hard requirement:
- A security audit cites OWASP GenAI controls and you need direct mapping evidence.
- Multiple protocol adapters across the enterprise (MCP + A2A + ACP) under one naming scheme.
- Partner federation where PKI identity beyond DNSSEC/DANE is contractually required.
Runtime brokers and proxies
The obvious fit: agentgateway (Linux Foundation project, originated at Solo.io; contributors include Microsoft, AWS, Cisco, Adobe, Huawei, and Apple). It's an AI-native proxy for MCP, A2A, and LLM traffic with session-aware routing, tool federation, OAuth, and observability. Instead of static MCP/A2A target lists in its config, agentgateway resolves _<agent>._<mcp|a2a>._agents.<env>.<domain> and routes dynamically.
agentgateway and your existing mesh coexist; they don't compete. Most enterprises run Istio or Linkerd for L4/L7 service traffic. The real architectural question is where the boundary sits. Two patterns:
- Mesh-in-front: Istio terminates at the agentgateway pod. Mesh handles mTLS and observability for cluster-internal traffic; agentgateway handles MCP/A2A session semantics and policy from there. Best for internal-agent traffic.
- Gateway-in-front: agentgateway terminates external MCP/A2A and forwards to mesh-resident agents. Best for partner-facing edge.
ext_authz.Inventory, SIEM, drift
- Internal developer portals (Backstage, Cortex, Port) populated by walking the org's
_agentszone. No manual catalog maintenance; the zone walk produces an authoritative, current inventory. See §8.5 — this is your AI-BoM. - SIEM (Splunk, Panther, Sentinel) subscribed to zone-change events. Alerts on unauthorized publishes, policy-URI removal, capability scope creep.
- Drift detectors compare current policy URI contents against an approved baseline; alert on out-of-band edits.
Policy enforcement — six layers of defense in depth
Policy is not a single hook. It is six layers, advertised at publish time and enforced at every checkpoint between the caller's keyboard and the agent's RPC handler. Where the layers disagree, the most restrictive wins. The risk this guide is built to prevent is what happens when they disagree silently: policy drift.
Publish-time
Declarative policy= URI in SVCB.
CI lint
Block bad publishes before merge.
Fail-closedCaller SDK
Local enforcement before the call leaves the host.
Fail-closedServer-side
Target agent enforces regardless of caller.
Fail-closedNetwork / gateway
agentgateway / mesh / sidecar.
Fail-closedObservability
Telemetry + SIEM drift alerts.
Detect6.1 Publish-time / declarative
The publishing team encodes policy=https://... and realm=... in the SVCB record. This is an advertisement, not enforcement. It tells the world what the agent expects and gives every later layer a single URL to fetch.
6.2 CI / pre-publish lint
A CI job blocks the DNS PR if: the policy= URI is missing, the URI isn't reachable, the schema is invalid, or the capability isn't in the approved vocabulary. Looking Glass is the verification gate at this layer.
6.3 Caller-side SDK
Before any HTTP or MCP call, the SDK fetches the policy doc and enforces locally, raising PolicyViolationError before bytes leave the host. See the existing pattern in Learn More. Stops bad calls cheaply.
6.4 Target-agent / server-side
The target agent enforces auth, scope, and rate limits regardless of what the caller did. Treats the published policy as a promise, not a guarantee. Last line of defense against malicious or buggy callers.
6.5 Network / sidecar / gateway
agentgateway for MCP/A2A, Envoy + OPA, service mesh, or API gateway enforce independent of agent code. Defense-in-depth so a CVE in one agent's SDK doesn't burn the whole org. See §5c for the broader stack picture.
6.6 Observability & continuous control
Telemetry on policy decisions: allow/deny counts, fetch errors, schema-version mismatches. SIEM alerts on drift between what's advertised in DNS and what's enforced downstream.
The failure mode is policy drift
The published URI says one thing, the server enforces another, the gateway a third. The mitigation is structural: one policy document per agent, fetched (with TTL) by every enforcement layer. Don't let teams hand-translate the same rules into Rego, into the SDK, and into agentgateway config. See §7's CEL-to-OPA lowering pattern.
Integration points by enforcement layer
For each of the six layers, the systems you can plug in. Everything listed is something you can install today.
| Layer | Open-source / standards | Commercial / managed |
|---|---|---|
| §6.1 Publish-time | BIND9, PowerDNS, Knot DNS with SVCB support; the dns-aid-integrations framework middleware |
Infoblox NIOS, NS1, Akamai Edge DNS, Route 53 (TXT fallback for private SvcParamKeys), Azure DNS, Cloud DNS |
| §6.2 CI lint | OPA conftest against policy bundle schema, dns-aid verify, GitHub Actions / GitLab CI, manual Looking Glass gate |
Drata, Vanta, Secureframe for auto-evidence collection on every approved publish |
| §6.3 Caller SDK | CEL (DNS-AID policy bundle), dns-aid SDK, per-framework middleware, SPIFFE/SPIRE SVID for caller identity |
Okta FGA, Auth0 FGA, Permit.io for fine-grained authorization layered on the SDK |
| §6.4 Server-side | OPA / Rego, Cedar, OPAL bundle distribution, AuthZed / SpiceDB for ReBAC, FastAPI / Express middlewares, SPIFFE SVIDs | AWS Verified Permissions (Cedar managed), Microsoft Entra ID + Conditional Access, Auth0 RBAC |
| §6.5 Gateway / mesh | agentgateway, Envoy ext_authz → OPA, Istio AuthorizationPolicy, Linkerd ServerAuthorization, Kong + OPA |
Solo.io Gloo (commercial agentgateway), AWS App Mesh, Tetrate Service Bridge, Kong Konnect, Cloudflare Access |
| §6.6 Observability / SIEM | OpenTelemetry policy-decision spans, Falco, Prometheus alertmanager, Loki | Splunk, Panther, Microsoft Sentinel, Datadog Cloud SIEM, Chronicle |
Four patterns worth lifting wholesale
CEL → OPA lowering
The DNS-AID policy bundle's CEL rules can be transpiled to Rego, so the same policy document drives §6.3 (caller SDK) and §6.4/§6.5 (OPA-based server or gateway enforcement). Eliminates the worst form of drift: divergent rule languages saying almost-but-not-quite-the-same thing.
agentgateway + ext_authz + OPA chain
Reference architecture for §6.5: agentgateway terminates MCP/A2A, calls ext_authz against OPA, which evaluates the policy bundle fetched (with TTL) from the policy= URI in DNS. One bundle, two enforcement points, no extra config plane.
Internal policy registry pattern
The policy= URI should point into the org's central policy catalog (typically Backstage TechDocs or a homegrown portal) instead of being a one-off URL per agent. Security gets one place to audit and version policies, and §6.2 CI lint validates that the URI matches the registry's approved list.
DLP / PII scrubbing as a §6.5 plugin
For agents that handle regulated data, slot Microsoft Purview, AWS Macie, or Nightfall into the agentgateway pipeline as a payload-transform step. Policy as transform, not as binary allow/deny.
Governance & compliance
Who owns what, who approves what, and how the audit trail maps to the regulations your auditors actually ask about.
8.1 Ownership model
The platform / DNS team owns the parent _agents zone and the policy framework. Security owns the approved capability vocabulary and the IdP integration. Application teams own their delegated sub-zone and their per-agent policy URIs.
Federated vs. central governance
Default (central)
One CISO-owned framework, one capability vocabulary, one policy registry. Works for orgs up to a few hundred agents.
When to deviate (federated)
Multi-BU enterprises or post-M&A integrations: each BU owns its capability vocabulary and policy registry; the parent zone enforces shared minimums.
8.2 Onboarding & approval flow
A new agent published in a delegated zone passes through:
- Capability declared from the approved vocabulary.
- Policy URI present, CI-validated, and pointing into the org's internal policy registry — not a one-off URL.
- Security review for cross-team callability.
- Looking Glass shows green at
dns-aid.org/looking-glass.
Same flow for new capabilities entering the shared vocabulary, gated by an architecture review.
8.3 Change management & versioning
Policy URIs are versioned (/policy/orders/v3.json); the SVCB record advertises the current version; TTLs are tuned so policy changes propagate within a known window; rollback is "revert the URI in the SVCB record." Same discipline for capability vocabularies.
8.4 Compliance mapping
This is a starting map for architects, not a sign-off. Consult your CISO and DPO for jurisdiction-specific evidence requirements. The DNS-AID artifacts below give compliance teams something concrete to point at.
| Regulation | DNS-AID artifact / control | Evidence owner |
|---|---|---|
| SOC 2 CC6 Logical access | Caller SDK + server-side enforcement; IdP token audit | Security |
| ISO 27001 A.9 Access control | Same as SOC 2; capability vocabulary review trail | Security |
| GDPR Art. 30 Records of processing | Per-agent policy URI documents data flows + lawful basis | DPO |
| GDPR Art. 17 Right to erasure | Agent decommissioning trail (§8.7) + SIEM retention | DPO |
| EU AI Act Annex IV Tech documentation | DNS-AID zone walk = AI-BoM (§8.5); capability= taxonomy maps to risk classification | AI governance / Legal |
| EU AI Act Art. 12 Logging | §6.6 policy-decision telemetry, retained per Art. 19 | Security + AI gov |
| NIST AI RMF Map-1.5 Inventory | DNS-AID zone walk = live system inventory | AI governance |
| NIST AI RMF Govern-1.6 Roles | §8.1 ownership + §10 RACI | AI governance |
| HIPAA §164.312 Access controls | §6.3 + §6.4 + §6.5; DANE/TLSA for transport | Compliance |
| PCI DSS 7 Access by need-to-know | Realm scoping + caller SDK enforcement | Compliance |
8.5 The DNS-AID zone as your AI Bill of Materials
Walk the org's _agents zone and you get a live inventory of every AI agent in operation: what it does (capability), where it runs (endpoint), what protocol (alpn), who governs it (policy URI), what realm it serves. This is the AI-BoM that EU AI Act Annex IV technical documentation and NIST AI RMF Map-1.5 ask for.
Rather than maintain a parallel spreadsheet that goes stale the day after it's filed, point compliance audit at the live zone walk. The zone is signed, versioned, and timestamped; it cannot diverge from reality the way an audit spreadsheet does.
Live zone walk vs. snapshotted evidence
Default
Snapshot the zone walk into versioned compliance evidence on a fixed schedule, quarterly at minimum. Auditors get a frozen artifact; the zone keeps moving.
When to deviate
Continuous-audit shops (FedRAMP, banking) want the live zone as the artifact, with SIEM-retained change events as the audit trail.
8.6 Cross-organization governance & partner onboarding
Federation across organizations is the hardest governance problem in agent ecosystems. DNS-AID's substrate makes it tractable; the contract work still has to happen. Onboarding sequence:
- Trust anchor exchange. Partner shares their DNSSEC DS record (or zone trust anchor); your resolver chain validates them. If both orgs have public domains with DNSSEC, the public DNS root handles this implicitly.
- Identity binding. DANE/TLSA pinning of partner agent certs in the partner zone; optional ANS PKI binding if both sides run ANS overlays. Document which certificate authorities each side accepts.
- Capability vocabulary alignment. Agree on which capabilities cross the boundary. Best practice: a small shared subset, not the union of both vocabularies.
- Policy contract. Out-of-band signed agreement (DPA, MSA addendum) referencing the specific policy URIs both sides advertise. Pin the URI versions in the contract.
- Realm mapping. Decide which realms each side will issue and accept tokens for. Typically partners get a dedicated realm (
realm="partner-acme") so blast radius is bounded. - Revocation procedure. Documented break-glass: zone owner unpublishes, callers see NXDOMAIN within TTL. Partner notification SLA. Joint tabletop exercise before going live.
- Joint observability. Agreement on what telemetry crosses the boundary (typically: nothing payload, only allow/deny counts and aggregated latency).
This is one of the genuinely open areas of agent federation; the §11 threat model calls out residual risks. The level of detail above is what architects need to hand to legal. Anything thinner gets bounced from the contract review.
8.7 Decommissioning & audit trail
An agent's full lifecycle (publish, version bumps, deprecation, unpublish) leaves a DNS-zone audit trail; SIEM retains it. Stale-record hunters run weekly via a Looking Glass diff. Required for GDPR Art. 17 and SOC 2 CC6.7.
Operations
Publishing mechanics, scale, verification, and the SLOs you can copy into your runbook.
9.1 Publishing
The DNS provider question: Route 53 and Cloudflare reject private SvcParamKeys today, so DNS-AID's richer metadata can't ride in their SVCB records. Recommendation: Infoblox NIOS, BIND9, PowerDNS, or NS1 for internal zones where you want full SVCB expressiveness; _agentmeta TXT-record fallback for external public zones hosted on providers that don't yet accept the private keys. The fallback pattern is documented in Learn More.
9.2 Scale and resilience
DNS has been the internet's lookup system for forty years. It is distributed by design, decentralized by design, and has had every conceivable failure mode shaken out of it. Caching at the resolver, OS, and SDK layers means a hot lookup is typically sub-millisecond. There is no central control plane to bottleneck on, no synchronization job to fall behind.
Recommended TTLs: 300 seconds for capability and policy SVCB records (fast change), 3600 seconds for stable endpoint records. The agentgateway-to-DNS dependency is no more concerning than any service's dependency on DNS. Which is to say, not concerning. This is one of the rare places in the agent stack where the boring, well-understood substrate happens to be the right answer.
9.3 Verification with Looking Glass
Verify with the existing Looking Glass page at dns-aid.org/looking-glass. At each rollout phase, run the target domain through Looking Glass and confirm: agent record discovered, DNSSEC valid, DANE/TLSA valid where used, policy URI reachable, no WARN or ERROR findings.
There's no programmatic CI integration for Looking Glass today. Verification is a human checkpoint on a published URL. Teams that want CI-grade automation should pair manual Looking Glass spot-checks with dig or delv scripts and the dns-aid verify CLI run from CI.
9.4 Example SLOs
Starting targets architects can adopt or adjust. Calibrate against your own resolver and gateway baseline.
| SLO | Target | Measured how |
|---|---|---|
| DNS-AID resolution P99 latency | < 50 ms warm, < 200 ms cold | OTel span on SDK resolve call |
| Policy URI fetch availability | 99.9% monthly | Synthetic probe from gateway |
| Policy URI fetch P99 latency | < 250 ms | OTel span on policy fetch |
| agentgateway authorization decision P99 | < 20 ms | OTel span on ext_authz |
| Time from policy URI change to enforcement | < 2× TTL (typically < 10 min) | Drift-detector dashboard |
| Stale-agent detection latency | < 7 days | Weekly Looking Glass diff |
| DNSSEC validation success rate | > 99.99% | Resolver telemetry |
Phased rollout & RACI
Phase detail expands §4. Each phase has prerequisites (from §3), scope, exit criteria, and rollback. The RACI then sets ownership across the lifecycle.
10.1 Phase detail
Pilot — weeks 1–2
Prerequisites: §3.1–3.4 met for one team. Scope: one agent, internal zone only, one framework middleware wired up. Exit: agent discoverable via Looking Glass; one caller integrates end-to-end. Rollback: remove the SVCB record; revert framework middleware to no-op.
Canary — weeks 3–6
Prerequisites: pilot exit met; capability vocabulary v0.1 published; CI lint deployed. Scope: 3–5 agents across 2 teams; policy URIs wired at all six §6 layers; IdP integration live for caller SDK and target agents; agentgateway deployed for inter-team calls. Exit: deprecation exercise (publish v2 of an agent, drain v1, unpublish); policy update propagation verified within one TTL. Rollback: mesh routes bypass agentgateway; SDK falls back to discovery-only mode without enforcement.
Production — week 7+
Prerequisites: canary exit met; threat model (§11) reviewed and signed off; SLOs (§9.4) instrumented. Scope: platform team owns parent zone; teams self-serve via delegated sub-zones; SIEM and drift detection live; AI-BoM snapshotting on schedule (§8.5). Exit: partner onboarding playbook (§8.6) tested in tabletop; quarterly AI-BoM snapshot delivered. Rollback: per-team, not org-wide. Freeze new publishes in the affected sub-zone, fall back to canary-phase agentgateway routing.
10.2 RACI
R = Responsible (does the work) · A = Accountable (owns the outcome) · C = Consulted · I = Informed.
| Activity | Platform / DNS | Security | App teams | SRE / ops | AI governance |
|---|---|---|---|---|---|
| Zone delegation | R / A | C | I | I | I |
| DNSSEC enablement | R / A | C | I | I | I |
| Agent publishing | C | I | R / A | I | I |
| Policy authoring | I | C | R / A | I | C |
| Policy URI lint (CI) | R | A | C | I | I |
| Capability vocabulary | C | R / A | C | I | C |
| agentgateway / mesh integration | R | C | I | A | I |
| IdP & workload identity | C | R / A | I | C | I |
| Monitoring & drift detection | C | C | I | R / A | I |
| Threat-model review | C | R / A | C | C | C |
| Partner onboarding (§8.6) | R | A | C | C | C |
| Incident response | R | A | C | R | I |
| Decommissioning | R | C | A | I | I |
| AI-BoM snapshotting | R | C | I | I | A |
Threat model
A signpost threat model, not an exhaustive one. Run a full STRIDE or LINDDUN exercise during the canary phase with Security and AI Governance. The table below covers the threats this guide is designed to mitigate, and what residual risk remains.
| Threat | Mitigation layer | Residual risk |
|---|---|---|
| Spoofed agent identity — rogue agent publishes under your zone | DNSSEC chain + DANE/TLSA + §6.4 server-side IdP check | Compromised zone-signing key — mitigated by §3 prerequisite hygiene |
| Zone / registry poisoning on upstream resolver | DNSSEC validation at SDK and gateway | Resolver bypass via injected static config — caught by §6.2 lint |
| Policy bypass via direct connection (caller skips the gateway) | §6.4 server-side enforcement; network policy restricting direct ingress | Insider with cluster access — mitigated by mesh + audit |
| Stale-record exploitation — deprecated agent still resolvable | §8.7 decommissioning + Looking Glass diff | Window between unpublish and TTL expiry |
Supply-chain attack via framework middleware (poisoned langchain-dns-aid) |
Pinned package versions + SBOM scan + §6.2 lint | Zero-day in upstream package; defense via §6.4 + §6.5 |
| Cross-tenant leak in shared zone | Per-team delegation (§5a); realm scoping (§5b) | Misconfigured delegation — caught by §6.2 lint |
| Downgrade attack — DNSSEC-validated → opportunistic | Strict-validation mode at SDK and gateway | Resolver misconfig in transit network |
| Partner-org trust compromise | §8.6 revocation procedure; TTL bounds blast radius | Partner zone-key compromise undetected until §6.6 telemetry catches anomaly |
Cost & migration
Directional budget input plus the playbook for moving off an existing service registry.
12.1 Cost — directional estimates
Commercial pricing varies by negotiation; these are open-source-leaning ballparks for budget input. The DNS-AID protocol itself is free.
| Cost line | Open-source path | Commercial / managed path |
|---|---|---|
| Authoritative DNS | $0 (existing BIND / PowerDNS) | $0.50/zone/mo + ~$0.40 per million queries (Route 53 ballpark); Infoblox NIOS is capacity-based at six figures annually at enterprise scale |
| DNSSEC | $0 (operational time) | Bundled with most managed DNS |
| Workload identity | $0 (SPIFFE/SPIRE, cloud-native IRSA / Azure WI / GCP WIF) | Bundled with IdP |
| IdP | $0 (Keycloak self-hosted) | Per-user (Okta, Entra ID, Auth0) — almost always already a sunk enterprise cost |
| agentgateway | $0 (OSS, Linux Foundation) | Solo Gloo commercial support — quote-based |
| Policy engine | $0 (OPA + OPAL + Cedar) | AWS Verified Permissions per-request pricing |
| SIEM ingest | Varies (Loki cheap; volume drives cost) | Splunk / Sentinel — typically largest line item; budget per-GB ingest |
| Catalog / portal | $0 (Backstage) | Cortex, Port subscription |
| DNS-AID protocol | $0 | $0 |
Headcount is usually the dominant cost. Estimate 0.5 FTE platform engineer ongoing for zone + policy registry + drift monitoring, plus 0.25 FTE Security for capability vocabulary + audit. The pilot phase fits inside existing platform-team capacity at most enterprises.
12.2 Migration & coexistence
Greenfield is rare. Most enterprises start with some mix of hand-rolled service registries, MCP server URLs pinned in a Slack channel, and hardcoded endpoints in agent config. The shadow-publish migration pattern moves teams off the legacy without breakage.
- Inventory. Catalog current agent endpoints (often spread across Slack, Confluence, hardcoded configs, internal portals). Bonus: this inventory exercise alone usually surfaces stale agents nobody remembered.
- Shadow-publish. Publish DNS-AID records in parallel with the existing registry. Same endpoints, dual source of truth, no consumers switched yet.
- Dual-resolve in the SDK. Update SDK or framework middleware to resolve from both sources, preferring DNS-AID, falling back to legacy. Log mismatches.
- Cutover per team. Once a team's agents are shadow-published and validated via Looking Glass, switch their callers to DNS-AID-only. Telemetry should show zero fallback hits before declaring the team done.
- Deprecate legacy. Freeze new entries to the old registry; set a sunset date; remove read paths once SLOs hold for one quarter.
- Decommission. Old registry goes read-only, then offline. SIEM retains its records per audit policy.
Big-bang vs. team-by-team cutover
Default
Team-by-team. Lower risk, fits in existing release trains, makes mismatch hunting tractable. Recommended for all but the smallest orgs.
When to deviate
Very small orgs (<10 agents) with a single platform team can big-bang in a maintenance window. Don't try this at scale.
Verification checklist & next steps
A short list to keep on the wall, and where to read next.
Verification checklist
- Target zones are DNSSEC-signed; resolver chain validates from root.
- Authoritative DNS supports private SvcParamKeys, or the
_agentmetaTXT fallback is in place. - Enterprise IdP issues short-lived tokens audience-bound to the agent's realm.
- Workload identity (SPIFFE or cloud-native) is the foundation for M2M tokens.
- Policy URI is reachable, schema-valid, and points into the internal policy registry.
- CI lint blocks bad publishes before merge.
- agentgateway or mesh enforces independent of agent SDK;
ext_authzchain wired to the policy bundle. - SIEM subscribed to zone-change events; drift detector running against approved baselines.
- Looking Glass green at
dns-aid.org/looking-glassfor every published agent. - Threat model reviewed; partner onboarding playbook tested in tabletop.
Next steps
- Looking Glass — verify your agents are discoverable and DNSSEC-valid.
- Policy — deeper governance and CEL rule mechanics.
- Learn More — protocol mechanics, SVCB anatomy, DNSSEC chapter.
- OWASP ANS specification — for orgs adding the PKI/naming overlay.
- agentgateway project — the §6.5 reference gateway.
- DNS-AID core (GitHub) — SDK, CLI, integrations, IETF draft references.
Run a pilot in two weeks.
One team, one agent, internal zone. The rest of the rollout reads from the same playbook.