Azure Functions: HTTPS-Only Mode Afdwingen

💼 Management Samenvatting

HTTPS-Only moet zijn ingeschakeld op alle Azure Functions om data-in-transit versleuteling te garanderen en man-in-the-middle-aanvallen te voorkomen. Deze maatregel zorgt ervoor dat alle HTTP-requests automatisch worden omgeleid naar HTTPS, waardoor TLS-versleuteling altijd actief is voor alle communicatie met Function Apps.

Aanbeveling
IMPLEMENTEER VERPLICHT VOOR ALLE AZURE FUNCTIONS
Risico zonder
High
Risk Score
8/10
Implementatie
4u (tech: 2u)
Van toepassing op:
Azure Functions

Zonder HTTPS-Only configuratie kunnen Azure Functions worden benaderd via onversleuteld HTTP-verkeer, wat ernstige beveiligingsrisico's met zich meebrengt. Gevoelige gegevens zoals API keys, authentication tokens, gebruikersdata en bedrijfsinformatie worden in plaintext over het netwerk verzonden waar ze kunnen worden onderschept door aanvallers op publieke WiFi-netwerken, gecompromitteerde routers of via network sniffing. Man-in-the-middle-aanvallen worden mogelijk waarbij aanvallers niet alleen verkeer kunnen onderscheppen maar ook kunnen manipuleren, wat tot data corruption of ongeautoriseerde acties kan leiden. Voor serverless architecturen waarbij Functions vaak fungeren als backend APIs voor web- en mobile applicaties is deze kwetsbaarheid extra problematisch omdat Functions vaak kritieke business logic bevatten en toegang hebben tot databases en andere Azure resources. Daarnaast ontstaan compliance-schendingen met vrijwel alle moderne security frameworks: de Baseline Informatiebeveiliging Overheid (BIO) vereist versleuteling in transit onder Thema 13.01, ISO 27001 controle A.13.1.1 eist netwerkversleuteling, NIS2 Artikel 21 verplicht versleuteling van gevoelige communicatie, en de AVG vereist passende technische maatregelen waaronder transport-layer versleuteling. HTTPS-Only forceert automatische redirection van alle HTTP-requests naar HTTPS met een HTTP 301 Permanent Redirect, waardoor TLS-versleuteling altijd actief is zonder dat developers hier expliciet voor hoeven te coderen of gebruikers bewust HTTPS moeten typen in hun browser.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Functions, Az.Websites

Implementatie

Deze beveiligingscontrole verifieert dat alle Azure Functions in de Azure-tenant de httpsOnly-property hebben ingesteld op true. De verificatie gebeurt via de Azure Resource Manager API door middel van het Get-AzFunctionApp cmdlet dat alle Function Apps in het subscription ophaalt, gevolgd door validatie van de httpsOnly-setting voor elke Function. Functions zonder HTTPS-Only configuratie worden gerapporteerd als non-compliant met details over de Function naam, resource group en subscription. Remediation kan automatisch worden uitgevoerd via het Set-AzWebApp cmdlet of Update-AzFunctionAppSetting om de httpsOnly-property in te stellen op true voor alle non-compliant Functions. De implementatie kan handmatig worden gedaan via Azure Portal door naar Function Apps te navigeren, Configuration te selecteren onder Settings, General settings te openen, en HTTPS Only op 'On' te zetten, of geautomatiseerd via PowerShell of Azure CLI voor bulk-deployment over honderden Functions tegelijk. Voor aangepaste domains moet worden gegarandeerd dat geldige SSL/TLS-certificaten zijn geconfigureerd. Deze maatregel is een kritieke beveiligingscontrole die voldoet aan CIS Azure Foundations Benchmark v2.0.0 controle 9.5, en is verplicht voor alle productie Function Apps zonder uitzondering. De implementatie kost 2-4 uur afhankelijk van het aantal Functions, heeft geen negatieve performance impact, en is volledig kosteloos.

Vereisten

Het implementeren van HTTPS-Only enforcement voor Azure Functions vereist een zorgvuldige voorbereiding om te garanderen dat alle technische en organisatorische voorwaarden aanwezig zijn voordat de implementatie wordt gestart. Deze voorbereiding is essentieel om te voorkomen dat de implementatie halverwege stagneert of dat bestaande Function Apps onbedoeld worden verstoord tijdens het configuratieproces. Organisaties moeten eerst een volledige inventarisatie uitvoeren van alle Azure Functions binnen hun tenant, inclusief development, test en productie-omgevingen, om een compleet beeld te krijgen van de scope van de implementatie.

De primaire vereiste voor het configureren van HTTPS-Only is een Azure subscription met voldoende toegangsrechten. Specifiek moet de gebruiker of service principal die de implementatie uitvoert beschikken over de rol Contributor of Owner op het niveau van de subscription of resource group waar de Function Apps zich bevinden. Deze rechten zijn noodzakelijk omdat het wijzigen van de HTTPS-Only instelling een wijziging is aan de platformconfiguratie van de Function App, wat vereist dat de gebruiker schrijfrechten heeft op de Azure Resource Manager API. Voor organisaties die gebruik maken van Azure RBAC (Role-Based Access Control) is het belangrijk om te verifiëren dat de toegewezen rollen daadwerkelijk de benodigde machtigingen bevatten, aangezien aangepaste rollen mogelijk niet alle vereiste acties toestaan.

Voor geautomatiseerde implementaties via PowerShell is het essentieel dat PowerShell versie 7 of hoger is geïnstalleerd op het systeem waar de scripts worden uitgevoerd. PowerShell 7 biedt verbeterde cross-platform ondersteuning en betere integratie met moderne Azure-modules. De vereiste Azure PowerShell-modules moeten worden geïnstalleerd en bijgewerkt naar de nieuwste versie om te garanderen dat alle cmdlets correct functioneren. Specifiek zijn de modules Az.Accounts, Az.Functions en Az.Websites vereist. De Az.Accounts module verzorgt de authenticatie en verbinding met Azure, terwijl Az.Functions en Az.Websites de specifieke cmdlets leveren voor het beheren van Function Apps. Organisaties moeten ervoor zorgen dat deze modules regelmatig worden bijgewerkt, aangezien Microsoft regelmatig nieuwe functionaliteit toevoegt en bugfixes uitbrengt die de betrouwbaarheid van de implementatie kunnen verbeteren.

