Talmazapublicv2

Talmaza (talmaza.com, api.talmaza.com) runs behind Cloudflare: TLS, CDN, WAF, DDoS, bots, rate limits, Access. Traffic enters by a Cloudflare Tunnel dialled from a private AKS cluster (Azure VNet, no public IP) with Azure SQL, Redis, Cosmos DB, storage, AI, Key Vault, Entra ID.

41 components19 edges16 groups9 views0 clones0 exports
talmaza Cloudflare Edge · Point of presence · cloudflare-edge Cloudflare Edge Microsoft Azure · Region · microsoft-azure Microsoft Azure VNet · VPC · vnet VNet AKS cluster (private API server) · System · aks-cluster AKS cluster (private API server) ns: cloudflared — Deployment, 2+ replicas · Namespace · ns-cloudflared ns: cloudflared — Deployment, 2+ replicas ns: frontend · Namespace · ns-frontend ns: frontend ns: api · Namespace · ns-api ns: api Secretless Layer · System · system Secretless Layer Egress · System · system-2 Egress Storage · System · system-3 Storage Monitoring & Alerts Tools · System · system-6 Monitoring & Alerts Tools DB & Cache · System · system-4 DB & Cache Secret Store · System · system-7 Secret Store Background Jobs & Triggers · System · system-8 Background Jobs & Triggers AI · System · system-5 AI Cloudflare Tunnel talmaza.com api.talmaza.com Secret Store Applicant · User device · user-device Applicant User device Visitor · User device · user-device Visitor User device SSL / TLS termination (Full strict) · Cloudflare Universal SSL · cloudflare-ssl-tls SSL / TLS termination (Full strict) Cloudflare Universal SSL CDN · Cloudflare CDN · cloudflare-cdn CDN Cloudflare CDN WAF · Cloudflare WAF · cloudflare-waf WAF Cloudflare WAF DDoS · Cloudflare DDoS Protection · cloudflare-ddos-protection DDoS Cloudflare DDoS Protection Bot Detection · Cloudflare Bot Management · cloudflare-bot-management Bot Detection Cloudflare Bot Management Rate Limiting · Cloudflare Rate Limiting · cloudflare-rate-limiting Rate Limiting Cloudflare Rate Limiting SSO - Admin Apps · Cloudflare Access · cloudflare-access SSO - Admin Apps Cloudflare Access NSG · Network Security Group · azure-network-security-group NSG Network Security Group Azure Key Vault · Key management · azure-key-vault Azure Key Vault Key management Deployment · Application server · k8s-deployment Deployment Application server ×2 cloudflared · Cloudflare Tunnel · cloudflare-tunnel cloudflared Cloudflare Tunnel cloudflared · Cloudflare Tunnel · cloudflare-tunnel cloudflared Cloudflare Tunnel Service ClusterIP · Service · k8s-service Service ClusterIP Service web pod · Pod · k8s-pod web pod Pod web pod · Pod · k8s-pod web pod Pod Service ClusterIP · Service · k8s-service Service ClusterIP Service api pod · Pod · k8s-pod api pod Pod api pod · Pod · k8s-pod api pod Pod Entra ID · Microsoft Entra ID · azure-entra-id Entra ID Microsoft Entra ID Managed Identity · Managed identities for Azure resources · azure-managed-identity Managed Identity Managed identities for Azure resources Azure Monitor · azure-monitor Azure Monitor Azure Monitor Log Analytics · Log Analytics workspace · azure-log-analytics Log Analytics Log Analytics workspace Azure Alerts · Azure Monitor · azure-monitor Azure Alerts Azure Monitor Communication Service · Azure Communication Services · azure-communication-services ​ Communication Service Azure Communication Services Blob Storage · Azure Blob Storage · azure-blob-storage Blob Storage Azure Blob Storage File Storage · Azure Files · azure-files File Storage Azure Files Table Storage · Azure Table Storage · azure-table-storage Table Storage Azure Table Storage Queue Storage · Azure Queue Storage · azure-queue-storage Queue Storage Azure Queue Storage Azure SQL · Azure SQL Database · azure-sql Azure SQL Azure SQL Database Redis · Azure Cache for Redis · azure-cache-for-redis Redis Azure Cache for Redis CosmosDB · Azure Cosmos DB · azure-cosmos-db CosmosDB Azure Cosmos DB Key Vault App Secrets · Azure Key Vault · azure-key-vault Key Vault App Secrets Azure Key Vault Azure AI Foundary · Microsoft Foundry · azure-ai-foundry Azure AI Foundary Microsoft Foundry AI Search · Azure AI Search · azure-ai-search AI Search Azure AI Search Azure OpenAI · Azure OpenAI in Foundry Models · azure-openai Azure OpenAI Azure OpenAI in Foundry Models Azure Container Registry · Container registry · azure-container-registry Azure Container Registry Container registry Azure NAT Gateway · NAT gateway · azure-nat-gateway Azure NAT Gateway NAT gateway Public IP address · Network fabric · azure-public-ip Public IP address Network fabric Azure Functions · Application server · azure-functions Azure Functions Application server
YAML 106 lines
# yaml-language-server: $schema=../../../schema/design.schema.json
# Imported 2026-09-24 from source/Talmaza - 02.drawio.html, the user's own draw.io diagram
# (HTML export; source/Talmaza - 02.drawio is the XML decoded from its data-mxgraph attribute).
# Decisions, all recorded in mapping.yaml and notes.md:
#   - Labels are the drawn text with line breaks joined by one space and runs of spaces collapsed.
#   - Six dashed sub-frames (Secretless Layer, Monitoring & Alerts Tools, Storage, DB & Cache,
#     AI, Secret Store) are visual clusters with no topology meaning; they are not groups. Their
#     members are nodes in the VNet they are drawn in.
#   - All sixteen drawn arrows end on a frame, not a box, at one end or both. Each such end is
#     attached to the box nearest the point where the arrow meets the frame, except where the
#     diagram's own text names the end ("dialed OUTBOUND by cloudflared"). Every choice is in
#     mapping.yaml.
#   - The Cloudflare Tunnel is a double-headed arrow, so two edges; protocol quic from its caption.
#   - The cloudflared -> web pod / api pod arrows carry hostnames, not a protocol; http is assumed
#     for the in-cluster hop.
#   - Duplicate boxes (two cloudflared pods, two web pods, two api pods, two Service ClusterIP)
#     are separate nodes, as drawn.
#   - "Azure Alerts" maps to azure-monitor: the inventory lists Alerts as a feature of Azure
#     Monitor, not a resource.
#   - "External Systems" is an empty frame in the source; kept as an empty trust-zone group.
schemaVersion: "1"
type: "design"
id: "talmaza"

