AutoMate Technisch Help

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 cloudflared sidecar 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: Disabled en is bereikbaar via Private Endpoint (snet-webapi-in). De API-webapp heeft geen cloudflared sidecar — 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: Disabled en is bereikbaar via Private Endpoint (snet-portal-in). De Portal-webapp heeft vier host-bindings: app.*, dev.*, api.* en api.dev.*. De cloudflared sidecar is actief op production-slot en Staging-slot (Tunnel B) en verzorgt de publieke gebruikersdomeinen. API-verkeer dat op api.* binnenkomt, wordt via een self-loop (snet-portal-out → snet-portal-in) verwerkt; server-side API-calls van de Portal lopen via snet-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, image cloudflare/cloudflared:latest, args tunnel run. Subnet snet-cftunnel-out (.11.0/24, delegated Microsoft.App/environments). Gedefinieerd in Infrastructure/Src/Modules/MainComponents/CFTunnel.bicep.

  • App Service Plan — gedeeld tussen Web API en Portal. Premium V3 P1v3 voor zowel productie als development (de tier-variabele in MainComponents.bicep resolveert naar P voor alle omgevingen).

Data

  • Azure SQL Server + Elastic Pool — BasicPool (50 eDTU). Huidige databases:

    • Signatures — E-mailhandtekeningen

    • UserTypes — UserType definities en formulieren

    • Jobs — Hangfire job storage

    • Emails — E-mail logs

    De eerder gedocumenteerde databases Tenants, Users, Branding, Licenses en Devices zijn 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_B1 met HA. Development: Balanced_B0 zonder HA. Volledig achter Private Endpoint, encrypted client protocol, Entra-only auth (geen access keys).

  • AuditLogs Storage AccountStandard_LRS, StorageV2, access tier Hot, 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, default Deny, alleen een korte IP-allowlist voor office/runner. Private Endpoint via snet-keyvault-in.

  • Cloudflare Zero Trust — WAF + OWASP managed ruleset op alle automate365.cloud subdomains. 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-in

    10.36.1.0/24

    Private Endpoint Azure SQL

    snet-webapi-in

    10.36.2.0/24

    Private Endpoint Web API (prod + staging)

    snet-webapi-out

    10.36.3.0/24

    VNet-integratie Web API (delegated Microsoft.Web/serverFarms)

    snet-portal-in

    10.36.4.0/24

    Private Endpoint Portal

    snet-portal-out

    10.36.5.0/24

    VNet-integratie Portal (delegated Microsoft.Web/serverFarms)

    snet-autosign-in

    10.36.6.0/24

    Autosign service (inbound PE)

    snet-autosign-out

    10.36.7.0/24

    Autosign service (outbound, delegated)

    snet-redis-in

    10.36.8.0/24

    Private Endpoint Managed Redis

    snet-keyvault-in

    10.36.9.0/24

    Private Endpoint Key Vault

    snet-storage-in

    10.36.10.0/24

    Private Endpoint AuditLogs Storage Account

    snet-cftunnel-out

    10.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 als SeqApiKey.

  • 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

Azure — per omgeving

publieke HTTPS

publieke HTTPS

private endpoint

private endpoint

private endpoint

Klant

Management Portal\nApp Service

AutoMate.API\nApp Service

Medewerker

Cloudflare Zero Trust\nWAF + Access

Container App\ncloudflared\n2 replicas

Azure SQL\nElastic Pool

Key Vault

Managed Redis\nEnterprise

AuditLogs\nStorage Account

Application Insights

Log Analytics

Microsoft Graph

SendGrid

Seq @ TransIP\nvia Serilog

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 Tunnel

  • Modules/MainComponents/ — Key Vault, SQL, App Service Plan, Application Insights, Log Analytics, AuditLogs Storage, Managed Identity (ServiceBus/ en CommunicationService.bicep staan nog in repo maar worden niet meer aangeroepen)

  • Modules/Portal/ — Web App, App Settings, DNS, SNI/certificate. De Portal-module bevat de cloudflared sidecar-definitie (deployCloudflaredSidecar = environmentLetter == 'D'); de API-module heeft dit niet.

  • Modules/Networking/SubnetHardening.bicep — 11 NSG-modules voor alle subnets

  • Modules/Networking/ — VNet, Private Endpoints, Private DNS Zones

  • Modules/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.

Last modified: 11 June 2026