Een fundamentele technische vereiste is dat de Azure Functions al moeten zijn gedeployed in de Azure-tenant voordat HTTPS-Only kan worden geconfigureerd. Dit lijkt vanzelfsprekend, maar het is belangrijk om te benadrukken dat HTTPS-Only een configuratie-instelling is die wordt toegepast op bestaande Function Apps, niet iets dat tijdens de deployment wordt ingesteld. Voor nieuwe Function Apps kan HTTPS-Only direct worden geconfigureerd tijdens de initiële setup, maar voor bestaande Functions moet de configuratie worden aangepast. Organisaties moeten een inventarisatie maken van alle Function Apps, inclusief hun resource groups, subscription IDs en deployment status, om te voorkomen dat Functions worden gemist tijdens de implementatie.

TLS-versleuteling vormt de technische basis voor HTTPS-Only enforcement. Moderne Azure Functions ondersteunen standaard TLS 1.2 en hoger, wat voldoet aan alle moderne beveiligingsstandaarden. Echter, voor oudere Function Apps die mogelijk nog zijn geconfigureerd met verouderde TLS-versies, moet eerst TLS 1.2 of hoger worden geconfigureerd voordat HTTPS-Only wordt ingeschakeld. Dit is cruciaal omdat HTTPS-Only alleen effectief is wanneer de onderliggende TLS-configuratie veilig is. Organisaties moeten verifiëren dat alle Function Apps minimaal TLS 1.2 ondersteunen, en idealiter TLS 1.3 gebruiken voor optimale beveiliging en prestaties.

Voor Azure Functions die gebruik maken van aangepaste domeinnamen in plaats van het standaard azurewebsites.net domein, is het essentieel dat geldige SSL/TLS-certificaten zijn geconfigureerd voordat HTTPS-Only wordt ingeschakeld. Zonder geldige certificaten zullen HTTPS-verbindingen falen met certificaatfouten, wat de beschikbaarheid van de Function App kan beïnvloeden. Azure biedt verschillende opties voor certificaatbeheer: Azure-managed certificates zijn gratis en worden automatisch beheerd door Microsoft, terwijl aangepaste certificaten handmatig moeten worden geüpload en vernieuwd. Organisaties moeten een certificaatinventarisatie uitvoeren en verifiëren dat alle certificaten geldig zijn en niet binnenkort verlopen, aangezien verlopen certificaten HTTPS-verbindingen zullen blokkeren.

Naast deze technische vereisten moeten organisaties ook organisatorische voorbereidingen treffen. Dit omvat het informeren van development teams over de wijziging, het plannen van een geschikt implementatietijdstip om impact op productie-workloads te minimaliseren, en het opstellen van een rollback-plan voor het geval er onverwachte problemen optreden. Daarnaast moet er een testplan worden opgesteld om te verifiëren dat alle Function Apps correct blijven functioneren na het inschakelen van HTTPS-Only, met speciale aandacht voor Functions die externe systemen aanroepen of worden aangeroepen door externe clients die mogelijk nog HTTP-verbindingen proberen te maken.

Implementatie

Gebruik PowerShell-script azure-functions-https-only.ps1 (functie Invoke-Remediation) – Automatiseert HTTPS-Only enforcement voor alle Azure Functions in subscription.

De implementatie van HTTPS-Only enforcement voor Azure Functions kan worden uitgevoerd via drie verschillende methoden, elk met hun eigen voor- en nadelen afhankelijk van de specifieke situatie van de organisatie. De keuze tussen handmatige configuratie, geautomatiseerde PowerShell-implementatie of Azure Policy-enforcement hangt af van factoren zoals het aantal Function Apps, de beschikbare tijd, de gewenste mate van automatisering en de behoefte aan preventieve controles. Organisaties moeten zorgvuldig evalueren welke methode het beste past bij hun operationele model en compliance-vereisten.

**Handmatige Configuratie via Azure Portal** is de meest directe methode voor organisaties met een beperkt aantal Function Apps of wanneer er specifieke controle nodig is over het implementatieproces. Deze methode is ideaal voor kleine tot middelgrote organisaties die minder dan twintig Function Apps hebben, of wanneer er een gefaseerde implementatie wordt gewenst waarbij elke Function App individueel wordt gecontroleerd voordat HTTPS-Only wordt ingeschakeld. Het proces begint met het navigeren naar de Azure Portal en het selecteren van de specifieke Function App waarop HTTPS-Only moet worden geconfigureerd. Vervolgens moet in het linker navigatiemenu onder de sectie Settings de optie Configuration worden geselecteerd, wat toegang geeft tot alle configuratie-instellingen van de Function App.

Binnen de Configuration-pagina bevindt zich het tabblad General settings, dat zich naast de tabbladen Application settings en Connection strings bevindt. Dit tabblad bevat alle platform-specifieke instellingen die van invloed zijn op de werking van de Function App op het Azure-platform. In de sectie Platform settings moet de instelling HTTPS Only worden gelokaliseerd. Voor oudere Function Apps die zijn gedeployed voordat HTTPS-Only de standaard werd, staat deze instelling vaak standaard op Off, wat betekent dat zowel HTTP als HTTPS-verbindingen worden toegestaan. Het is belangrijk om te benadrukken dat deze standaardinstelling een beveiligingsrisico vormt en daarom moet worden aangepast.

Het inschakelen van HTTPS-Only gebeurt door de schakelaar van Off naar On te zetten. Azure Portal toont op dit moment een waarschuwing die duidelijk maakt dat alle HTTP-verkeer automatisch zal worden omgeleid naar HTTPS met behulp van een HTTP 301 Permanent Redirect. Deze waarschuwing is belangrijk omdat het gebruikers informeert over het gedrag dat zal optreden na het activeren van de instelling. Na bevestiging van deze waarschuwing moet de wijziging worden opgeslagen door op de knop Save bovenaan de pagina te klikken. Een belangrijk voordeel van deze configuratiemethode is dat de wijziging direct actief is zonder dat een herstart van de Function App vereist is, wat betekent dat er geen downtime optreedt tijdens de implementatie.

Na het opslaan van de configuratie is het essentieel om de implementatie te valideren door te testen of HTTP-requests daadwerkelijk worden omgeleid naar HTTPS. Dit kan worden gedaan door de Function App aan te roepen via HTTP met behulp van de URL http://[functionapp].azurewebsites.net/api/[function], waarbij [functionapp] wordt vervangen door de daadwerkelijke naam van de Function App en [function] door de naam van de specifieke function. Een correct geconfigureerde Function App zal deze HTTP-request automatisch omleiden naar de HTTPS-versie van dezelfde URL, wat zichtbaar is in de browser door de URL-balk die automatisch verandert van http:// naar https://. Daarnaast moet ook direct HTTPS worden getest om te verifiëren dat HTTPS-verbindingen correct functioneren zonder omleidingen of certificaatfouten.

