AutoMate Technisch Help

Asset Catalogus

Deze pagina is een datasheet per asset van het AutoMate-platform. Per asset zijn doel, SKU/tier, scaling-strategie, slots/replicatie, dependencies, Bicep-locatie en de verwijzing naar de topologie opgenomen. Bedoeld als snelle referentie bij capaciteitsvraagstukken, incident-response, cost reviews en onboarding.

Verwante topics: Externe Diensten — Topologie & Toegang (volgt in aparte PR) · Hosting — SaaS Applicatie· Hosting — Status Page.

Compute & Applicaties

AutoMate Web API

Veld

Waarde

Doel

Centrale FastEndpoints-API; host voor Hangfire background jobs en plugins (AuditLog, Email, MsGraph)

Resource

Azure App Service (Web App), Linux, runtime DOTNETCORE\|10.0

SKU/tier

Volgt het gedeelde App Service Plan (P1v3 Premium V3 voor zowel dev als prod)

Scaling

Verticale scaling via plan-tier; horizontale scaling via Premium-instances (handmatig, auto-scale rules: TODO)

Slots

production + Staging slot. Sticky setting: services__api__https__0

Sidecar

Geen — de cloudflared sidecar is per 10-06-2026 volledig verwijderd (live én uit Bicep voor alle omgevingen). Tunnel-verkeer loopt nu via de dedicated Container App

Identiteit

System-assigned + user-assigned managed identity

Netwerk

VNet-integratie via snet-webapi-out (10.36.3.0/24, delegated Microsoft.Web/serverFarms); Private Endpoint via snet-webapi-in voor zowel prod- als staging-slot

Domein

Prod: api.automate365.cloud· Dev: api.dev.automate365.cloud

Health

/health

Dependencies

App Service Plan, Key Vault, Azure SQL, Managed Redis, AuditLogs Storage Account, Application Insights, Seq (via Serilog), SendGrid, Microsoft Graph

Bicep

Infrastructure/Src/Modules/Portal/WebApp.bicep, WebApiComponents.bicep, WebApiAppSettings.bicep

Management Portal

Veld

Waarde

Doel

Blazor Server beheersinterface voor admins (tenants, workflows, branding, etc.)

Resource

Azure App Service (Web App), Linux, runtime DOTNETCORE\|10.0

SKU/tier

Volgt gedeeld App Service Plan (zie hierboven)

Scaling

Idem Web API — gedeeld plan, verticaal via tier, horizontaal handmatig

Slots

production + Staging slot. Sticky setting: services__api__https__0

Sidecar

cloudflare/cloudflared:latest container per slot (production + Staging). Tunnel B in de Cloudflare-architectuur — routeert de publieke gebruikersdomeinen app.*, dev.*, api.* en api.dev.*. API-verkeer dat op api.* binnenkomt wordt door de Portal via een self-loop (snet-portal-out → snet-portal-in) verwerkt. Bicep: Infrastructure/Src/Modules/Portal/WebApp.bicep (deployCloudflaredSidecar parameter)

Identiteit

System-assigned + user-assigned managed identity

Netwerk

VNet-integratie via snet-portal-out (10.36.5.0/24, delegated Microsoft.Web/serverFarms); Private Endpoint via snet-portal-in

Domein

Prod: app.automate365.cloud· Dev: dev.automate365.cloud

Health

/health

Dependencies

App Service Plan, Key Vault, Web API (apim/api), SQL (Signatures DB), Application Insights

Bicep

Infrastructure/Src/Modules/Portal/WebApp.bicep, PortalComponents.bicep, PortalAppSettings.bicep

Status Page

Veld

Waarde

Doel

Publieke statuspagina; pollt Web API health endpoints

Resource

Docker container op Railway (geen Azure-resource)

SKU/tier

Railway plan — TODO (vermoedelijk Hobby/Pro)

Scaling

Single-container Railway-service (geen horizontale scaling geconfigureerd)

Slots/replicatie

n.v.t. — één instantie, omgeving-overstijgend

Database

MySQL statuspage DB (Railway-managed)

Domein

TODO (bv. status.automate365.cloud)

Dependencies

