← All status

Serving

Serving

AWS cloud-base for every Quantapix surface. Four CloudFront-fronted static sites, one t4g.small EC2 fronting two FastAPI apps, GitHub OIDC for CI, KMS-CMK-backed SecureStrings.

version da6e34e1
source serving/PLAN.md@da6e34e1
built 2026-05-04T19:11:03.396Z
NOT YET LIVE

Static sites — R53 → CloudFront → S3 (OAC)

One stamp per site. Identical in shape; differs only in bucket name, hostname, ACM ARN, Route 53 zone. Today two stamps; four after Qnarre + Qresev launch.

Static sites — R53 → CloudFront → S3 (OAC) One stamp per site. Identical in shape; differs only in bucket name, hostname, ACM ARN, Route 53 zone. Today two stamps; four after Qnarre + Qresev launch. TLS Browser ikifor.dev Route 53 alias record CloudFront PriceClass_100 CloudFront Fn URI rewrite S3 (OAC) origin access ctl static dist/ astro build ACM cert us-east-1

App APIs — R53 → EIP → EC2 (Caddy + dual FastAPI)

Browsers reach api.qnarre.* + api.qresev.* over a direct A→EIP record. Bypasses CloudFront because SSE long-poll connections do not pass cleanly through it.

App APIs — R53 → EIP → EC2 (Caddy + dual FastAPI) Browsers reach api.qnarre.* + api.qresev.* over a direct A→EIP record. Bypasses CloudFront because SSE long-poll connections do not pass cleanly through it. qnarre vhost qresev vhost AssumeRole Browser SSE long-poll Route 53 A api.qnarre / qresev Elastic IP static EC2 t4g.small ARM, 8 GB gp3 Caddy Lets Encrypt uvicorn :8787 Qnarre FastAPI uvicorn :8788 Qresev FastAPI lake build subprocess qagents-app-role instance role

Identity — three IAM principals

Domain separation by design: deploy user cannot SSH or modify EC2; EC2 role cannot deploy site buckets; OIDC role mirrors deploy with short-lived federated tokens.

Identity — three IAM principals Domain separation by design: deploy user cannot SSH or modify EC2; EC2 role cannot deploy site buckets; OIDC role mirrors deploy with short-lived federated tokens. STS OIDC (Phase 2) AssumeRole s3:* s3:* ikifor (laptop) aws-vault → STS GitHub Actions OIDC EC2 instance sts:AssumeRole qagents-deploy IAM user qagents-deploy-ci IAM role · OIDC qagents-app-role IAM role · EC2 s3:* on 4 sites site buckets s3:* on artifacts qagents-artifacts cloudfront:Invalidate 4 distributions ssm:GetParameter /qagents/* kms:Decrypt alias/qagents-cmk logs:* /aws/qagents/* CloudWatch Logs Deny ec2:* explicit Deny iam:* / r53:* explicit

Service inventory — what runs in v0.1

Eighteen services in v0.1; five deferred. Total run rate ~$20–25/mo. Lions share is EC2 + EBS; everything else is pennies.

Service inventory — what runs in v0.1 Eighteen services in v0.1; five deferred. Total run rate ~$20–25/mo. Lions share is EC2 + EBS; everything else is pennies. S3 ×4 sites + artifacts CloudFront ×4 distributions CF Functions URI rewrite ACM us-east-1 certs Route 53 2 zones IAM 3 principals + OIDC EC2 1× t4g.small Elastic IP static Default VPC no NAT Security Group 443 + SSM only SSM Session Mgr no SSH SSM Param Store KMS-encrypted KMS alias/qagents-cmk CloudWatch Logs 7-day retention CW Alarms + SNS CPU/disk/spend AWS Budgets $50/mo · 80/100/120 GuardDuty account-wide Cost Explorer free ALB later Auto Scaling Group later AWS Backup later AWS WAF later AWS Config later

Security baseline — 23 controls

8 enforce, 12 adopt, 3 defer. Modern AWS controls (OAC, OIDC, IMDSv2, GuardDuty, KMS CMK, SSM Session Mgr) — not OAI, not SSH, not plaintext keys.

Security baseline — 23 controls 8 enforce, 12 adopt, 3 defer. Modern AWS controls (OAC, OIDC, IMDSv2, GuardDuty, KMS CMK, SSM Session Mgr) — not OAI, not SSH, not plaintext keys. No long-lived keys aws-vault + Keychain MFA on STS aws:MFAPresent Permission boundary qagents-deploy-boundary GitHub OIDC IdentityStack · phase 6 CloudFront OAC not OAI ACM certs no self-signed Security headers shared CDK policy HSTS preload max-age=63072000 CSP per-site factory S3 BlockPublicAccess bucket + account S3 SSE SSE-KMS on artifacts EBS encryption CMK · account default No SSH SSM Session Mgr KMS CMK alias/qagents-cmk CloudTrail org-wide KMS · validation on GuardDuty account-wide AWS Budgets $50/mo Alternate contacts security + billing IMDSv2 only HttpTokens=required EC2 termination prot StaticSiteStack VPC Flow Logs defer WAF defer AWS Config defer

Metrics

siteCount
4
ec2Count
0
distributionCount
4
runRateUsdPerMo
20–25