**Geautomatiseerde Deployment via PowerShell** is de aanbevolen methode voor organisaties met een groot aantal Function Apps of wanneer er behoefte is aan herhaalbare, gecontroleerde implementaties over meerdere subscriptions of tenants. Deze methode biedt schaalbaarheid en consistentie die handmatige configuratie niet kan bieden, en maakt het mogelijk om honderden Function Apps tegelijk te configureren met minimale menselijke interventie. Het implementatieproces begint met het verbinden met Azure via het Connect-AzAccount cmdlet, wat een interactieve authenticatiesessie start waarbij de gebruiker wordt gevraagd om in te loggen met hun Azure-credentials. Voor service principals of geautomatiseerde scenario's kan alternatieve authenticatiemethoden worden gebruikt zoals certificate-based authentication of managed identities.

Na succesvolle authenticatie moet de juiste Azure subscription worden geselecteerd met behulp van het Select-AzSubscription cmdlet, waarbij de SubscriptionId parameter wordt gebruikt om de specifieke subscription te identificeren. Dit is belangrijk omdat organisaties vaak meerdere subscriptions hebben en het script alleen moet werken op de subscription waar de Function Apps zich bevinden. Vervolgens kunnen alle non-compliant Function Apps worden geïdentificeerd met behulp van de query Get-AzFunctionApp | Where-Object {-not $_.HttpsOnly}, wat een lijst retourneert van alle Function Apps waarbij de HttpsOnly-eigenschap niet is ingesteld op true. Deze lijst vormt de basis voor de geautomatiseerde remediatie.

De daadwerkelijke remediatie wordt uitgevoerd door een foreach-loop die door alle non-compliant Function Apps itereert en voor elke Function App twee acties uitvoert. Eerst wordt de application setting WEBSITE_REQUIRE_HTTPS ingesteld op true via het Update-AzFunctionAppSetting cmdlet, wat een legacy-instelling is die compatibiliteit garandeert met oudere configuraties. Vervolgens wordt de moderne HttpsOnly-eigenschap ingesteld op true via het Set-AzFunctionApp cmdlet, wat de officiële manier is om HTTPS-Only in te schakelen voor moderne Function Apps. Na elke succesvolle configuratie wordt een bevestigingsbericht weergegeven in de console met groene tekst om de operator te informeren over de voortgang. Na voltooiing van de remediatie moet de compliance worden gevalideerd door opnieuw alle Function Apps op te halen en te filteren op die waarbij HttpsOnly nog steeds false is, wat idealiter een lege lijst zou moeten opleveren.

Voor rapportage en audit-doeleinden kan een compliance-rapport worden gegenereerd door alle Function Apps op te halen met hun relevante eigenschappen en deze te exporteren naar een CSV-bestand. Dit rapport bevat informatie zoals de naam van de Function App, de resource group, de HTTPS-Only status en de locatie, wat waardevol is voor compliance-audits en voor het bijhouden van de implementatiestatus over tijd. Voor continue compliance-monitoring kan een Azure Automation Runbook worden geconfigureerd dat wekelijks of dagelijks wordt uitgevoerd om nieuwe Function Apps automatisch te detecteren en te remediëren, wat ervoor zorgt dat de organisatie compliant blijft zelfs wanneer nieuwe Functions worden gedeployed zonder HTTPS-Only configuratie.

**Preventieve Controle via Azure Policy** vertegenwoordigt de meest geavanceerde en proactieve aanpak voor HTTPS-Only enforcement, waarbij niet alleen bestaande Function Apps worden geconfigureerd, maar ook wordt voorkomen dat nieuwe Function Apps worden gedeployed zonder HTTPS-Only configuratie. Deze methode is ideaal voor grote organisaties met strikte governance-vereisten en voor omgevingen waar developers zelf Function Apps kunnen deployen zonder directe interventie van security teams. Azure Policy biedt een gecentraliseerde manier om compliance-regels te definiëren en te handhaven over alle resources in een subscription of management group, wat consistentie garandeert ongeacht wie of wat de resources maakt.

De implementatie begint met het navigeren naar Azure Policy in de Azure Portal en het zoeken naar de built-in policy definitie genaamd Function App should only be accessible over HTTPS. Deze policy is door Microsoft vooraf geconfigureerd en vereist geen aangepaste definitie, wat de implementatie vereenvoudigt. De policy moet worden toegewezen aan de gewenste scope, wat kan variëren van een specifieke resource group tot een volledige subscription of zelfs een management group die meerdere subscriptions omvat. Bij het toewijzen van de policy moet het effect worden gekozen: Audit betekent dat non-compliant resources worden gedetecteerd en gerapporteerd maar niet worden geblokkeerd, terwijl Deny betekent dat nieuwe non-compliant deployments daadwerkelijk worden geblokkeerd voordat ze kunnen worden gemaakt. Voor productie-omgevingen wordt Deny sterk aanbevolen omdat dit proactieve security enforcement biedt.

Een krachtige functie van Azure Policy is de mogelijkheid om automatische remediatie in te schakelen bij het toewijzen van de policy. Wanneer de optie Create a remediation task wordt ingeschakeld, zal Azure automatisch een remediation task maken die alle bestaande non-compliant Function Apps detecteert en configureert om compliant te zijn met de policy. Deze remediation tasks kunnen worden geconfigureerd om automatisch te worden uitgevoerd of om handmatige goedkeuring te vereisen, afhankelijk van de governance-vereisten van de organisatie. Het compliance-dashboard in Azure Policy biedt real-time inzicht in het percentage compliant Function Apps, met een duidelijk doel van 100 procent compliance. Dit dashboard kan worden gebruikt voor management reporting en voor het identificeren van trends in compliance over tijd.

Het belangrijkste voordeel van Azure Policy met Deny-effect is dat het preventieve security enforcement biedt door te voorkomen dat developers nieuwe Function Apps kunnen deployen zonder HTTPS-Only configuratie. Dit elimineert de noodzaak voor reactieve remediatie en zorgt ervoor dat alle nieuwe deployments vanaf het begin compliant zijn. Deze aanpak is bijzonder waardevol in DevOps-omgevingen waar CI/CD-pipelines automatisch Function Apps kunnen deployen, omdat het garandeert dat zelfs geautomatiseerde deployments de security-vereisten naleven zonder dat developers zich bewust hoeven te zijn van de specifieke configuratie-eisen.

