Architecture Decision Record

ADR-0034: NATS Accounts Are Zone-Scoped, Not Globally Shared

Status: Accepted · Date: 2026-03-06

Status: Accepted

Date: 2026-03-06

Context

BSFG already commits to zone-local JetStream domains, mTLS-authenticated peer identity, explicit cross-zone synchronization, and service-mediated access to fact streams and object storage. That leaves one broker-topology question unresolved:

This matters because accounts are not only an authentication detail. They define visibility, permissions, and the scope within which subjects and services are naturally visible.

Options Considered

Option Description Benefits Drawbacks
Single shared account across all zones Put Enterprise, IDMZ, and Plants into one broad account namespace.

|

| | Mixed account model | Some zones share one account while others get isolated accounts. |

|

| | Zone-scoped accounts with explicit sharing only where needed (Selected) | Each zone owns its own account boundary; cross-zone exchange remains explicit through BSFG peers and narrowly granted exports/imports where required. |

|

| | Per-service accounts only | Ignore zone boundaries and isolate mainly by service/application identity. |

|

|

Decision

NATS accounts are treated as zone-scoped isolation boundaries, not as one global shared namespace.

zone
  -> zone-local account
  -> zone-local subjects
  -> zone-local permissions

Cross-zone communication does not rely on ambient subject visibility across a shared account. It remains explicit through:

This means account boundaries reinforce the same separation already present in:

Consequences

Benefits:

Tradeoffs: