Recommended: two AWS accounts, two data planes
Most organizations already separate pre-production and production into different AWS accounts. Put one data plane in each, and give each one exactly one data tag. Why this is the default recommendation:- Tag routing and the account boundary work together. Superblocks sends a request to the data plane that serves its data tag, so Edit and Preview traffic on
devonly ever runs on the development data plane. Because that data plane lives in the pre-production account, anything reachable only from inside the production VPC, such as the production database above, is out of reach from Edit even if an integration is misconfigured. IAM, networking, and billing are already separated, so you write no extra policy to get this. - Two data tags are the minimum that gives you separation, and few enough that builders rarely pick the wrong one. The built-in Development (
dev) and Production (production) tags already exist for this. - Clark stays on the development side. Clark only runs in Edit, so with Edit on the
devtag it never routes through the production account or VPC. See Clark and data access.
Less common layouts
Each layout below adds a data plane, a data tag, or both. See Data planes and Superblocks Database if you plan to enable databases.Single AWS account
Some organizations run everything in one AWS account. Keep the two data planes and two data tags, and put each data plane in its own VPC, or at least its own subnets and security groups. Implications:- Separation now depends on security groups and IAM policies you write, not on an account boundary.
- Both data planes share IAM role and resource namespaces, so each needs a distinct agent name.
Production with a VPC-only tag and a non-VPC tag
Some organizations have two kinds of production apps: a few that need private data inside the VPC, and many that only use SaaS tools or public APIs. Rather than give every production request a path into the private network, they run two production data planes with two production data tags. The second data plane runs in its own VPC with no peering, transit gateway attachment, or route to the VPC that holds private data; it still sits in private subnets and reaches SaaS and the control plane through NAT egress, like any other data plane. Implications:- Production has two data tags, so every app must choose the right one for its Production environment.
- The private data plane’s access footprint is smaller: only apps tagged
production-vpccan reach it. - The separation is only as good as the network boundary. Two VPCs with no peering or shared routes give it to you by default; if both data planes must share one VPC, security groups and network ACLs have to deny the SaaS-only data plane every path to the private data, and you own keeping that rule set correct.
With Superblocks Database
Superblocks Database creates one database per app per data tag, so an app whose Production environment allows bothproduction-vpc and production would get two production databases, one in each data plane’s pool. Superblocks recommends a third production tag for the apps that serve both an internal and a public audience. The SaaS-only data plane serves it alongside production, with agent tags profile:production,profile:production-shared:
Each app then has exactly one production tag and one production database. The app’s developer picks that tag before publishing for the first time, because the first publish creates the production database under that tag and data tag keys are permanent once databases exist.
Multi-region
When users or data live in more than one region, run a data plane in each region and give each region its own data tag. Apps allow several tags in Production, and end users switch regions by switching tags. Implications:- You still need a pre-production data plane and tag; regional tags are usually production-only. That makes at least three data planes.
- Every integration with regional instances needs a configuration per region.
IAM-based access patterns
When the data plane runs in AWS, its IAM role is the identity that AWS integrations authenticate with; see AWS IAM. If different groups of apps need different AWS permissions, you can run separate data planes, each with its own IAM role and data tag, instead of granting one data plane the union of every permission. Implications:- Every app must run with the tag whose data plane holds the permissions it needs; a mismatch fails at execution time, not at build time.