Naast deze drie primaire methoden kan HTTPS-Only ook worden geconfigureerd via Azure CLI, wat handig is voor script-gebaseerde deployments of voor gebruikers die de voorkeur geven aan command-line interfaces boven grafische interfaces. Het Azure CLI-commando az functionapp update met de parameter --set httpsOnly=true configureert HTTPS-Only voor een specifieke Function App. Deze methode kan worden geïntegreerd in deployment-scripts of CI/CD-pipelines voor geautomatiseerde configuratie tijdens het deployment-proces.

De totale implementatietijd varieert aanzienlijk tussen de verschillende methoden. Handmatige configuratie via Azure Portal kost ongeveer 5 minuten per Function App, wat geschikt is voor kleine aantallen maar onpraktisch wordt bij tientallen of honderden Functions. Geautomatiseerde PowerShell-implementatie vereist 30 tot 60 minuten voor de initiële setup en script-ontwikkeling, maar kan daarna alle Functions binnen enkele minuten configureren, ongeacht het aantal. Azure Policy-setup kost ongeveer 1 uur voor de initiële configuratie, maar biedt daarna volledig geautomatiseerde enforcement zonder verdere menselijke interventie. Wat betreft kosten is HTTPS-Only enforcement volledig gratis zonder extra Azure-kosten, en TLS-certificaten voor custom domains zijn beschikbaar via Azure-managed certificates zonder extra kosten, wat resulteert in totale implementatiekosten van nul euro.

Monitoring

Gebruik PowerShell-script azure-functions-https-only.ps1 (functie Invoke-Monitoring) – Controleert alle Azure Functions in alle subscriptions op HTTPS alleen status.

Continue monitoring van HTTPS-Only compliance voor Azure Functions is essentieel om te garanderen dat de beveiligingsconfiguratie over tijd behouden blijft en dat nieuwe Function Apps automatisch worden gedetecteerd en geconfigureerd. Monitoring vormt een kritieke component van een effectief security governance-programma, omdat het niet alleen de huidige compliance-status weergeeft, maar ook trends identificeert en waarschuwingen genereert wanneer non-compliant resources worden gedetecteerd. Organisaties moeten een gestructureerde monitoring-aanpak implementeren die zowel proactieve detectie als reactieve rapportage omvat.

Het monitoring-script dat beschikbaar is voor deze beveiligingscontrole biedt een geautomatiseerde manier om alle Azure Functions binnen een subscription of tenant te controleren op hun HTTPS-Only status. Het script maakt gebruik van de Azure Resource Manager API om alle Function Apps op te halen en hun configuratie-eigenschappen te analyseren, wat resulteert in een gedetailleerd rapport dat kan worden gebruikt voor compliance-verificatie en audit-doeleinden. Het script is ontworpen om te worden uitgevoerd als onderdeel van regelmatige compliance-checks, of als reactie op specifieke events zoals nieuwe Function App deployments.

Voor elke Function App die door het monitoring-script wordt geanalyseerd, wordt een uitgebreide set informatie verzameld en gerapporteerd. De Function App naam en resource group worden vastgelegd om unieke identificatie mogelijk te maken en om de locatie van de resource binnen de Azure-infrastructuur duidelijk te maken. Deze informatie is essentieel voor het snel kunnen lokaliseren en remediëren van non-compliant resources wanneer deze worden gedetecteerd. De HTTPS-Only status wordt gerapporteerd als ingeschakeld of uitgeschakeld, wat een directe indicatie geeft van de compliance-status van de specifieke Function App.

Naast de technische status wordt ook de compliance status gerapporteerd, wat een geaggregeerde weergave biedt van of de Function App voldoet aan de beveiligingsvereisten. Deze compliance status kan worden gebruikt voor management reporting en voor het genereren van compliance-dashboards die een overzicht geven van de algehele security posture van de organisatie. De Subscription ID wordt ook vastgelegd in het rapport, wat belangrijk is voor organisaties met meerdere subscriptions omdat het helpt bij het organiseren van compliance-data per subscription en bij het identificeren van subscriptions die mogelijk extra aandacht vereisen.

Het monitoring-script kan worden geconfigureerd om te worden uitgevoerd op verschillende frequenties, afhankelijk van de behoeften van de organisatie. Voor omgevingen met frequente deployments kan dagelijkse monitoring worden geconfigureerd om snel te reageren op nieuwe Function Apps die mogelijk non-compliant zijn. Voor meer stabiele omgevingen kan wekelijkse of maandelijkse monitoring voldoende zijn. Het is belangrijk om de monitoring-frequentie af te stemmen op de deployment-frequentie en op de risicotolerantie van de organisatie, waarbij kritieke omgevingen mogelijk meer frequente monitoring vereisen dan development- of test-omgevingen.

Azure Policy biedt een alternatieve en krachtige manier om HTTPS-Only compliance te monitoren via het ingebouwde compliance-dashboard. Dit dashboard biedt real-time inzicht in het percentage compliant Function Apps binnen de scope van de policy, en kan worden gebruikt voor continue monitoring zonder dat handmatige script-executie vereist is. Het dashboard toont niet alleen de algehele compliance-percentage, maar ook gedetailleerde informatie over individuele non-compliant resources, wat helpt bij het identificeren van specifieke Function Apps die aandacht vereisen. Het compliance-dashboard kan worden geconfigureerd om automatisch waarschuwingen te genereren wanneer de compliance-percentage onder een bepaalde drempelwaarde daalt, wat proactieve monitoring mogelijk maakt.

Voor geavanceerde monitoring-scenario's kunnen de resultaten van het monitoring-script worden geïntegreerd met externe monitoring- en SIEM-systemen (Security Information and Event Management) voor gecentraliseerde security monitoring. Dit maakt het mogelijk om HTTPS-Only compliance te integreren in een breder security monitoring-programma, waarbij compliance-data wordt gecombineerd met andere security-events voor een holistisch beeld van de security posture. De script-output kan worden geformatteerd als JSON of CSV voor eenvoudige integratie met externe systemen, en kan worden verzonden naar log aggregation platforms zoals Azure Log Analytics, Splunk of andere SIEM-oplossingen.

Regelmatige monitoring via Azure Policy compliance-dashboard of geautomatiseerd via het monitoring-script is essentieel voor het behouden van continue compliance. Organisaties moeten een monitoring-schema opstellen dat past bij hun operationele model en compliance-vereisten, en moeten ervoor zorgen dat de monitoring-resultaten regelmatig worden gereviewed door security teams en management. Monitoring vormt niet alleen een verificatiemethode, maar ook een proactieve manier om security-risico's te identificeren en te mitigeren voordat ze kunnen escaleren tot echte beveiligingsincidenten.

