Infrastructuur
Overzicht
De AutoMate-infrastructuur draait volledig in Azure en wordt beheerd via Infrastructure as Code (Bicep). Er zijn twee ingress-paden:
Klantverkeer — komt binnen via de publieke HTTPS-endpoint van de App Service (
app.automate365.cloud,api.automate365.cloud). Dit is het normale internet-pad.Beheerverkeer — medewerkers benaderen interne resources via Cloudflare One Zero Trust. Het tunnel-endpunt bestaat uit twee componenten per omgeving: een
cloudflaredsidecar op de Portal-webapp (Tunnel B) voor publieke gebruikersdomeinen, en een dedicated Azure Container App (*-Automate-Conn-CFTunnel-CA-Weu) met 2 replicas (Tunnel A) voor beheerverkeer zoals SCM/Kudu, Redis-beheer en SQL-beheer.
De App Services hebben publicNetworkAccess: Disabled en zijn alleen bereikbaar via Private Endpoint. De data-resources (Azure SQL, Key Vault, Managed Redis) zijn eveneens dichtgezet via Private Endpoint. NSG's op alle 11 subnets hardenen de oost-west-communicatie in de VNet. Zie Cloudflare Tunnel Architectuur voor de tunnelarchitectuur en NSG-regels.
Voor SKU/scaling per asset zie Asset Catalogus. Voor toegang per medewerker en externe diensten zie Externe Diensten — Topologie & Toegang.
Componenten
Compute
AutoMate.API — Azure Web App (Linux, .NET 10), centrale backend met FastEndpoints, Hangfire en plugins. Production-slot + Staging-slot. De API-webapp heeft
publicNetworkAccess: Disableden is bereikbaar via Private Endpoint (snet-webapi-in). De API-webapp heeft geencloudflaredsidecar — verwijderd uit de live-omgeving en uit Bicep voor alle omgevingen.Management Portal — Azure Web App (Blazor Server, .NET 10), beheerinterface. Production + Staging slot. De Portal-webapp heeft
publicNetworkAccess: Disableden is bereikbaar via Private Endpoint (snet-portal-in). De Portal-webapp heeft vier host-bindings:app.*,dev.*,api.*enapi.dev.*. Decloudflaredsidecar is actief op production-slot en Staging-slot (Tunnel B) en verzorgt de publieke gebruikersdomeinen. API-verkeer dat opapi.*binnenkomt, wordt via een self-loop (snet-portal-out → snet-portal-in) verwerkt; server-side API-calls van de Portal lopen viasnet-portal-out → snet-webapi-in.Cloudflare Tunnel Container App — Azure Container App (
*-Automate-Conn-CFTunnel-CA-Weu) binnen Container App Environment (*-Automate-Conn-CFTunnel-CAE-Weu). 2 replicas, imagecloudflare/cloudflared:latest, argstunnel run. Subnetsnet-cftunnel-out(.11.0/24, delegatedMicrosoft.App/environments). Gedefinieerd inInfrastructure/Src/Modules/MainComponents/CFTunnel.bicep.App Service Plan — gedeeld tussen Web API en Portal. Premium V3
P1v3voor zowel productie als development (detier-variabele inMainComponents.bicepresolveert naarPvoor alle omgevingen).
Data
Azure SQL Server + Elastic Pool — BasicPool (50 eDTU). Huidige databases:
Signatures— E-mailhandtekeningenUserTypes— UserType definities en formulierenJobs— Hangfire job storageEmails— E-mail logs
De eerder gedocumenteerde databases
Tenants,Users,Branding,LicensesenDeviceszijn afgevoerd; tenant- en branding-state is verplaatst naar respectievelijk Azure Table Storage en feature-specifieke databases of weggevallen door de Workflows 2.0-migratie.Azure Managed Redis (Enterprise) — Distributed cache. Productie:
Balanced_B1met HA. Development:Balanced_B0zonder HA. Volledig achter Private Endpoint, encrypted client protocol, Entra-only auth (geen access keys).AuditLogs Storage Account —
Standard_LRS, StorageV2, access tierHot, TLS 1.2. Wordt door het AuditLog-plugin gebruikt voor blob-opslag van audit-trails.
Integratie
Microsoft Graph API — Microsoft 365 integratie (gebruikers, devices, mailboxes) via per-tenant app registrations.
SendGrid — Transactionele e-mail + inbound webhook-verificatie. API key + webhook-verification key in Key Vault per omgeving.
Security & Network
Azure Key Vault — Secrets, certificaten, Cloudflared tunnel-tokens, SendGrid keys.
publicNetworkAccess: Disabled, defaultDeny, alleen een korte IP-allowlist voor office/runner. Private Endpoint viasnet-keyvault-in.Cloudflare Zero Trust — WAF + OWASP managed ruleset op alle
automate365.cloudsubdomains. Cloudflare Access met per-user policies. Twee tunnels per omgeving: Portal sidecar (Tunnel B) en Container App (Tunnel A). GitHub Actions runners verbinden via Cloudflare WARP. Zie Cloudflare Tunnel Architectuur.VNet
<env>-Automate-Vnet-Weu(10.36.0.0/16) met 11 subnets, elk met NSG:Subnet
CIDR (dev)
Doel
snet-sql-in10.36.1.0/24
Private Endpoint Azure SQL
snet-webapi-in10.36.2.0/24
Private Endpoint Web API (prod + staging)
snet-webapi-out10.36.3.0/24
VNet-integratie Web API (delegated
Microsoft.Web/serverFarms)snet-portal-in10.36.4.0/24
Private Endpoint Portal
snet-portal-out10.36.5.0/24
VNet-integratie Portal (delegated
Microsoft.Web/serverFarms)snet-autosign-in10.36.6.0/24
Autosign service (inbound PE)
snet-autosign-out10.36.7.0/24
Autosign service (outbound, delegated)
snet-redis-in10.36.8.0/24
Private Endpoint Managed Redis
snet-keyvault-in10.36.9.0/24
Private Endpoint Key Vault
snet-storage-in10.36.10.0/24
Private Endpoint AuditLogs Storage Account
snet-cftunnel-out10.36.11.0/24
Outbound VNet-integratie Cloudflare Tunnel Container App (delegated
Microsoft.App/environments)Private DNS zones:
privatelink.azurewebsites.net,privatelink.database.windows.net,privatelink.redis.azure.net,privatelink.vaultcore.azure.net,privatelink.table.core.windows.net.Azure SQL — Azure AD only authentication (
azureADOnlyAuthentication: true), Private Endpoint, IP-firewall voor office/runner alleen.
Logging & Monitoring
Serilog → Seq (TransIP) — productie-pad voor structured application logging. URL en API key komen uit app-settings (
Serilog__SeqUrl,Serilog__SeqApiKey); key staat in Key Vault alsSeqApiKey.Application Insights — Workspace-based (
Bluefield), APM + OpenTelemetry voor API en Portal. Schrijft naar de Log Analytics Workspace.Log Analytics Workspace — SKU
PerGB2018, retentie 31 dagen (prod) / 30 dagen (dev), daily quota 1 GB.AuditLogs Storage Account — zie Data-sectie hierboven; specifieke audit-trail per tenant via het AuditLog-plugin.
Architectuurdiagram
Deployment
Infrastructure as Code
Bicep templates in /Infrastructure/Src/:
main.bicep— Hoofd deployment, orchestreert alle modules (SubnetHardening, VNet, Private Endpoints, MainComponents, Web API, Portal, Redis, SQL users, CFTunnel)Modules/MainComponents/CFTunnel.bicep— Container App Environment + Container App voor de Cloudflare TunnelModules/MainComponents/— Key Vault, SQL, App Service Plan, Application Insights, Log Analytics, AuditLogs Storage, Managed Identity (ServiceBus/enCommunicationService.bicepstaan nog in repo maar worden niet meer aangeroepen)Modules/Portal/— Web App, App Settings, DNS, SNI/certificate. De Portal-module bevat decloudflaredsidecar-definitie (deployCloudflaredSidecar = environmentLetter == 'D'); de API-module heeft dit niet.Modules/Networking/SubnetHardening.bicep— 11 NSG-modules voor alle subnetsModules/Networking/— VNet, Private Endpoints, Private DNS ZonesModules/Auth/— Key Vault access policies, Storage authenticatie
CI/CD
GitHub Actions pipelines verzorgen de geautomatiseerde deployment via Deployment-Infrastructure-Azure.yml. Secrets worden uitsluitend via Azure Key Vault beheerd.