AWS-Reference Architecture
32 min read
What this page covers
Unique AI supports multiple network topologies and deployment profiles. The platform can deploy behind internal-only access (Direct Connect / Transit Gateway), internet-facing access (CloudFront), or a dual model combining both. Data services can run as PaaS (managed by the cloud provider) or cloud-native (self-hosted on Kubernetes). Monitoring and artifact management follow the same pattern — AWS managed services or bring-your-own tooling.
This page documents the Unique AI AWS reference architecture: hub-and-spoke accounts, internal access via Direct Connect and Transit Gateway, PaaS data services (Aurora, ElastiCache, S3), AWS-managed monitoring (CloudWatch, Managed Prometheus, Managed Grafana), AWS-managed artifact services (ECR), and Amazon Bedrock for model inference. The platform supports three account topologies and three network access models that can be combined to match different enterprise architectures — these are summarised in Adaptive Architecture at the end of this page.
The page is structured around five views that progressively increase in detail. Start with the high-level architecture for the full picture, then drill into whichever area is relevant to your environment.
View | What it answers |
|---|---|
High-Level Architecture | What gets deployed, where it sits, how traffic flows, and what AWS services are consumed. Includes the service inventory, cross-account dependencies, and Pod Identity model. |
VPC and Network Layout | How the VPC is structured — five subnet tiers, security groups, DNS and ingress, VPC endpoints, and connectivity account dependencies. |
Data and Integration | How the platform connects to external systems — seven integration boundaries covering MCP connectors, document ingestion, identity federation, LLM inference, document processing, public API, and webhooks. |
Availability, Capacity and Costs | How the platform scales and maintains availability — multi-AZ model, compute sizing, cost composition, zero-downtime maintenance, and SLA boundaries. |
Dependencies and Scope | What must exist before deployment, governance considerations (SCPs, IAM Identity Center, tag policies, Config rules), and the responsibility boundary between Unique and the client. |
Adaptive Architecture | How the platform adapts to different environments — three AWS account topologies, three network access models, and two data service hosting options. |
High-Level Architecture
The Unique AI AWS reference architecture is based on the AWS Cloud Adoption Framework, the Well-Architected Framework, and each service's prescriptive guidance, which should map to your organisation's AWS landing zone.
The flexibility and configurability of Unique AI ensures that any discrepancies between these frameworks and your environment can be resolved with deployment and configuration adaptation.
The architecture follows a hub-and-spoke account model with two AWS accounts. This is the standard AWS landing zone layout — separating connectivity from workload accounts enforces centralised network ingress and egress, separation of concerns, and least-privilege principles.
Connectivity Account is the network hub. All traffic entering or leaving the AWS environment passes through this account. It provides centralised DNS via Route 53, internet egress through NAT Gateway and Network Firewall, inter-account routing via Transit Gateway, and private connectivity to the customer's on-premises network via Direct Connect. The Workload Account has no Internet Gateway and no NAT Gateways — all outbound traffic is forced through the Connectivity Account's inspection chain.
Workload Account hosts the entire Unique platform. Inside a single VPC with five subnet tiers, an EKS cluster runs all application workloads. PaaS data services — Aurora PostgreSQL, ElastiCache Redis, and S3 — sit outside the VPC but inside the account, accessed exclusively through VPC Endpoints. No traffic to AWS services crosses the public internet.
AWS Organisation spans both accounts with your organisation's governance and landing zone services. The ones shown — Control Tower, CloudTrail, AWS Config, IAM Identity Center, and optionally GuardDuty and Security Hub — are those that directly bear on the Unique AI workload account and solution.
Network paths
There are three distinct network paths:
Internal path carries all user traffic and on-premises data source access. Users on the customer's corporate network reach the platform via Direct Connect through Transit Gateway into the VPC. Traffic terminates TLS at an internal Application Load Balancer and is routed to Kong API Gateway pods in EKS. On-premises data sources accessed via MCP connectors use the same private path. No internet is involved.
Internet egress path handles all outbound internet traffic. This includes ArgoCD pulling charts from GitHub, MCP connectors calling SaaS APIs, Zitadel federating with the customer's identity provider, and ECR pull-through cache misses. All outbound traffic exits through Transit Gateway to the Connectivity Account, where Network Firewall inspects it before NAT Gateway provides the internet breakout.
VPC Endpoint path keeps all traffic to AWS managed services — S3, Aurora, Bedrock, KMS, ECR, CloudWatch, and others — on the AWS private network. This is the highest-volume path and carries zero internet exposure. No resources in the Workload Account have public endpoints or public IP addresses — all AWS service access is routed through VPC Endpoints.
EKS workload groups
The Unique AI workloads on the EKS cluster can be grouped into the following broad functional and capability groups:
Layer | Purpose | Workloads | AWS Services |
|---|---|---|---|
Frontend | User-facing web applications | Chat UI Knowledge Base UI Admin UI Theme UI | Routed via Kong/ALB at Platform layer |
Application Services | Core business logic, identity, async messaging | Chat API Configuration API Scope Management API Document Ingestion API Speech-to-Text Analytics Exporter WebHook Scheduler and Worker | Aurora PostgreSQL AWS ElastiCache (Redis) AWS Elastic Block Store (CSI) AWS S3 AWS Key Management Service AWS Secrets Manager |
AI Services | LLM proxy, agent orchestration, vector and hybrid search, document processing | LLM Proxy (LiteLLM) AI Orchestration (assistants-core) Document Processor (ingestor) Vector Database (Qdrant) Hybrid Search (ElasticSearch + ECK operator) | Amazon Bedrock AWS Elastic File System (CSI) AWS Elastic Block Store (CSI) AWS S3 |
Platform Services | API gateway, GitOps, observability, secrets, autoscaling | API Gateway (Kong) GitOps (ArgoCD) Cert Manager External Secrets Autoscaler (KEDA) RabbitMQ Operator Observability (kube-prometheus-stack) | AWS Application Load Balancer AWS Key Management Service AWS Secrets Manager AWS Route 53 AWS Elastic Container Registry AWS CloudWatch AWS Managed Prometheus |
AWS Service Inventory
AWS services deployed to the Workload Account by Unique's infrastructure-as-code.
AWS Service | Purpose | Component | SKU | Configuration | Network Endpoint |
|---|---|---|---|---|---|
Aurora PostgreSQL | Primary persistence | 6 databases | db.r6g.large | KMS-encrypted, multi-AZ, automated backups | VPC Endpoint (Interface) |
ElastiCache Redis | Caching, real-time PubSub | 2 nodes (primary + replica) | cache.r7g.large | TLS, multi-AZ | VPC Endpoint (Interface) |
AWS S3 | Object storage | 3 buckets (app, AI, observability) | Standard | Versioned, KMS-encrypted, lifecycle policies | VPC Endpoint (Gateway) |
EFS | Shared filesystem | 1 filesystem | Elastic throughput | KMS-encrypted, private subnet mount targets | Mount target ENIs |
Bedrock | LLM and embedding inference | 8 models | Pay-per-token, Provisioned Throughput | Bedrock inference profiles | VPC Endpoint (Interface) |
KMS | Encryption at rest | 5 keys | Per-request | Dedicated keys per concern | VPC Endpoint (Interface) |
Secrets Manager | Application secrets, credentials | Per-application | Per-secret + per-request | Consumed via ExternalSecrets operator | VPC Endpoint (Interface) |
EKS | Container platform | 1 cluster, 2 node groups | m6i.2xlarge (nodes) | Managed node groups, Pod Identity | EKS API VPC Endpoint (Interface) |
ECR | Container image registry | Pull-through cache | Per-GB stored + transfer | Upstream registries cached locally | VPC Endpoint (Interface) |
ALB | Ingress load balancer | 1 internal ALB | Per-LCU | TLS termination, internal only | Private subnet ENIs |
VPC | Network isolation | 5-tier subnets across 3 AZs | — | Private, isolated, and management tiers | — |
CloudWatch | Logging, VPC flow logs | Log groups | Per-GB ingested | KMS-encrypted | VPC Endpoint (Interface) |
AWS Textract | Document text extraction | On-demand | Per-page | Consumed by ingestion workers | VPC Endpoint (Interface) |
Cross-Account Dependencies
Several services in the Workload Account depend on resources owned by the Connectivity Account. These dependencies follow the AWS multi-account strategy prescribed by AWS Organizations and Control Tower:
Resource sharing over cross-account IAM — dependencies are resolved through AWS Resource Access Manager (RAM) and DNS delegation, not IAM trust relationships or credential sharing between accounts
Account boundary as security boundary — each account operates with its own IAM principals. No account assumes roles into another for runtime operations
Centralised network, decentralised workloads — the Connectivity Account owns the network perimeter (ingress, egress, inspection), while the Workload Account owns everything inside its VPC. This aligns with the AWS Security Reference Architecture (SRA) network account pattern
Workload Account Service | Connectivity Account Dependency | Resolution Mechanism |
|---|---|---|
VPC (TGW attachment) | Transit Gateway | AWS Resource Access Manager (RAM) share — connectivity account shares the TGW, workload account accepts and creates a TGW attachment |
ALB (TLS certificates) | ACM (Certificate Manager) | Certificates provisioned in the workload account; DNS validation via Route 53 zone delegation from connectivity account |
Route 53 (platform domain) | Route 53 (parent zone) | DNS zone delegation — connectivity account delegates a subdomain to a hosted zone in the workload account |
All internet-bound traffic | NAT Gateway, Network Firewall | Routing — workload VPC default route (0.0.0.0/0) points to TGW, which routes to the connectivity account's inspection and egress chain |
Direct Connect traffic | Direct Connect, TGW | Routing — on-premises traffic arrives at the connectivity account's Direct Connect gateway, routes through TGW to the workload VPC |
The Connectivity Account resources — Transit Gateway, Network Firewall, NAT Gateways, Direct Connect — are prerequisites managed by the client's platform team. Unique's infrastructure-as-code consumes these as inputs (TGW ID, DNS delegation) but does not provision or modify them.
Pod Identity and IAM Policies
Every workload that accesses an AWS service receives its own Pod Identity association — a dedicated IAM role bound to a single Kubernetes ServiceAccount. There are no shared roles, no long-lived credentials, and no legacy IRSA bindings. The design follows three principles:
Least-privilege per workload — each IAM policy grants only the actions and resources that specific workload requires. No role is reused across workloads.
No static credentials — all AWS access uses short-lived tokens injected by the Pod Identity agent. No access keys are stored in Secrets Manager or environment variables for AWS service access.
Resource-scoped policies — policies target specific ARNs (buckets, KMS keys, inference profiles) rather than wildcards wherever the AWS service supports resource-level permissions.
There are 14 Pod Identity associations in the reference architecture.
AI Services
ServiceAccount | Purpose | IAM Role | AWS Actions | Target Resources |
|---|---|---|---|---|
assistants-core | AI orchestration — Bedrock + S3 + secrets | assistants-core | bedrock:InvokeModel*; s3:ListBucket, Get/Put/DeleteObject; secretsmanager:GetSecretValue | Bedrock EU inference profiles + ai-data S3 bucket + Secrets Manager |
litellm | LLM gateway — Bedrock invocation | litellm | bedrock:InvokeModel, InvokeModelWithResponseStream | Bedrock foundation models, Bedrock inference profiles |
backend-service-ingestion | Document processor — S3 + Textract | ingestion | s3:ListBucket, Get/Put/DeleteObject; textract:DetectDocumentText, AnalyzeDocument | ai-data S3 bucket; Textract: * |
backend-service-ingestion-worker | Ingestion worker — Bedrock embeddings + S3 + Textract | ingestion-worker | bedrock:InvokeModel*; s3:ListBucket, Get/Put/DeleteObject; textract:DetectDocumentText, AnalyzeDocument | Bedrock EU inference profiles + ai-data S3 bucket; Textract: * |
Platform Services
ServiceAccount | Purpose | IAM Role | AWS Actions | Target Resources |
|---|---|---|---|---|
ebs-csi-controller-sa | EBS CSI — provision encrypted gp3 volumes | ebs-csi-driver | AmazonEBSCSIDriverPolicy + KMS grant/encrypt/decrypt | Managed policy + general KMS key |
efs-csi-controller-sa | EFS CSI — mount EFS volumes | efs-csi-driver | AmazonEFSCSIDriverPolicy | Managed policy |
external-secrets | ExternalSecrets — secrets delivery for all workloads* | cluster-secrets | secretsmanager:GetSecretValue, DescribeSecret; kms:Decrypt | All Secrets Manager secrets + KMS secrets key |
cert-manager | Route 53 DNS-01 validation for Let's Encrypt | cert-manager-route53 | route53:ChangeResourceRecordSets, GetChange, List* | Hosted zones + changes; List actions: * |
aws-load-balancer-controller | ALB lifecycle + TargetGroupBinding pod-IP registration | aws-lb-controller | EC2 describe/tag/SG, full ELBv2 management, ACM read, WAFv2, Shield | * (with condition on CreateServiceLinkedRole) |
kube-prometheus-stack-prometheus | Remote-write metrics to Managed Prometheus | prometheus | aps:RemoteWrite, GetLabels, GetSeries, GetMetricMetadata | AMP workspace |
kube-prometheus-stack-grafana | Grafana queries against AMP and CloudWatch | grafana-pod | aps:Query*; cloudwatch:Describe*/List*/GetMetric*; logs:Describe*/Get*/Start*/StopQuery | AMP workspace + CloudWatch + CloudWatch Logs |
loki | Loki S3 chunk and index storage | loki | s3:ListBucket, Get/Put/DeleteObject; kms:Encrypt/Decrypt/GenerateDataKey | Observability S3 bucket + KMS key |
tempo | Tempo S3 trace storage | tempo | s3:ListBucket, Get/Put/DeleteObject; kms:Encrypt/Decrypt/GenerateDataKey | Observability S3 bucket (tempo/ prefix) + KMS key |
Five of the Platform associations (prometheus, grafana-pod, loki, tempo) are conditional — they are only created when the observability infrastructure outputs are present.
Two associations intentionally carry broader scope: external-secrets (delivers secrets cluster-wide, so it reads all Secrets Manager values — access is CloudTrail-logged and can be narrowed to a naming prefix on request) and aws-load-balancer-controller (AWS's published policy, constrained by IAM conditions).
VPC and Network Layout
The VPC design follows the AWS VPC security best practices and the Well-Architected Framework networking pillar:
Defence in depth — five subnet tiers with distinct isolation levels, security groups enforcing least-privilege at layer 4, and no default route from the isolated data tier
No public exposure — no Internet Gateway, no public subnets, no public IP addresses in the Workload Account. All external connectivity routes through the Connectivity Account's inspection chain
Private-first AWS access — all AWS service traffic stays on the AWS network via VPC Endpoints. Standard SDK calls resolve to private endpoints automatically via private DNS
Subnet tiers
The VPC uses a five-tier subnet model distributed across three Availability Zones. Each tier has a distinct isolation level and routing profile. There are no public subnets and no Internet Gateway in the Workload Account.
Tier | Size (per AZ) | Purpose | What lives here | Routing |
|---|---|---|---|---|
Cluster | /28 (16 IPs) | EKS control plane ENIs | EKS-managed cross-account ENIs for control plane to node communication | 0.0.0.0/0 → TGW |
Node (private) | /22 (1,024 IPs) | Application workloads and infrastructure | EKS worker nodes, ALB, VPC Endpoint ENIs, EFS mount targets, TGW attachment | 0.0.0.0/0 → TGW |
Pod (optional) | /19 (8,192 IPs) | Pod IP separation | Pod secondary ENIs via VPC CNI custom networking. Preserves primary CIDR for infrastructure | 0.0.0.0/0 → TGW |
Isolated | /26 (64 IPs) | PaaS data services | Aurora PostgreSQL, ElastiCache Redis. No default route — reachable only from within the VPC | VPC-local + S3 gateway only |
Management | /26 (64 IPs) | Operational tooling | GitHub Actions runners, management bastion. Isolated from application workloads | 0.0.0.0/0 → TGW |
Cluster subnets are separated from Node subnets per AWS EKS best practices — during cluster upgrades, AWS provisions additional ENIs that would compete for IP space with worker nodes. The Isolated tier has no outbound route, ensuring Aurora and ElastiCache are network-isolated from anything outside the VPC.
Security groups
Security groups enforce layer-4 access control between components. Each security group is scoped to a specific function and follows a deny-all-except pattern.
Security Group | Attached To | Inbound | Outbound |
|---|---|---|---|
alb | Internal ALB | 443 from TGW / CloudFront prefix list | 80/443 to VPC |
eks_cluster | EKS control plane ENIs | 443 from nodes, VPC endpoints, management | 1025–65535 to nodes |
eks_nodes | EKS worker nodes | Self (all TCP), VPC (all TCP), cluster (1025–65535) | All to VPC |
eks_api | EKS API VPC Endpoint | 443 from VPC CIDR, nodes SG | — |
aurora | Aurora PostgreSQL | 5432 from private subnet CIDRs | All to VPC |
elasticache | ElastiCache Redis | 6380 from private subnet CIDRs | All to VPC |
vpc_endpoints | All Interface VPC Endpoints (shared) | 443 from VPC CIDR, management SG | — |
management_server | Bastion host | SSM Session Manager only — no inbound SSH | 443 to EKS API, Aurora, ElastiCache |
github_runners | CI/CD runners | None | 443 to EKS API SG, VPC Endpoints SG, and outbound via TGW |
DNS and Ingress
The platform domain resolves privately within the VPC via a Route 53 Private Hosted Zone. The VPC has DNS resolution and DNS hostnames enabled, and the hosted zone is associated at the VPC level. All internal service endpoints resolve to private IP addresses — there is no public DNS exposure for any workload account resource.
TLS certificates are managed by AWS Certificate Manager, which handles issuance, renewal, and rotation automatically via DNS validation against the delegated Route 53 zone. This eliminates outbound ACME requests to external certificate authorities, keeping the TLS lifecycle entirely within the AWS trust boundary and removing a dependency on internet egress for certificate renewal.
Inbound traffic from users on the customer's corporate network enters through Direct Connect and Transit Gateway into the VPC, where it terminates TLS at the internal Application Load Balancer using the ACM-managed certificate. The ALB forwards traffic to Kong API Gateway pods running in EKS, which handles API routing, rate limiting, and authentication forwarding to backend services. Kong is the single entry point for all application traffic — no service is directly exposed to the load balancer.
VPC Endpoints
All AWS service access from the Workload Account uses VPC Endpoints — 19 in total. Interface endpoints place ENIs in the Node subnets with a shared security group allowing HTTPS from the VPC CIDR. S3 uses a Gateway endpoint attached to all route tables. Private DNS is enabled on all Interface endpoints so that standard AWS SDK calls resolve to the private endpoint automatically.
Connectivity Account dependencies
The VPC does not operate in isolation — it depends on the Connectivity Account for all external connectivity:
Dependency | How it's resolved | What it enables |
|---|---|---|
Transit Gateway | RAM share from connectivity account; workload VPC creates a TGW attachment in the Node subnets | All outbound routing (internet egress and on-premises access) |
Route 53 (parent zone) | DNS zone delegation from connectivity account hosted zone to workload account hosted zone | Public DNS resolution of the platform domain to the internal ALB |
ACM (TLS certificates) | Certificates provisioned in the workload account; DNS-01 validation via the delegated Route 53 zone | TLS termination on the ALB |
Network Firewall | Connectivity account inspects all traffic transiting to/from the workload VPC | Egress filtering and compliance |
NAT Gateway | Connectivity account provides internet breakout after firewall inspection | Internet egress for SaaS APIs, registries, identity federation |
Direct Connect | Connectivity account terminates the private link to customer on-premises | User access, on-premises data source access |
Network Firewall egress rules
All outbound internet traffic from the Workload Account passes through the Connectivity Account's Network Firewall. The following destinations must be allowed for the platform to operate:
Category | Source Workload | Destinations | Purpose |
|---|---|---|---|
Container registries | ECR pull-through cache | docker.io, registry-1.docker.io, quay.io, *.azurecr.io | Upstream image fetches on cache miss |
GitOps | ArgoCD | github.com, *.githubusercontent.com | Helm chart and application manifest sync |
Identity federation | Zitadel | login.microsoftonline.com, graph.microsoft.com (or customer IdP endpoints) | SAML/OIDC federation with customer identity provider |
SaaS data sources | MCP connectors | Customer-specific (e.g. *.sharepoint.com) | Data integration with SaaS APIs |
All rules are outbound HTTPS (443) only. No inbound internet rules are required — inbound user traffic arrives via Direct Connect and Transit Gateway, not from the internet. Customer-specific SaaS domains are added during the Foundation phase based on the data integration scope.
Data and Integration
The platform has seven external integration boundaries. Each has a distinct direction, authentication model, and network path.
Boundary | Direction | Authentication | Network Path |
|---|---|---|---|
MCP Hub and Connectors | Outbound to SaaS APIs and on-premises sources; inbound from external MCP clients | OAuth2 per connector; OAuth2 with PKCE for Hub clients | TGW internet egress for SaaS; Direct Connect for on-premises; Kong inbound for Hub |
SharePoint and document connectors | Outbound pull + inbound webhook | Azure AD app-only OAuth2 | TGW internet egress + Kong inbound |
Zitadel identity federation | Browser redirects + pod-to-IdP callbacks + SCIM provisioning | SAML or OIDC; SCIM bearer token | Kong inbound + TGW internet egress |
LiteLLM (LLM Proxy) | Outbound inference and embedding requests | OIDC or API key (provider-dependent) | VPC Endpoint (private — no internet) |
Ingestion Pipeline (Textract) | Outbound document text extraction | Pod Identity (IAM role) | VPC Endpoint (private — no internet) |
Public API and Unique SDK | Inbound | JWT bearer (Zitadel) or API key | Kong — same ingress as web UI |
Apps (Webhooks) | Outbound event notifications | HMAC-SHA256 signed payload | Internet egress or Direct Connect, depending on endpoint address |
MCP Hub and Connectors
The MCP Hub is a gateway that aggregates tools from multiple downstream MCP connectors into a single OAuth-protected endpoint. External MCP clients — such as Claude Desktop or custom integrations — connect to the Hub rather than to individual connectors. The Hub brokers authentication via Zitadel (OAuth2 with PKCE), namespaces tools by connector, and enforces per-virtual-server access control. It runs as its own deployment, routed through Kong.
Downstream connectors run as individual pods, each integrating with a specific data source (SaaS API or on-premises system). Connectors authenticate to their target systems using credentials provided during the Foundation phase. Data flow is synchronous: tool calls route through the Hub to the appropriate connector, which fetches from the target API and returns the result. Document connectors additionally push content into the ingestion pipeline.
SharePoint and Document Connectors
For the purpose of explaining the connectors the SharePoint Connector is used as a demonstrative example:
SharePoint integration combines scheduled sync with real-time change notifications. A scheduled job polls SharePoint via the Microsoft Graph API and uses change detection to re-ingest only modified or new content. An inbound webhook listener receives real-time notifications from Microsoft Graph, triggering incremental sync for affected items. Both paths feed into the ingestion pipeline, which extracts text, generates embeddings, and stores results in the vector database. SharePoint access control lists are mapped to platform scopes, preserving document-level permissions.
The customer provides an Azure AD app registration with the required Graph API permissions, the tenant ID, and the SharePoint site IDs to sync.
Zitadel Identity Federation
Zitadel is the platform's identity provider, federating with the customer's IdP via SAML or OIDC. Login traffic is browser-mediated — redirects flow between the user's browser, Zitadel, and the customer IdP without traversing the platform network. Zitadel makes pod-to-IdP calls only for token validation and user info retrieval, exiting via TGW internet egress.
User provisioning follows a SCIM-first model: the SCIM connector pre-creates users, and Zitadel links them on first login. Group claims from the IdP drive scope-based access control.
The customer registers Unique as an application in their IdP, provides federation metadata, maps a groups claim, and optionally configures a SCIM client pointing to the Zitadel SCIM endpoint.
LiteLLM (LLM Proxy)
LiteLLM is the platform's LLM gateway, routing all inference and embedding requests to the configured provider — Amazon Bedrock, Azure OpenAI, or a self-hosted vLLM instance. It connects to providers via VPC Endpoint, keeping model traffic on private network paths with no internet exposure.
Authentication is provider-dependent: Bedrock uses Pod Identity (no stored credentials), while Azure OpenAI and other providers use OIDC or API key credentials managed through Secrets Manager. LiteLLM abstracts provider differences so the application layer uses a single interface regardless of the backend.
The customer provides model access grants or endpoint details during the Foundation phase. Provider selection is configuration-driven and can be changed without application changes.
Ingestion Pipeline (Textract)
The ingestion pipeline processes uploaded and synced documents through text extraction, chunking, and embedding generation. AWS Textract handles text extraction from scanned documents, PDFs, and images. Ingestion workers connect to Textract via VPC Endpoint, keeping all document processing on the private network.
Pod Identity provides authentication — two IAM role associations cover the document processor and the ingestion worker, scoped to Textract, the S3 data bucket, and Bedrock inference for embedding generation. Extracted and chunked text flows into the Qdrant vector store for retrieval.
No customer configuration is required for Textract — it is consumed as a managed AWS service within the deployment region.
Public API and Unique SDK
The platform exposes a REST API under the same Kong ingress as the web UI. API consumers authenticate via JWT bearer token (issued by Zitadel) or API key. Tokens are scoped by type (user, service, or integration), and multi-tenancy is enforced via a company ID header. Rate limiting applies at the Kong layer.
TypeScript and Python SDKs provide programmatic access. The API supports capabilities beyond the web UI including file upload with ingestion triggers and OAuth2 token exchange for third-party integrations.
Apps (Webhooks)
The platform delivers outbound event notifications to customer-provided HTTPS endpoints. Payloads are signed with HMAC-SHA256, and verification helpers are included in the SDKs. Delivery uses exponential backoff retry for resilience.
The network path depends on the endpoint address — public endpoints route through TGW internet egress, while internal endpoints route via Direct Connect. The customer provides an endpoint URL and a shared secret; subscriptions are managed via the API.
Availability, Capacity and Costs
The sizing and availability model follows AWS Well-Architected reliability and cost optimisation pillars:
Multi-AZ by default — all stateful services deploy across Availability Zones with automatic failover. Single-AZ is available as a cost optimisation lever but removes resilience guarantees.
Right-size during Foundation — the reference baseline provides a starting point. Production sizing is adjusted based on user count, document volume, and query concurrency during the Foundation phase.
Separate steady and burst capacity — persistent workloads run on a fixed node pool. Ingestion and batch workloads scale independently on a dedicated burst pool, avoiding contention.
Availability model
The availability model follows the AWS Well-Architected Reliability Pillar, specifically the design principles of automatic recovery from failure, horizontal scaling, and eliminating single points of failure. The platform uses multi-AZ deployments as the primary resilience mechanism, aligned with the AWS Resilience Lifecycle Framework's guidance on fault isolation boundaries at the Availability Zone level.
The platform deploys across three Availability Zones within a single AWS region. All stateful services are multi-AZ with automatic failover. Stateless compute recovers through Kubernetes rescheduling across surviving nodes. There is no cross-region replication by default — the single-region, multi-AZ model provides the resilience target for the reference architecture. Cross-region active-passive or pilot-light patterns can be added if the client's recovery requirements demand it.
Layer | AZ Strategy | Failure Behaviour |
|---|---|---|
EKS control plane | Multi-AZ, AWS-managed | Automatic failover across 3 AZs |
EKS node groups | Nodes distributed across 3 AZs | Kubernetes reschedules pods to surviving nodes |
Aurora PostgreSQL | Writer + reader across 2 AZs | Auto-failover; cluster endpoint unchanged |
ElastiCache Redis | Primary + replica, multi-AZ | Auto-failover to replica |
S3 | Multi-AZ by design | Eleven-nines durability |
EFS | Mount targets in each AZ | Remaining targets serve reads and writes |
ALB | Cross-zone load balancing | Traffic redistributes to healthy targets |
Capacity and performance
EKS compute is split into two managed node groups to isolate steady-state workloads from unpredictable burst demand. This separation prevents a large ingestion job from starving the chat or API services of resources, and allows each pool to be sized and scaled independently.
Steady pool runs all persistent workloads — application services, AI services, and platform services. Nodes are distributed across three Availability Zones for resilience. The pool is sized during Foundation based on the number of concurrent users, active integrations, and baseline query load. The steady pool size is set during Foundation and adjusted through planned capacity changes, keeping compute costs predictable.
Rapid pool handles burst workloads — document ingestion, batch embedding, and scheduled sync jobs. The pool starts at zero nodes and scales out on demand. KEDA scales pods based on queue depth and workload metrics, and Karpenter provisions nodes to match. When demand subsides, pods and nodes scale back down.
Every workload has explicit CPU and memory requests and limits. Kubernetes resource quotas prevent any single namespace from consuming more than its allocation. Pod disruption budgets are set on all critical services to maintain minimum replica counts during node drains, upgrades, and AZ failovers.
The reference architecture includes Karpenter for automatic node scaling and consolidation of the steady pool.
Zero-Downtime Maintenance
AWS managed services require periodic maintenance — engine patches, minor version upgrades, and security fixes. The multi-AZ architecture ensures these maintenance events do not cause application downtime.
Aurora PostgreSQL applies patches to the reader instance first, promotes it, then patches the old writer. The cluster endpoint follows the promotion automatically, so application connections are uninterrupted. ElastiCache Redis follows the same pattern — the replica is patched, promoted, and the old primary is patched in turn. In both cases, failover completes in seconds and is transparent to the application.
EKS control plane upgrades are managed by AWS and are rolling by design — API server availability is maintained throughout. Node group upgrades are coordinated by Unique: a new node group is launched with the updated AMI, workloads are drained from the old nodes, and the old group is terminated. Pod disruption budgets ensure minimum replica counts are maintained during the drain.
Maintenance windows for Aurora and ElastiCache are configured during the Foundation phase, typically scheduled during low-traffic hours. EKS node group upgrades are planned and executed by Unique as part of the regular release cycle, with timing agreed with the client.
The key design point: multi-AZ redundancy is not just for failure scenarios — it is what makes zero-downtime maintenance possible. Single-AZ deployments would require scheduled downtime for every patch cycle.
SLA boundaries
The reference architecture is based on Unique AI engineering best practices and lessons learned operating the platform across multiple customer environments, designed to maintain 99.5% availability (a figure that is indicative, at the time of writing, and provided for reference only; binding commitments are defined per engagement in the service agreement).
Unique does not commit to a composite SLA for the self-hosted platform. The deployment runs in the client's AWS account, and availability depends on infrastructure choices made by the client — AZ configuration, Direct Connect resilience, Transit Gateway redundancy — as much as on Unique's application layer.
What Unique provides: recommended SLOs for the application tier as defined on the Target Operating Model page, monitoring and alerting to detect degradation, and L3 incident response for platform-level issues. The underlying AWS service SLAs apply to the client's account and are between the client and AWS. Unique's observability stack surfaces breaches against both the recommended SLOs and AWS service health indicators.
Dependencies and Scope
This section defines what must exist before deployment begins and where the responsibility boundary sits between Unique and the client. The prerequisites follow the AWS shared responsibility model extended to the platform layer — the client owns the landing zone and network perimeter, Unique owns everything inside the workload account.
Prerequisites
These are the client-side dependencies that must be in place before Unique's infrastructure-as-code can execute. Each prerequisite is owned by the client's platform or cloud team and blocks a specific phase of the deployment.
# | Prerequisite | What is needed | What it blocks |
|---|---|---|---|
1 | AWS Organisation | Control Tower enrolled, SCPs configured for workload accounts | All deployment phases |
2 | Workload Account | Provisioned and enrolled in the organisation, with Terraform execution permissions | Infrastructure bootstrap |
3 | Connectivity Account | Transit Gateway, Direct Connect, Network Firewall, NAT Gateway operational | VPC connectivity and all external access |
4 | Network address space | Non-overlapping CIDR allocation for the workload VPC, minimum /19 | VPC provisioning |
5 | DNS delegation | Parent zone delegation from the connectivity account to the workload account for the platform domain | Route 53, ACM certificate validation, platform access |
6 | Identity provider | SAML or OIDC capable IdP with the ability to register Unique as an application and expose a groups claim | User authentication and authorisation |
7 | Bedrock model access | Model access granted for the required inference and embedding models in the target region | AI services |
8 | Direct Connect or VPN | Private connectivity from the customer's corporate network to the workload VPC via the connectivity account | User access, on-premises data source access |
The Pre-Installation Checklist page provides the detailed configuration values, naming conventions, and validation steps for each prerequisite.
Governance considerations
Enterprise AWS environments typically enforce governance controls that can affect the deployment. These should be reviewed during the Evaluate phase and resolved before Foundation begins.
Service Control Policies are the most common source of deployment friction. The Unique platform provisions resources across a broad set of AWS services, and the workload account must be enrolled in an OU whose SCPs permit them. Unique provides a full list of required IAM actions during the Evaluate phase so the client's cloud team can validate SCP compatibility before deployment begins.
Beyond permitting the required services, Unique recommends the following SCPs on the workload account to enforce the architecture's security posture. These align with AWS Security Reference Architecture guardrails and Control Tower best practices.
Network and egress controls
SCP | What it enforces | Why it matters |
|---|---|---|
Deny Internet Gateway creation | Prevents any resource from obtaining direct internet access | All egress must route through the connectivity account's inspection chain |
Deny NAT Gateway creation | Prevents circumventing centralised egress | Ensures all outbound traffic is inspected by Network Firewall |
Deny VPC peering to non-org accounts | Prevents peering to external or unknown accounts | Only the TGW model should handle inter-VPC routing |
Deny Direct Connect or VPN creation | Prevents workload accounts from establishing their own circuits | Connectivity is centralised in the hub account |
Deny non-VPC-endpoint access to PaaS services | Requires VPC endpoint conditions on service API calls | Prevents data services from being accessed over the public internet |
Data protection and residency
SCP | What it enforces | Why it matters |
|---|---|---|
Deny public S3 buckets | Blocks public access settings on all buckets | All S3 access is via VPC Gateway Endpoint |
Deny unencrypted storage | Requires KMS encryption on EBS, S3, RDS, and EFS | Enforces encryption at rest across all data stores |
Restrict regions | Limits resource creation to the approved deployment region | Prevents resource provisioning outside the data residency boundary |
Deny S3 cross-region replication to non-approved regions | Prevents data escaping the residency boundary via replication | Critical for GDPR and data sovereignty compliance |
Deny EBS snapshot sharing outside org | Prevents exfiltration of block storage snapshots to external accounts | Protects data at the storage layer |
Deny public ECR repositories | Workload accounts should only use private registries | Prevents container image exposure |
Identity and privilege controls
SCP | What it enforces | Why it matters |
|---|---|---|
Deny IAM user creation | Prevents long-lived static credentials | All human access via IAM Identity Center, all workload access via Pod Identity |
Deny root user actions | Blocks all API calls as the root user except break-glass scenarios | Prevents unlogged privileged access |
Deny leaving the organisation | Prevents account detachment, which would strip all SCPs | Protects the governance boundary |
Deny modification of protected IAM roles | Protects audit, break-glass, and org-management roles | Prevents local admins from escalating beyond their scope |
Audit trail protection
SCP | What it enforces | Why it matters |
|---|---|---|
Deny CloudTrail modification or deletion | Prevents stopping, deleting, or modifying audit trails | Preserves audit integrity for compliance |
Deny GuardDuty disabling | Prevents threat detection from being turned off | Maintains runtime security monitoring |
Deny AWS Config rules deletion | Prevents tampering with compliance monitoring | Config is foundational to detective controls |
Deny CloudWatch log group deletion | Prevents destruction of operational and security logs | Protects observability and forensic evidence |
IAM Identity Center (AWS SSO) is the recommended mechanism for human access to the workload account. Unique's deployment engineers require federated access with sufficient permissions to execute Terraform plans and inspect resources. The client controls which permission sets are granted and can scope access to specific roles and session durations. No long-lived IAM user credentials are required for deployment or operations.
Tag policies enforced at the organisation level must be accommodated in the infrastructure-as-code. Unique's Terraform modules support configurable tag maps — mandatory tags such as cost centre, environment, owner, and application are injected at the module level. Tag requirements should be provided during Foundation so they are applied from the first deployment.
AWS Config rules and conformance packs may flag resources that deviate from the organisation's baseline. Common findings include security groups with broad CIDR ranges, S3 buckets without object lock, or KMS keys without automatic rotation. Unique's reference architecture addresses most CIS and Well-Architected benchmarks by default, but organisation-specific Config rules should be reviewed during Foundation to resolve any conflicts before they generate compliance findings.
Service quotas should be validated before deployment. The platform consumes a significant number of VPC endpoints, ENIs, security groups, and EKS-managed resources. Default AWS quotas are sufficient for most deployments, but accounts with existing workloads or restrictive custom quotas may need increases. Unique provides a service quota checklist as part of the Pre-Installation Checklist.
Scope boundary
Unique's infrastructure-as-code provisions everything inside the workload account: VPC, subnets, security groups, EKS cluster, data services, KMS keys, Secrets Manager entries, load balancers, all Kubernetes workloads, and the observability stack. The Terraform codebase is structured into layered modules that execute sequentially, supporting split execution — the client's platform team can run the infrastructure layers while Unique manages the application layers, or Unique can run the full stack. The engagement model is agreed during Foundation.
The client provisions everything outside the workload account: AWS Organisation, account enrolment, network connectivity (Transit Gateway, Direct Connect, Network Firewall, NAT Gateway), CIDR allocation, DNS delegation, identity provider, and Bedrock model access.
The operational responsibilities — who responds to incidents, who approves maintenance windows, how upgrades are coordinated — are defined on the Target Operating Model page.
Adaptive Architecture
The Unique AI platform adapts to your existing infrastructure strategy and enterprise architecture. Whether your organisation runs a mature multi-account landing zone with centralised network services, or needs a lightweight single-account deployment for evaluation, the same infrastructure-as-code adapts to your environment through configuration rather than custom engineering.
This flexibility is structured around three independent dimensions: AWS account topology (how accounts and network services are organised), network access model (how users and external consumers reach the platform), and data service hosting (managed PaaS or cloud-native on EKS). These dimensions are orthogonal — any combination produces a valid deployment profile that matches your enterprise architecture without compromising the platform's security posture or operational model.
The reference architecture described on this page follows the most common enterprise profile: hub-and-spoke accounts, internal-only access via Direct Connect, and PaaS data services. The sections below summarise what changes when your requirements differ.
AWS account topologies
The AWS account topology determines the account structure and where network, governance, and shared services live relative to the workload.
Topology | Accounts | Egress Path | Network Inspection | When to use |
|---|---|---|---|---|
Hub-and-spoke (reference) | Connectivity + Workload | TGW → Network Firewall → NAT (connectivity account) | Centralised Network Firewall | Standard enterprise landing zone with centralised network perimeter |
Hub-and-spoke with shared services | Connectivity + Shared Services + Workload | Same as hub-and-spoke | Same as hub-and-spoke | Enterprise with centralised ECR, Route 53 parent zones, or shared logging in a dedicated account |
Standalone | Single account | NAT Gateway in the workload account directly | Security groups and NACLs only | Proof-of-concept, development, or pre-landing-zone evaluation |
Hub-and-spoke is the standard model documented throughout this page. The connectivity account owns the network perimeter, and the workload account owns everything inside the VPC. Topology selection is configuration-driven: providing Transit Gateway and connectivity account identifiers activates hub-and-spoke; omitting them produces standalone.
Hub-and-spoke with shared services extends the standard model by placing shared infrastructure — such as a centralised ECR registry, Route 53 parent zones, or organisation-wide logging — in a dedicated shared services account. The workload account references these shared resources via cross-account identifiers. This model aligns with the AWS multi-account strategy for organisations that centralise common services rather than replicating them per workload.
Standalone removes the connectivity account dependency entirely. A single account hosts both the platform and its own internet egress via NAT Gateway. There is no centralised network inspection, no separation of concerns between network and workload, and the security posture is significantly reduced. It is intended as a fast path to get the platform running for evaluation or development, with the expectation of migrating to hub-and-spoke for production.
Network access models
The network access model determines how users and external consumers reach the platform. It is independent of account topology — any access model can be combined with any account topology.
Access Model | Ingress Path | Additional Services | When to use |
|---|---|---|---|
Internal (reference) | Direct Connect → TGW → internal ALB | None | All users are on the corporate network or VPN |
CloudFront | CloudFront → public ALB | CloudFront distribution, AWS WAF, public ALB | All users access via internet — no Direct Connect requirement |
Dual | Internal path + CloudFront path | CloudFront distribution, AWS WAF, public ALB, dedicated WebSocket ALB | Mix of internal corporate users and external users (partners, field staff) |
Internal is the standard model documented throughout this page. All user traffic arrives via Direct Connect through Transit Gateway. No public DNS records, no public ALB, no internet-facing endpoints.
CloudFront adds a public ingress path via a CloudFront distribution with AWS WAF. This model is required when users access the platform from the internet — either because there is no Direct Connect, or because the user population includes external parties. The workload account internals are unchanged; Kong routes traffic identically regardless of origin.
Dual combines both paths. Internal users access via Direct Connect for lowest latency and network locality; external users access via CloudFront. A dedicated public WebSocket ALB handles real-time connections through CloudFront. WAF rules on the public path and Network Firewall on egress provide defence in depth.
The dual and CloudFront models do not change the workload account internals — the same EKS cluster, data services, and integration boundaries serve all paths. The additional attack surface introduced by public ingress is mitigated by WAF rules and CloudFront origin access controls.
Data service hosting
The data service hosting model determines whether stateful services run as AWS-managed PaaS or as cloud-native services on the EKS cluster. This choice affects operational responsibility, cost structure, and how the client's platform team interacts with the data layer.
Hosting Model | Database | Cache | Search | When to use |
|---|---|---|---|---|
PaaS (reference) | Aurora PostgreSQL | ElastiCache Redis | OpenSearch Service | Organisation requires AWS-managed patching, backups, and failover. Minimises operational burden on the platform team. |
Cloud-native | PostgreSQL on EKS (e.g. CloudNativePG) | Redis on EKS | Qdrant + ElasticSearch on EKS | Organisation prefers infrastructure-as-code control over all components, wants to avoid PaaS service limits, or has restrictions on managed service usage. |
PaaS is the standard model documented throughout this page. Aurora, ElastiCache, and OpenSearch run as AWS-managed services in isolated subnets, accessed via VPC Endpoints. AWS handles engine patching, automated backups, multi-AZ failover, and scaling. This model offers the lowest operational overhead and is recommended for most deployments.
Cloud-native replaces the managed services with Kubernetes-native operators running on the EKS cluster. The database, cache, and search services are deployed and managed through the same infrastructure-as-code and GitOps pipeline as the application workloads. This model gives the platform team full control over versioning, configuration, and upgrade timing, but shifts operational responsibility for backups, failover, and patching to the EKS layer. Compute and storage costs move from PaaS pricing to EKS node and EBS volume costs.
The choice does not affect the application layer — connection strings and endpoints are abstracted, so the platform workloads are agnostic to the hosting model. The decision is typically driven by the client's cloud governance policies and operational preferences rather than technical constraints.