Remediatie

Gebruik PowerShell-script azure-functions-https-only.ps1 (functie Invoke-Remediation) – Automatische remediation: stelt HTTPS alleen in op alle non-compliant Functions.

Remediatie van non-compliant Azure Functions vormt een kritieke stap in het proces van het bereiken en behouden van HTTPS-Only compliance binnen een organisatie. Wanneer monitoring of compliance-checks non-compliant Function Apps identificeren, moet een gestructureerd remediatieproces worden gevolgd om deze resources te configureren volgens de beveiligingsvereisten. Het remediatieproces moet zorgvuldig worden uitgevoerd om te voorkomen dat bestaande functionaliteit wordt verstoord, terwijl tegelijkertijd de beveiligingsconfiguratie wordt verbeterd.

Het remediatieproces begint met de identificatie van alle non-compliant Function Apps binnen de scope van de remediatie. Dit kan worden gedaan door het uitvoeren van het monitoring-script of door gebruik te maken van Azure Policy compliance-rapporten die automatisch alle non-compliant resources identificeren. De identificatie moet een complete lijst opleveren van alle Function Apps die aandacht vereisen, inclusief hun namen, resource groups, subscription IDs en de specifieke reden waarom ze als non-compliant worden beschouwd. Deze informatie vormt de basis voor het plannen van de remediatie-activiteiten en voor het schatten van de benodigde tijd en resources.

Voor productie-omgevingen of kritieke Function Apps wordt sterk aanbevolen om een backup te maken van de huidige configuratie voordat remediatie wordt uitgevoerd. Hoewel het inschakelen van HTTPS-Only normaal gesproken geen negatieve impact heeft op de functionaliteit van Function Apps, kan het in zeldzame gevallen problemen veroorzaken met legacy-clients of externe systemen die mogelijk niet correct omgaan met HTTP-naar-HTTPS redirects. Het maken van een configuratie-backup maakt het mogelijk om snel terug te keren naar de oorspronkelijke configuratie als er onverwachte problemen optreden. De backup kan worden gemaakt door de huidige configuratie-eigenschappen te exporteren naar een JSON-bestand of door gebruik te maken van Azure Resource Manager templates die de huidige staat van de Function App vastleggen.

De daadwerkelijke remediatie wordt uitgevoerd door de httpsOnly-eigenschap in te stellen op true voor alle geïdentificeerde non-compliant Function Apps. Dit kan worden gedaan via het Update-AzFunctionAppSetting cmdlet in combinatie met het Set-AzFunctionApp cmdlet, of door gebruik te maken van het geautomatiseerde remediatie-script dat specifiek is ontworpen voor deze beveiligingscontrole. Het script biedt de mogelijkheid om remediatie uit te voeren op alle non-compliant Functions in één keer, wat tijd bespaart en consistentie garandeert. Voor organisaties die de voorkeur geven aan een meer gecontroleerde aanpak kan remediatie ook worden uitgevoerd op basis van resource groups of subscriptions, wat een gefaseerde implementatie mogelijk maakt.

Na het uitvoeren van de remediatie is verificatie essentieel om te garanderen dat de configuratie correct is toegepast en dat de Function Apps daadwerkelijk compliant zijn geworden. Verificatie omvat het testen of HTTP-requests correct worden omgeleid naar HTTPS, wat kan worden gedaan door handmatig een HTTP-request te maken naar de Function App en te observeren of deze automatisch wordt omgeleid naar HTTPS. Daarnaast moet worden geverifieerd dat directe HTTPS-verbindingen correct functioneren zonder certificaatfouten of andere problemen. Voor Functions met aangepaste domeinnamen moet extra aandacht worden besteed aan de certificaatconfiguratie om te garanderen dat HTTPS-verbindingen niet falen vanwege certificaatproblemen.

Na succesvolle remediatie en verificatie moet de documentatie worden bijgewerkt om de nieuwe configuratie te reflecteren. Dit omvat het bijwerken van configuratie-inventarissen, compliance-tracking-systemen en eventuele interne documentatie die verwijst naar de HTTPS-Only configuratie van Function Apps. Compliance-tracking moet worden bijgewerkt om aan te geven dat de Function Apps nu compliant zijn, wat belangrijk is voor audit-doeleinden en voor het bijhouden van de algehele compliance-status van de organisatie. Deze documentatie-updates helpen bij het behouden van accurate records en bij het ondersteunen van toekomstige compliance-audits.

Voor geautomatiseerde remediatie-scenario's kan Azure Policy worden geconfigureerd om automatisch remediatie-tasks uit te voeren wanneer non-compliant resources worden gedetecteerd. Deze automatische remediatie elimineert de noodzaak voor handmatige interventie en zorgt ervoor dat nieuwe non-compliant Function Apps snel worden geconfigureerd zonder dat security teams hiervoor expliciet actie hoeven te ondernemen. Automatische remediatie kan worden geconfigureerd om direct uit te voeren of om handmatige goedkeuring te vereisen, afhankelijk van de governance-vereisten van de organisatie. Deze aanpak is bijzonder effectief in combinatie met Azure Policy enforcement, omdat het een volledig geautomatiseerde compliance-cyclus creëert van detectie tot remediatie.

Compliance en Auditing

HTTPS-Only enforcement voor Azure Functions is een fundamentele beveiligingscontrole die voldoet aan een breed scala aan internationale en nationale compliance-frameworks die versleuteling van data in transit vereisen. Deze beveiligingsmaatregel is niet alleen een best practice, maar in veel gevallen een expliciete vereiste van verschillende compliance-standaarden die van toepassing zijn op Nederlandse overheidsorganisaties en bedrijven die gevoelige gegevens verwerken. Het begrijpen van de compliance-implicaties is essentieel voor security officers en compliance-managers die verantwoordelijk zijn voor het aantonen van naleving tijdens audits en assessments.

De CIS Azure Foundations Benchmark v2.0.0 controle 9.5 vereist expliciet dat HTTPS alleen is ingeschakeld voor alle Azure Function Apps. De Center for Internet Security (CIS) is een internationaal erkende organisatie die beveiligingsbest practices ontwikkelt voor cloud-omgevingen, en hun Azure Foundations Benchmark wordt wereldwijd gebruikt als referentie voor cloud security-configuratie. Controle 9.5 is geclassificeerd als een Level 1 controle, wat betekent dat deze relatief eenvoudig te implementeren is zonder significante impact op functionaliteit, maar wel een aanzienlijke beveiligingswaarde biedt. Naleving van deze controle is essentieel voor organisaties die streven naar CIS-compliant Azure-omgevingen, en wordt vaak vereist door security frameworks en insurance-vereisten.