groups:
  - { id: "cloudflare-edge", kind: "point-of-presence", label: "Cloudflare Edge" }
  - { id: "microsoft-azure", kind: "region", label: "Microsoft Azure" }
  - { id: "vnet", kind: "vpc", label: "VNet", parent: "microsoft-azure" }
  - { id: "aks-cluster", kind: "system", label: "AKS cluster (private API server)", parent: "vnet" }
  - { id: "ns-cloudflared", kind: "namespace", label: "ns: cloudflared — Deployment, 2+ replicas", parent: "aks-cluster" }
  - { id: "ns-frontend", kind: "namespace", label: "ns: frontend", parent: "aks-cluster" }
  - { id: "ns-api", kind: "namespace", label: "ns: api", parent: "aks-cluster" }
  - { id: "external-systems", kind: "trust-zone", label: "External Systems" }
  - { id: "system", kind: "system", parent: "vnet", label: "Secretless Layer" }
  - { id: "system-2", kind: "system", parent: "vnet", label: "Egress" }
  - { id: "system-3", kind: "system", parent: "vnet", label: "Storage" }
  - { id: "system-6", kind: "system", parent: "vnet", label: "Monitoring & Alerts Tools" }
  - { id: "system-4", kind: "system", parent: "vnet", label: "DB & Cache" }
  - { id: "system-7", kind: "system", parent: "vnet", label: "Secret Store" }
  - { id: "system-8", kind: "system", parent: "vnet", label: "Background Jobs & Triggers" }
  - { id: "system-5", kind: "system", parent: "vnet", label: "AI" }