AutoMate Web API health endpoints (https://api.automate365.cloud/health)

Bicep

n.v.t. — Railway-config, zie Hosting — Status Page

App Service Plan (gedeeld)

Veld

Waarde

Doel

Onderliggende compute-capaciteit voor Web API en Portal (beide slots, alle sidecars)

Resource

Microsoft.Web/serverfarms (Linux, reserved: true)

SKU/tier

P1v3 Premium V3. In MainComponents.bicep resolveert var tier naar 'P' voor zowel P- als andere resource groups, dus dev en prod krijgen hetzelfde tier

Scaling

Verticaal: switch tier in Bicep (Basic B2 is een ondersteunde fallback). Horizontaal: instance count op plan-niveau (TODO: configuratie/auto-scale rules)

Belangrijk

Web API én Portal delen dit plan — een tier-wijziging raakt beide applicaties tegelijk

Bicep

Infrastructure/Src/Modules/MainComponents/AppServicePlan.bicep

Cloudflare Tunnel Container App

Veld

Waarde

Doel

Dedicated Azure Container App die de Cloudflare Zero Trust tunnel termineert voor beheerverkeer (medewerkers). Vervangt de voormalige cloudflared sidecars naast de App Services

Resource

Azure Container App (*-Automate-Conn-CFTunnel-CA-Weu) in Container App Environment (*-Automate-Conn-CFTunnel-CAE-Weu)

Image

cloudflare/cloudflared:latest, args tunnel run

Replicas

2 voor HA

Managed Identity

User-assigned (voor KV secret-toegang)

Ingress

Geen (outbound-only — maakt uitgaande verbinding naar Cloudflare edge)

Subnet

snet-cftunnel-out (10.36.11.0/24, delegated Microsoft.App/environments)

Tunnel-token

KV secret CFTunnelToken; GitHub Actions secret CF_TUNNEL_TOKEN

Status

Live in dev en prod

Bicep

Infrastructure/Src/Modules/MainComponents/CFTunnel.bicep, aangeroepen vanuit main.bicep

Zie Cloudflare Tunnel Architectuur voor de volledige migratiebeschrijving en operationele details.

Data & State

Azure SQL Server + Elastic Pool

Veld

Waarde

Doel

Relationele opslag voor tenants, UserTypes, Users, Branding, Jobs, Devices, Emails, Signatures e.a.

Resource

Microsoft.Sql/servers + elasticPools + databases

SKU/tier

Elastic Pool BasicPool (Basic) — capaciteit 50 eDTU (default), let op: huidige Bicep mapt zowel B als P tier naar BasicPool. Upgrade naar Standard/Premium pool is een Bicep-wijziging

Authenticatie

Azure AD only (azureADOnlyAuthentication: true); admin-groep SG - Azure SQL Administrators (Production)

Identiteit

User-assigned managed identity (GitHub Actions) als primaire identity op de server

Netwerk

Private Endpoint via snet-sql-in (10.36.1.0/24) + Private DNS Zone privatelink.database.windows.net. Office IP firewall-rule via FirewallRules.bicep; stale rules worden opgeruimd door RemoveFirewallRules.bicep

Databases

Lijst komt uit generalDatabaseNames parameter — o.a. Signatures, UserTypes, Jobs, Emails (per database aparte SQL users per app-slot)

Backup/HA

Default Azure SQL backup (Basic tier: PITR 7 dagen). Geen geo-replicatie geconfigureerd

Bicep

Infrastructure/Src/Modules/MainComponents/SQL/Wrapper.bicep, AddUsersLoop.bicep, FirewallRules.bicep

Azure Key Vault

Veld

Waarde

Doel

Secrets, certificaten, Cloudflared tunnel-tokens, SendGrid API key, app-instellingen

Resource

Microsoft.KeyVault/vaults

SKU/tier

standard (familie A)

Toegangsmodel

Access Policies (geen RBAC). Admin-objectId Innovative tenant; managed identity = GET op secrets+certs; service principal = GET/IMPORT/DELETE/CREATE/UPDATE op certs

Soft delete

Enabled

Netwerk

publicNetworkAccess: Disabled, default Deny, bypass AzureServices, IP allow-list voor office/runner. Private Endpoint via snet-keyvault-in (10.36.9.0/24) + Private DNS Zone privatelink.vaultcore.azure.net

Belangrijke secrets

SendGridApiKey, SendGridWebhookVerificationKey, CFTunnelToken (Tunnel A — Container App), CloudflaredTunnelToken (Tunnel B — Portal sidecar)

Bicep

Infrastructure/Src/Modules/MainComponents/KeyVault.bicep, KeyVault-AddSecrets.bicep, Auth/KeyVault-Access.bicep, Auth/KeyVault-ObjectAccess.bicep

Azure Managed Redis (Enterprise)

Veld

Waarde

Doel

Distributed cache voor Web API (sessies, hot data, throttling-tellers)

Resource

Microsoft.Cache/redisEnterprise (kind v2) + databases/default

SKU — productie

Balanced_B1 met highAvailability: Enabled

SKU — development

Balanced_B0 met highAvailability: Disabled

Scaling

SKU-wijziging (verticaal). Horizontale scaling via Enterprise cluster-nodes (TODO: niet geconfigureerd)

Beveiliging

minimumTlsVersion: 1.2, publicNetworkAccess: Disabled, accessKeysAuthentication: Disabled (alleen Entra-auth), clientProtocol: Encrypted, port 10000

Clustering

OSSCluster

Netwerk

Private Endpoint via snet-redis-in (10.36.8.0/24) + Private DNS Zone privatelink.redis.azure.net

Access policy

Data-plane access voor Web API system-MI én staging-slot system-MI (webapisysmi, webapistagingsysmi)

Bicep

Infrastructure/Src/Modules/MainComponents/Redis.bicep, RedisAccessPolicy.bicep

AuditLogs Storage Account

Veld

Waarde

Doel

Blob-opslag voor audit-trails per tenant (gebruikt door AutoMate.API.Plugins.AuditLog)

Resource

Microsoft.Storage/storageAccounts, kind StorageV2

SKU/tier

Standard_LRS, access tier Hot, minimum TLS 1.2

Connection string

Output AuditLogsStorageAccountConnectionString van MainComponents.bicep, geïnjecteerd als app-setting in de Web API

Bicep

Infrastructure/Src/Modules/MainComponents/MainComponents.bicep (resource AuditLogsStorageAccount)

Observability & E-mail

Application Insights

Veld

Waarde

Doel

APM, telemetrie, OpenTelemetry voor API en Portal

Resource

Microsoft.Insights/components, kind web, Flow_Type: Bluefield (workspace-based)

SKU/tier

Workspace-based — facturering volgt Log Analytics

Workspace

Gekoppeld aan Log Analytics Workspace (zie hieronder)

App settings injectie

APPINSIGHTS_INSTRUMENTATIONKEY, APPLICATIONINSIGHTS_CONNECTION_STRING worden door WebApiAppSettings.bicep/PortalAppSettings.bicep in de App Services gezet

Bicep

Infrastructure/Src/Modules/MainComponents/ApplicationInsights.bicep

Log Analytics Workspace

Veld

Waarde

Doel

Centrale opslag voor Azure-logs + Application Insights data

Resource

Microsoft.OperationalInsights/workspaces

SKU/tier

PerGB2018 (pay-as-you-go)

Retentie

Productie: 31 dagen · Development/Test: 30 dagen

Daily quota

1 GB

Netwerk

Public query + ingestion Enabled (geen Private Link voor ingestion)

Bicep

Infrastructure/Src/Modules/MainComponents/LogWorkspace.bicep

Seq @ TransIP (extern)

Veld

Waarde

Doel

Productie-pad voor structured application logging (Serilog → Seq). Wordt door Web API en Portal beide gevuld

Resource

Seq-instantie, gehost op TransIP (buiten Azure)

Runtime

Serilog sink WriteTo.Seq(seqUrl, apiKey) in Program.cs van Web API én Portal

App settings

Serilog__SeqUrl (URL) en Serilog__SeqApiKey (Key Vault reference naar secret SeqApiKey)

Bicep

App-setting injectie in Infrastructure/Src/Modules/Portal/WebApiAppSettings.bicep en PortalAppSettings.bicep

Beheer

Console/UI van Seq via Cloudflare One (Zero Trust toegang voor medewerkers)

SendGrid (extern)

Veld

Waarde

Doel

Primair pad voor transactionele e-mail + inbound webhooks

Resource

SaaS — beheerd in SendGrid console (zie Externe Diensten — Topologie & Toegang wanneer beschikbaar)

Secrets

SendGridApiKey, SendGridWebhookVerificationKey in Key Vault per omgeving

App settings

SendGrid__ApiKey, SendGrid__FromEmail, SendGrid__FromName (geïnjecteerd in App Services)

Netwerk & Toegang

Virtual Network (VNet) + subnets

Veld

Waarde

Naam

<env>-Automate-Vnet-Weu

Address space

10.36.0.0/16

Subnets

snet-sql-in (10.36.1.0/24) · snet-webapi-in (.2/24) · snet-webapi-out (.3/24, delegated) · snet-portal-in (.4/24) · snet-portal-out (.5/24, delegated) · snet-autosign-in (.6/24) · snet-autosign-out (.7/24, delegated) · snet-redis-in (.8/24) · snet-keyvault-in (.9/24) · snet-storage-in (.10/24) · snet-cftunnel-out (.11/24, delegated Microsoft.App/environments)

NSG's

Alle 11 subnets hebben een NSG gedefinieerd in SubnetHardening.bicep

Private DNS Zones

privatelink.azurewebsites.net, privatelink.database.windows.net, privatelink.redis.azure.net, privatelink.vaultcore.azure.net, privatelink.table.core.windows.net

Bicep

Infrastructure/Src/Modules/Networking/vnet.bicep, nsg.bicep, SubnetHardening.bicep

Private Endpoints

Endpoint

Subnet

DNS Zone

Bicep

Azure SQL

snet-sql-in

privatelink.database.windows.net

main.bicepNetworking/PrivateEndpoint.bicep

Key Vault

snet-keyvault-in

privatelink.vaultcore.azure.net

idem

Managed Redis

snet-redis-in

privatelink.redis.azure.net

idem

Web API (prod slot)

snet-webapi-in

privatelink.azurewebsites.net

idem

Web API (staging slot)

snet-webapi-in

privatelink.azurewebsites.net

idem

Cloudflared tunnels

De tunnelarchitectuur bestaat uit twee componenten per omgeving. Zie Cloudflare Tunnel Architectuur voor de volledige details en NSG-regels.

Status per app:

App

Sidecar

Omschrijving

AutoMate.API

Geen

Sidecar verwijderd uit de live-omgeving en uit Bicep voor alle omgevingen

Management Portal

Actief (Tunnel B)

cloudflared sitecontainer op production-slot + Staging-slot. Routeert app.*, dev.*, api.*, api.dev.*. Actief in dev via deployCloudflaredSidecar = environmentLetter == 'D' in WebApp.bicep

Sidecar-configuratie (Portal):

Veld

Waarde

Resource

Microsoft.Web/sites/sitecontainers + Microsoft.Web/sites/slots/sitecontainers

Image

cloudflare/cloudflared:latest

Target port

2000

Startup

tunnel run

Tokens

CloudflaredTunnelToken-Portal, CloudflaredTunnelToken-PortalStaging

Bicep

Infrastructure/Src/Modules/Portal/WebApp.bicep (parameter deployCloudflaredSidecar)

Afgevoerd uit deze deployment

De volgende assets zijn historisch wel uitgerold geweest maar worden niet meer ingezet. De bijbehorende Bicep-modules zijn verwijderd uit de repo.

Asset

Status

Bicep (ongebruikt)

Azure Service Bus

Vervangen door Hangfire in-process voor async coordinatie

n.v.t. — Bicep verwijderd

Azure Communication Service

Vervangen door uitsluitend SendGrid voor uitgaande e-mail

n.v.t. — Bicep verwijderd

Azure API Management (APIM)

Klanten benaderen de Web API rechtstreeks via de App Service custom domain

n.v.t. — niet meer in repo gedeployed

Identiteit & Authenticatie

Managed Identities

Identity

Type

Gebruikt door

Doel

Web API system-MI

System-assigned

Web API production slot

Redis data, SQL login, Key Vault access

Web API staging system-MI

System-assigned

Web API staging slot

Idem voor staging

Portal system-MI

System-assigned

Portal production slot

SQL login (Signatures DB), Key Vault refs

Portal staging system-MI

System-assigned

Portal staging slot

Idem voor staging

User-assigned MI (GitHub Actions)

User-assigned

Bicep deployments, SQL admin tasks

Deployment-pijplijn, SQL user provisioning

Onderhoud van dit document

Werk dit topic bij wanneer:

  • Een SKU of tier verandert in de Bicep (App Service Plan, Redis, SQL pool, AuditLogs Storage, etc.)

  • Een nieuw asset wordt toegevoegd (nieuwe Azure-resource, nieuwe externe SaaS, nieuwe sidecar)

  • Slots, replicatie of HA-configuratie wijzigen

  • Subnet-layout of Private Endpoint-koppelingen wijzigen

  • Een TODO-veld is verduidelijkt (bv. Status Page Railway-plan, auto-scale rules)

  • Een asset uit de "Afgevoerd"-tabel wordt weer in gebruik genomen of definitief uit de repo verwijderd

Verantwoordelijke voor onderhoud: de medewerker die de wijziging doorvoert past dit topic aan als onderdeel van het change-proces.

Last modified: 11 June 2026