De Baseline Informatiebeveiliging Overheid (BIO) is het Nederlandse beveiligingskader dat specifiek is ontwikkeld voor overheidsorganisaties en bevat expliciete vereisten voor netwerkbeveiliging en versleuteling. BIO Thema 13.01 behandelt netwerkbeveiliging en vereist encryptie in transit voor alle gevoelige communicatie. Voor Azure Functions die worden gebruikt door overheidsorganisaties is HTTPS-Only enforcement daarom niet alleen een best practice, maar een verplichte maatregel om te voldoen aan de BIO-normen. Tijdens BIO-assessments wordt gecontroleerd of organisaties passende technische maatregelen hebben geïmplementeerd om netwerkcommunicatie te beveiligen, en HTTPS-Only vormt een kritieke component van deze maatregelen.

ISO 27001:2022 is een internationaal erkende informatiebeveiligingsstandaard die wordt gebruikt door organisaties wereldwijd om hun Information Security Management System (ISMS) te certificeren. Controle A.13.1.1 binnen ISO 27001 behandelt netwerkcontroles en vereist dat organisaties passende beveiligingsmaatregelen implementeren voor netwerkcommunicatie, inclusief het gebruik van versleuteling. TLS-versleuteling via HTTPS vormt de primaire manier om te voldoen aan deze vereiste voor web-based services en APIs. Voor organisaties die ISO 27001-certificering nastreven of behouden, is HTTPS-Only enforcement voor Azure Functions een essentiële controle die moet worden gedocumenteerd en geaudit tijdens certificeringsaudits.

De NIS2-richtlijn (Network and Information Systems Directive 2) is Europese wetgeving die van toepassing is op essentiële en belangrijke entiteiten in verschillende sectoren, inclusief overheidsorganisaties, energie, transport, gezondheidszorg en financiële diensten. Artikel 21 van de NIS2-richtlijn vereist dat organisaties passende technische en organisatorische maatregelen implementeren voor cybersecurity risicobeheer, inclusief versleuteling van gevoelige communicatie. Voor Nederlandse organisaties die onder de NIS2-richtlijn vallen, is HTTPS-Only enforcement voor Azure Functions een verplichte maatregel om te voldoen aan deze Europese wetgeving. Naleving wordt gecontroleerd door de Autoriteit Consument en Markt (ACM) en andere toezichthouders, en non-compliance kan leiden tot aanzienlijke boetes.