nodes:
  - { id: "applicant", component: "user-device", label: "Applicant" }
  - { id: "visitor", component: "user-device", label: "Visitor" }
  - { id: "ssl-tls-termination", component: "cloudflare-ssl-tls", label: "SSL / TLS termination (Full strict)", group: "cloudflare-edge", props: { encryptionMode: "full-strict" } }
  - { id: "cdn", component: "cloudflare-cdn", label: "CDN", group: "cloudflare-edge" }
  - { id: "waf", component: "cloudflare-waf", label: "WAF", group: "cloudflare-edge" }
  - { id: "ddos-protection", component: "cloudflare-ddos-protection", label: "DDoS", group: "cloudflare-edge" }
  - { id: "bot-detection", component: "cloudflare-bot-management", label: "Bot Detection", group: "cloudflare-edge" }
  - { id: "rate-limiting", component: "cloudflare-rate-limiting", label: "Rate Limiting", group: "cloudflare-edge" }
  - { id: "access", component: "cloudflare-access", label: "SSO - Admin Apps", group: "cloudflare-edge" }
  - { id: "nsg", component: "azure-network-security-group", label: "NSG", group: "vnet", props: { defaultAction: "deny" } }
  - { id: "key-vault-tunnel-token", component: "azure-key-vault", group: "vnet" }
  - { id: "deployment", component: "k8s-deployment", group: "ns-cloudflared", props: { instances: 2 } }
  - { id: "cloudflared", component: "cloudflare-tunnel", group: "ns-cloudflared", label: "cloudflared" }
  - { id: "cloudflared-2", component: "cloudflare-tunnel", label: "cloudflared", group: "ns-cloudflared" }
  - { id: "service-clusterip", component: "k8s-service", label: "Service ClusterIP", group: "ns-frontend", props: { serviceType: "cluster-ip" } }
  - { id: "web-pod", component: "k8s-pod", label: "web pod", group: "ns-frontend" }
  - { id: "web-pod-2", component: "k8s-pod", label: "web pod", group: "ns-frontend" }
  - { id: "service-clusterip-2", component: "k8s-service", label: "Service ClusterIP", group: "ns-api", props: { serviceType: "cluster-ip" } }
  - { id: "api-pod", component: "k8s-pod", label: "api pod", group: "ns-api" }
  - { id: "api-pod-2", component: "k8s-pod", label: "api pod", group: "ns-api" }
  - { id: "entra-id", component: "azure-entra-id", label: "Entra ID", group: "system" }
  - { id: "managed-identity", component: "azure-managed-identity", label: "Managed Identity", group: "system" }
  - { id: "azure-monitor", component: "azure-monitor", label: "Azure Monitor", group: "system-6" }
  - { id: "log-analytics", component: "azure-log-analytics", label: "Log Analytics", group: "system-6" }
  - { id: "azure-alerts", component: "azure-monitor", label: "Azure Alerts", group: "system-6" }
  - { id: "communication-service", component: "azure-communication-services", label: "Communication Service", group: "system-6" }
  - { id: "blob-storage", component: "azure-blob-storage", label: "Blob Storage", group: "system-3" }
  - { id: "file-storage", component: "azure-files", label: "File Storage", group: "system-3" }
  - { id: "table-storage", component: "azure-table-storage", label: "Table Storage", group: "system-3" }
  - { id: "queue-storage", component: "azure-queue-storage", label: "Queue Storage", group: "system-3" }
  - { id: "azure-sql", component: "azure-sql", label: "Azure SQL", group: "system-4" }
  - { id: "redis", component: "azure-cache-for-redis", label: "Redis", group: "system-4" }
  - { id: "cosmosdb", component: "azure-cosmos-db", label: "CosmosDB", group: "system-4" }
  - { id: "key-vault-app-secrets", component: "azure-key-vault", label: "Key Vault App Secrets", group: "system-7" }
  - { id: "azure-ai-foundary", component: "azure-ai-foundry", label: "Azure AI Foundary", group: "system-5" }
  - { id: "ai-search", component: "azure-ai-search", label: "AI Search", group: "system-5" }
  - { id: "azure-openai", component: "azure-openai", label: "Azure OpenAI", group: "system-5" }
  - { id: "azure-container-registry", component: "azure-container-registry", group: "vnet" }
  - { id: "azure-nat-gateway", component: "azure-nat-gateway", group: "system-2" }
  - { id: "azure-public-ip", component: "azure-public-ip", group: "system-2" }
  - { id: "azure-functions", component: "azure-functions", group: "system-8" }

edges:
  - { from: "applicant", to: "cloudflare-edge", protocol: "https", mode: "sync" }
  - { from: "visitor", to: "cloudflare-edge", protocol: "https", mode: "sync" }
  - { from: "cloudflare-edge", to: "aks-cluster", protocol: "quic", mode: "sync", label: "Cloudflare Tunnel" }
  - { from: "ns-cloudflared", to: "ns-frontend", protocol: "http", mode: "sync", label: "talmaza.com" }
  - { from: "ns-cloudflared", to: "ns-api", protocol: "http", mode: "sync", label: "api.talmaza.com" }
  - { from: "ns-cloudflared", to: "key-vault-tunnel-token", protocol: "https", mode: "sync", label: "Secret Store" }
  - { from: "aks-cluster", to: "system", protocol: "https", mode: "sync" }
  - { from: "azure-container-registry", to: "aks-cluster", protocol: "http", mode: "sync" }
  - { from: "system", to: "system-3", protocol: "http", mode: "sync" }
  - { from: "system", to: "system-7", protocol: "http", mode: "sync" }
  - { from: "system", to: "system-8", protocol: "http", mode: "sync" }
  - { from: "system-5", to: "system-6", protocol: "http", mode: "sync" }
  - { from: "system-5", to: "system-4", protocol: "http", mode: "sync" }
  - { from: "system-5", to: "system-7", protocol: "http", mode: "sync" }
  - { from: "system-5", to: "system-8", protocol: "http", mode: "sync" }
  - { from: "aks-cluster", to: "system-2", protocol: "http", mode: "sync" }
  - { from: "system", to: "system-4", protocol: "http", mode: "sync" }
  - { from: "system", to: "system-6", protocol: "http", mode: "sync" }
  - { from: "system-5", to: "system-3", protocol: "http", mode: "sync" }
LayoutBoth .zip