De Algemene Verordening Gegevensbescherming (AVG), ook bekend als GDPR, is de Europese privacywetgeving die vereist dat organisaties passende technische en organisatorische maatregelen implementeren om persoonsgegevens te beschermen. Artikel 32 van de AVG specificeert dat organisaties passende beveiligingsmaatregelen moeten implementeren, inclusief versleuteling van data in transit. Voor Azure Functions die persoonsgegevens verwerken, is HTTPS-Only enforcement daarom een verplichte maatregel om te voldoen aan de AVG-vereisten. Tijdens AVG-audits en data protection impact assessments (DPIA's) wordt gecontroleerd of organisaties passende versleuteling hebben geïmplementeerd, en HTTPS-Only vormt een kritieke component van deze beveiligingsmaatregelen.

Naast deze primaire compliance-frameworks zijn er nog verschillende andere standaarden en reguleringen die versleuteling in transit vereisen, zoals PCI-DSS voor organisaties die betalingsgegevens verwerken, en sector-specifieke vereisten voor bijvoorbeeld de zorgsector of financiële dienstverlening. Voor alle deze frameworks geldt dat HTTPS-Only enforcement voor Azure Functions een fundamentele beveiligingscontrole is die moet worden geïmplementeerd en gedocumenteerd. Tijdens compliance-audits wordt gecontroleerd of deze maatregel daadwerkelijk is geïmplementeerd en of deze correct functioneert, wat betekent dat organisaties niet alleen de configuratie moeten implementeren, maar ook moeten kunnen aantonen dat deze actief is en effectief werkt.

Voor audit-doeleinden is het essentieel om documentatie bij te houden die aantoont dat HTTPS-Only enforcement is geïmplementeerd voor alle relevante Azure Functions. Deze documentatie moet compliance-rapporten bevatten die de status van elke Function App weergeven, screenshots of configuratie-exports die de HTTPS-Only instelling aantonen, en test-evidence die bewijst dat HTTP-requests daadwerkelijk worden omgeleid naar HTTPS. Deze audit-evidence is cruciaal voor het succesvol doorstaan van compliance-audits en voor het aantonen van due diligence bij het implementeren van beveiligingsmaatregelen. Organisaties moeten ervoor zorgen dat deze documentatie regelmatig wordt bijgewerkt en beschikbaar is voor auditors wanneer deze wordt gevraagd.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Azure Functions: HTTPS Only .DESCRIPTION CIS Azure Foundations Benchmark - Control 9.5 Controleert of Azure Functions zijn geconfigureerd voor HTTPS Only. Dit zorgt ervoor dat alle HTTP traffic automatisch wordt geredirect naar HTTPS, waardoor data-in-transit protection gegarandeerd is. Waarom is deze control belangrijk? - Data encryption in transit - Preventie van man-in-the-middle attacks - Compliance met security standards - Protection van API keys en sensitive data .NOTES Filename: azure-functions-https-only.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/app-service/azure-functions-https-only.json CIS Control: 9.5 .PARAMETER WhatIf Toont wat het script zou doen zonder daadwerkelijk wijzigingen door te voeren .PARAMETER Monitoring Voert compliance check uit en toont gedetailleerd rapport .PARAMETER Remediation Voert automatische remediatie uit om HTTPS Only te enablen .PARAMETER Revert Draait wijzigingen terug (allows HTTP traffic) .EXAMPLE .\azure-functions-https-only.ps1 Voert basis compliance check uit .EXAMPLE .\azure-functions-https-only.ps1 -Monitoring Toont gedetailleerd compliance rapport .EXAMPLE .\azure-functions-https-only.ps1 -Remediation Enabled HTTPS Only voor non-compliant Azure Functions #> # ============================================================================ # REQUIREMENTS # ============================================================================ #Requires -Version 5.1 #Requires -Modules Az.Accounts #Requires -Modules Az.Functions # ============================================================================ # PARAMETERS # ============================================================================ [CmdletBinding()] param( [Parameter()][switch]$WhatIf, [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Revert ) # ============================================================================ # GLOBAL VARIABLES # ============================================================================ $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' $PolicyName = "Azure Functions: HTTPS Only" # ============================================================================ # FUNCTION: Connect-RequiredServices # ============================================================================ function Connect-RequiredServices { function Invoke-Revert { Write-Host "`nReverting HTTPS Only settings..." -ForegroundColor Yellow Write-Host "⚠️ WAARSCHUWING: HTTP traffic toestaan verhoogt security risk!" -ForegroundColor Red $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue foreach ($func in $functionApps) { if ($func.HttpsOnly) { Update-AzFunctionApp -Name $func.Name -ResourceGroupName $func.ResourceGroup -HttpsOnly $false -Force Write-Host " ✓ Disabled HTTPS Only for $($func.Name)" -ForegroundColor Green } } } try { $context = Get-AzContext if (-not $context) { Write-Verbose "Connecting to Azure..." Connect-AzAccount | Out-Null } else { Write-Verbose "Already connected to Azure as $($context.Account.Id)" } } catch { Write-Error "Failed to connect to Azure: $_" throw } } # ============================================================================ # FUNCTION: Test-Compliance # ============================================================================ function Test-Compliance { Write-Verbose "Testing compliance for: $PolicyName..." $result = [PSCustomObject]@{ ScriptName = "azure-functions-https-only" PolicyName = $PolicyName IsCompliant = $false TotalResources = 0 CompliantCount = 0 NonCompliantCount = 0 Details = @() Recommendations = @() } function Invoke-Revert { Write-Host "`nReverting HTTPS Only settings..." -ForegroundColor Yellow Write-Host "⚠️ WAARSCHUWING: HTTP traffic toestaan verhoogt security risk!" -ForegroundColor Red $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue foreach ($func in $functionApps) { if ($func.HttpsOnly) { Update-AzFunctionApp -Name $func.Name -ResourceGroupName $func.ResourceGroup -HttpsOnly $false -Force Write-Host " ✓ Disabled HTTPS Only for $($func.Name)" -ForegroundColor Green } } } try { Write-Verbose "Retrieving all Azure Functions..." $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue if (-not $functionApps) { $result.Details += "Geen Azure Functions gevonden in dit subscription" $result.IsCompliant = $true return $result } $result.TotalResources = @($functionApps).Count foreach ($func in $functionApps) { Write-Verbose "Checking function: $($func.Name)" if ($func.HttpsOnly) { $result.CompliantCount++ $result.Details += "✓ Function '$($func.Name)' heeft HTTPS Only enabled" } else { $result.NonCompliantCount++ $result.Details += "✗ Function '$($func.Name)' accepteert HTTP traffic (ResourceGroup: $($func.ResourceGroup))" $result.Recommendations += "Enable HTTPS Only voor Azure Function '$($func.Name)'" } } $result.IsCompliant = ($result.NonCompliantCount -eq 0) if ($result.NonCompliantCount -gt 0) { $result.Recommendations += "Run met -Remediation om automatisch HTTPS Only te configureren" } } catch { $result.Details += "ERROR: $($_.Exception.Message)" } return $result } # ============================================================================ # FUNCTION: Invoke-Remediation # ============================================================================ function Invoke-Remediation { Write-Host "`nStarting remediation for: $PolicyName..." -ForegroundColor Cyan Write-Host "=" * 80 -ForegroundColor Cyan function Invoke-Revert { Write-Host "`nReverting HTTPS Only settings..." -ForegroundColor Yellow Write-Host "⚠️ WAARSCHUWING: HTTP traffic toestaan verhoogt security risk!" -ForegroundColor Red $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue foreach ($func in $functionApps) { if ($func.HttpsOnly) { Update-AzFunctionApp -Name $func.Name -ResourceGroupName $func.ResourceGroup -HttpsOnly $false -Force Write-Host " ✓ Disabled HTTPS Only for $($func.Name)" -ForegroundColor Green } } } try { $fixed = 0 $failed = 0 $skipped = 0 $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue if (-not $functionApps) { Write-Host "Geen Azure Functions gevonden" -ForegroundColor Gray return } foreach ($func in $functionApps) { if ($func.HttpsOnly) { Write-Host " ✓ $($func.Name): Already configured" -ForegroundColor Green $skipped++ } else { Write-Host " Configuring: $($func.Name)..." -ForegroundColor Gray function Invoke-Revert { Write-Host "`nReverting HTTPS Only settings..." -ForegroundColor Yellow Write-Host "⚠️ WAARSCHUWING: HTTP traffic toestaan verhoogt security risk!" -ForegroundColor Red $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue foreach ($func in $functionApps) { if ($func.HttpsOnly) { Update-AzFunctionApp -Name $func.Name -ResourceGroupName $func.ResourceGroup -HttpsOnly $false -Force Write-Host " ✓ Disabled HTTPS Only for $($func.Name)" -ForegroundColor Green } } } try { Update-AzFunctionApp ` -Name $func.Name ` -ResourceGroupName $func.ResourceGroup ` -HttpsOnly $true ` -Force ` -ErrorAction Stop | Out-Null Write-Host " [OK] HTTPS Only enabled" -ForegroundColor Green $fixed++ } catch { Write-Host " ✗ Failed: $($_.Exception.Message)" -ForegroundColor Red $failed++ } } } Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Remediation Summary:" -ForegroundColor White Write-Host " Configured: $fixed" -ForegroundColor Green Write-Host " Already compliant: $skipped" -ForegroundColor Green if ($failed -gt 0) { Write-Host " Failed: $failed" -ForegroundColor Red } if ($fixed -gt 0) { Write-Host "`n[OK] Remediation completed successfully" -ForegroundColor Green Write-Host " Alle HTTP traffic wordt nu geredirect naar HTTPS" -ForegroundColor Gray } } catch { Write-Error "Remediation failed: $_" throw } } # ============================================================================ # FUNCTION: Invoke-Monitoring # ============================================================================ function Invoke-Monitoring { $result = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Azure Functions gecontroleerd: $($result.TotalResources)" -ForegroundColor White Write-Host "Compliant: $($result.CompliantCount)" -ForegroundColor Green $color = if ($result.NonCompliantCount -gt 0) { "Red" } else { "Green" } Write-Host "Non-compliant: $($result.NonCompliantCount)" -ForegroundColor $color if ($result.Details) { Write-Host "`nDetails:" -ForegroundColor Yellow foreach ($detail in $result.Details) { Write-Host " $detail" -ForegroundColor Gray } } if ($result.Recommendations) { Write-Host "`nAanbevelingen:" -ForegroundColor Yellow foreach ($recommendation in $result.Recommendations) { Write-Host " → $recommendation" -ForegroundColor Cyan } } return $result } # ============================================================================ # MAIN EXECUTION BLOCK # ============================================================================ function Invoke-Revert { Write-Host "`nReverting HTTPS Only settings..." -ForegroundColor Yellow Write-Host "⚠️ WAARSCHUWING: HTTP traffic toestaan verhoogt security risk!" -ForegroundColor Red $functionApps = Get-AzFunctionApp -ErrorAction SilentlyContinue foreach ($func in $functionApps) { if ($func.HttpsOnly) { Update-AzFunctionApp -Name $func.Name -ResourceGroupName $func.ResourceGroup -HttpsOnly $false -Force Write-Host " ✓ Disabled HTTPS Only for $($func.Name)" -ForegroundColor Green } } } try { Connect-RequiredServices if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { if ($WhatIf) { Write-Host "`n=== WHATIF MODE ===" -ForegroundColor Yellow Write-Host "Zou HTTPS Only configureren voor: $PolicyName" -ForegroundColor Yellow $result = Test-Compliance if ($result.NonCompliantCount -gt 0) { Write-Host "Zou HTTPS Only enablen voor $($result.NonCompliantCount) Azure Function(s)" -ForegroundColor Yellow } Write-Host "===================`n" -ForegroundColor Yellow } else { Invoke-Remediation } } elseif ($Revert) { Invoke-Revert } else { $result = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Compliance Check: $PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($result.IsCompliant) { Write-Host "Status: [OK] COMPLIANT" -ForegroundColor Green Write-Host "Alle Azure Functions hebben HTTPS Only enabled" -ForegroundColor Green } else { Write-Host "Status: [FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host "Aantal non-compliant functions: $($result.NonCompliantCount)" -ForegroundColor Red Write-Host "`nRun met -Monitoring voor gedetailleerd rapport" -ForegroundColor Yellow Write-Host "Run met -Remediation om automatisch te configureren" -ForegroundColor Yellow } } } catch { Write-Error "An error occurred: $_" Write-Error $_.ScriptStackTrace exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder HTTPS-Only enforcement voor Azure Functions blijven serverless APIs en backend-functies kwetsbaar voor data-interceptie via onversleuteld HTTP-verkeer. Man-in-the-middle aanvallen worden mogelijk op publieke netwerken, gecompromitteerde routers en malafide ISPs waarbij aanvallers HTTP-communicatie in plaintext kunnen onderscheppen wat betekent dat API-sleutels en authentication tokens leesbaar over het netwerk worden verzonden - een enkel gestolen token kan onbeperkte toegang geven tot backend-systemen en databases, gebruikersgegevens en gevoelige business data kunnen worden geëxfiltreerd tijdens transmissie wat AVG-schendingen oplevert, function request/response payloads met confidential information zoals financiële transacties, persoonsgegevens of intellectueel eigendom kunnen worden gelezen door aanvallers, en sessie-cookies kunnen worden gestolen voor session hijacking. Credential stuffing en replay attacks worden gefaciliteerd waarbij gestolen HTTP-verkeer later opnieuw kan worden afgespeeld om unauthorized function-aanroepen te maken. Azure Functions worden vaak gebruikt voor kritieke backend-operaties zoals payment processing, data synchronization, webhook handlers en API integrations - onversleutelde communicatie compromitteert al deze use cases. Compliance-schendingen zijn onvermijdelijk: CIS Azure Benchmark 9.5 vereist HTTPS-enforcement voor alle web-based services inclusief Functions, BIO 13.01.02 netwerkversleuteling is mandatory, ISO 27001 A.13.1 netwerkbeveiliging kan niet worden aangetoond zonder versleuteling in transit, NIS2 Artikel 21 versleutelingsvereisten worden geschonden, PCI-DSS Requirement 4.1 is non-compliant voor Functions die betaaldata verwerken. Reputatieschade ontstaat bij datalekken waarbij klanten ontdekken dat API-communicatie onversleuteld was. Geschatte kosten per data breach: €100.000-1.000.000 volgens IBM Cost of Data Breach Report. Het risico is hoog voor alle Azure Functions ongeacht use case omdat HTTP-exposure fundamental security anti-pattern is, kritiek voor Functions die gevoelige data verwerken of payment/financial operations uitvoeren.

Management Samenvatting

HTTPS-Only enforcement voor Azure Functions dwingt versleutelde communicatie af door alle HTTP-requests (poort 80) automatisch te redirecten naar HTTPS (poort 443), wat data-in-transit encryption garandeert voor alle function invocations. Implementatie: configureer httpsOnly-property op true via Azure Portal onder Configuration → General settings → HTTPS Only → On, of gebruik geautomatiseerd PowerShell-script voor bulk-deployment: Get-AzFunctionApp | Set-AzFunctionApp -HttpsOnly $true over alle Functions in subscription. Deze instelling is platform-enforced zonder code-wijzigingen, heeft nul performance-impact (moderne TLS is efficiënt), en werkt voor alle function trigger types: HTTP triggers worden automatic ge-redirect naar HTTPS, non-HTTP triggers (Queue, Timer, Event Grid) worden niet beïnvloed maar beste practice is om HTTPS-Only consistent toe te passen. Deze maatregel is absoluut verplicht voor ALLE Azure Functions zonder uitzonderingen (productie, development, test), mandatory voor compliance met CIS 9.5, BIO 13.01.02, ISO 27001 A.13.1, NIS2 Artikel 21, PCI-DSS 4.1, en considered fundamental security baseline door NIST, SANS, OWASP. Implementatie-effort: 2-4 uur voor geautomatiseerde deployment over alle Functions met compliance-monitoring en Azure Policy-enforcement, geen extra Azure-kosten, instant actief zonder downtime. Doorlopende inspanning: nul - eenmaal ingeschakeld blijft HTTPS-Only permanent actief. Return on investment komt van: eliminated man-in-the-middle attack risks, data breach prevention (gemiddeld €100K-1M cost avoidance), compliance audit success voor alle frameworks, en zero implementation costs bij critical security value. Optioneel: implementeer Azure API Management als gateway voor Functions voor additional security layers zoals rate limiting, IP filtering en OAuth validation.