Dela via


Skydda Azure Functions

På många sätt är planeringen för säker utveckling, distribution och drift av serverlösa funktioner ungefär densamma som för alla webbaserade eller molnbaserade program. Azure App Service tillhandahåller värdinfrastrukturen för dina funktionsappar. Den här artikeln innehåller säkerhetsstrategier för att köra funktionskoden och hur App Service kan hjälpa dig att skydda dina funktioner.

Azure App Service skyddar och förstärker aktivt sina plattformskomponenter, inklusive virtuella Azure-datorer, lagring, nätverksanslutningar, webbramverk och funktioner för hantering och integrering. App Service genomgår kontinuerliga, rigorösa efterlevnadskontroller för att säkerställa att:

Mer information om infrastruktur- och plattformssäkerhet i Azure finns i Azure Trust Center.

En uppsättning säkerhetsrekommendationer som följer Microsofts prestandamått för molnsäkerhet finns i Azure Security Baseline för Azure Functions.

Säker åtgärd

Det här avsnittet beskriver hur du konfigurerar och kör funktionsappen så säkert som möjligt.

Defender för molnet

Defender för molnet integreras med din funktionsapp i portalen. Det ger kostnadsfritt en snabb utvärdering av potentiella konfigurationsrelaterade säkerhetsrisker. Funktionsappar som körs i en dedikerad plan kan även använda Defender för molnets förbättrade säkerhetsfunktioner till en extra kostnad. Mer information finns i Defender för App Service.

Logga och övervaka

Ett sätt att identifiera attacker är genom aktivitetsövervakning och loggningsanalys. Functions integreras med Application Insights för att samla in logg-, prestanda- och feldata för din funktionsapp. Application Insights identifierar automatiskt prestandaavvikelser och innehåller kraftfulla analysverktyg som hjälper dig att diagnostisera problem och förstå hur dina funktioner används. Mer information finns i Övervaka Azure Functions.

Functions integreras också med Azure Monitor-loggar så att du kan konsolidera funktionsapploggar med systemhändelser för enklare analys. Du kan använda diagnostikinställningar för att konfigurera direktexport av plattformsloggar och mått för dina funktioner till valfri mål, till exempel en Logs Analytics-arbetsyta. Mer information finns i Övervaka Azure Functions med Azure Monitor-loggar.

För hotidentifiering på företagsnivå och automatisering av svar kan du strömma dina loggar och händelser till en Logs Analytics-arbetsyta. Du kan sedan ansluta Microsoft Sentinel till den här arbetsytan. Mer information finns i Vad är Microsoft Sentinel.

Fler säkerhetsrekommendationer för observerbarhet finns i Azure-säkerhetsbaslinjen för Azure Functions.

Säkra HTTP-slutpunkter

HTTP-slutpunkter som exponeras offentligt ger en attackvektor för skadliga aktörer. När du skyddar DINA HTTP-slutpunkter bör du använda en säkerhetsmetod i flera lager. Dessa tekniker kan användas för att minska sårbarheten för offentligt exponerade HTTP-slutpunkter, ordnade från de mest grundläggande till mest säkra och restriktiva:

Kräv HTTPS

Som standard kan klienter ansluta till funktionsslutpunkter med hjälp av antingen HTTP eller HTTPS. Du bör omdirigera HTTP till HTTPS eftersom HTTPS använder TLS-protokollet för att tillhandahålla en säker anslutning, som både är krypterad och autentiserad. Mer information finns i Framtvinga HTTPS.

När du behöver HTTPS bör du också kräva den senaste TLS-versionen. Mer information finns i Framtvinga TLS-versioner.

Mer information finns i Säkra anslutningar (TLS).

Funktionsåtkomstnycklar

Med Functions kan du använda nycklar för att göra det svårare att komma åt funktionsslutpunkterna. Om inte HTTP-åtkomstnivån på en HTTP-utlöst funktion är inställd anonymouspå måste begäranden innehålla en åtkomstnyckel i begäran. Mer information finns i Arbeta med åtkomstnycklar i Azure Functions.

Även om åtkomstnycklar kan ge viss lindring för oönskad åtkomst är det enda sättet att skydda funktionsslutpunkterna genom att implementera positiv autentisering av klienter som har åtkomst till dina funktioner. Du kan sedan fatta auktoriseringsbeslut baserat på identitet.

För den högsta säkerhetsnivån kan du även skydda hela programarkitekturen i ett virtuellt nätverk med hjälp av privata slutpunkter eller genom att köra isolerat..

Inaktivera administrativa slutpunkter

Funktionsappar kan hantera administrativa slutpunkter under den /admin väg som kan användas för åtgärder som att hämta information om värdstatus och utföra testanrop. När begäranden mot dessa slutpunkter exponeras måste de innehålla appens huvudnyckel. Administrativa åtgärder är också tillgängliga via API:et för Azure Resource Manager, vilket erbjuder Azure RBAC. Du kan inaktivera slutpunkterna /admin genom att ange webbplatsegenskapen functionsRuntimeAdminIsolationEnabled till true. Det går inte att ange den här egenskapen för appar som körs på SKU:n för Linux-förbrukning och den kan inte anges för appar som körs på version 1.x av Azure Functions. Om du använder version 1.x måste du först migrera till version 4.x.

Aktivera App Service-autentisering/auktorisering

Med App Service-plattformen kan du använda Microsoft Entra-ID och flera identitetsprovidrar som inte kommer från Microsoft för att autentisera klienter. Du kan använda den här strategin för att implementera anpassade auktoriseringsregler för dina funktioner och du kan arbeta med användarinformation från funktionskoden. Mer information finns i Autentisering och auktorisering i Azure App Service och Arbeta med klientidentiteter.

Använda Azure API Management (APIM) för att autentisera begäranden

APIM tillhandahåller olika API-säkerhetsalternativ för inkommande begäranden. Mer information finns i API Management-autentiseringsprinciper. Med APIM på plats kan du konfigurera funktionsappen så att den endast accepterar begäranden från IP-adressen för din APIM-instans. Mer information finns i BEGRÄNSNINGAR för IP-adresser.

Behörigheter

Precis som med alla program eller tjänster är målet att köra funktionsappen med lägsta möjliga behörighet.

Behörigheter för användarhantering

Functions har stöd för inbyggd rollbaserad åtkomstkontroll i Azure (Azure RBAC). Azure-roller som stöds av Functions är deltagare, ägare och läsare.

Behörigheter gäller på funktionsappsnivå. Deltagarrollen krävs för att utföra de flesta funktionsaktiviteter på appnivå. Du behöver också rollen Deltagare tillsammans med behörigheten Övervakningsläsare för att kunna visa loggdata i Application Insights. Endast rollen Ägare kan ta bort en funktionsapp.

Ordna funktioner efter behörighet

Anslutningssträngar och andra autentiseringsuppgifter som lagras i programinställningar ger alla funktioner i funktionsappen samma uppsättning behörigheter i den associerade resursen. Överväg att minimera antalet funktioner med åtkomst till specifika autentiseringsuppgifter genom att flytta funktioner som inte använder dessa autentiseringsuppgifter till en separat funktionsapp. Du kan alltid använda tekniker som funktionslänkning för att skicka data mellan funktioner i olika funktionsappar.

Hanterade identiteter

Med en hanterad identitet från Microsoft Entra-ID kan din app enkelt komma åt andra Microsoft Entra-skyddade resurser, till exempel Azure Key Vault. Azure-plattformen hanterar identiteten, så du behöver inte etablera eller rotera några hemligheter. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.

Du kan bevilja två typer av identiteter till ditt program:

  • En systemtilldelad identitet är kopplad till appen och tas bort om appen tas bort. En app kan bara ha en systemtilldelad identitet.
  • En användartilldelad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användartilldelade identiteter. En användartilldelad identitet kan tilldelas flera Azure-resurser, till exempel två App Service-appar.

Hanterade identiteter kan användas i stället för hemliga nycklar för att koppla upp till vissa utlösare och bindningar. Se Identitetsbaserade anslutningar.

Mer information finns i Använda hanterade identiteter för App Service och Azure Functions.

Begränsa CORS-åtkomst

Resursdelning mellan ursprung (CORS) är ett sätt att tillåta webbappar som körs i en annan domän att göra begäranden till HTTP-utlösarslutpunkterna. App Service har inbyggt stöd för att hantera nödvändiga CORS-huvuden i HTTP-begäranden. CORS-regler definieras på funktionsappsnivå.

Det är frestande att använda ett jokertecken som gör att alla webbplatser kan komma åt din slutpunkt. Den här metoden motverkar syftet med CORS, vilket är att förhindra skriptattacker mellan webbplatser. Lägg i stället till en separat CORS-post för domänen för varje webbapp som måste komma åt slutpunkten.

Hantera hemligheter

För att kunna ansluta till de olika tjänster och resurser som behövs för att köra koden måste funktionsappar kunna komma åt hemligheter, till exempel anslutningssträng och tjänstnycklar. I det här avsnittet beskrivs hur du lagrar hemligheter som krävs av dina funktioner.

Lagra aldrig hemligheter i funktionskoden.

Programinställningar

Som standard lagrar du anslutningssträng och hemligheter som används av funktionsappen och bindningar som programinställningar. Den här metoden gör dessa autentiseringsuppgifter tillgängliga för både funktionskoden och de olika bindningar som används av funktionen. Namnet på programinställningen (nyckel) används för att hämta det faktiska värdet, som är hemligheten.

Till exempel kräver varje funktionell app ett lagringskonto som är kopplat och används av programmiljön. Som standard lagras anslutningen till det här lagringskontot i en programinställning med namnet AzureWebJobsStorage.

Appinställningar och anslutningssträng lagras krypterade i Azure. De dekrypteras bara innan de matas in i appens processminne när appen startar. Krypteringsnycklarna roteras regelbundet. Om du föredrar att hantera säker lagring av dina hemligheter bör appinställningarna i stället vara referenser till Azure Key Vault-hemligheter.

Du kan också kryptera inställningarna som standard i local.settings.json filen när du utvecklar funktioner på den lokala datorn. Mer information finns i Kryptera filen med lokala inställningar.

Key Vault-referenser

Även om programinställningarna räcker för de flesta funktioner kanske du vill dela samma hemligheter i flera tjänster. I det här fallet resulterar redundant lagring av hemligheter i fler potentiella sårbarheter. En säkrare metod är att använda en central hemlig lagringstjänst och använda referenser till den här tjänsten i stället för själva hemligheterna.

Azure Key Vault är en tjänst som tillhandahåller centraliserad hantering av hemligheter med fullständig kontroll över åtkomstprinciper och granskningshistorik. Du kan använda en Key Vault-referens i stället för en anslutningssträng eller nyckel i programinställningarna. Mer information finns i Använda Key Vault-referenser för App Service och Azure Functions.

Identitetsbaserade anslutningar

Identiteter kan användas i stället för hemligheter för att ansluta till vissa resurser. Metoden har fördelen att inte kräva hantering av en hemlighet och ger mer detaljerad åtkomstkontroll och granskning.

När du skriver kod som skapar anslutningen till Azure-tjänster som stöder Microsoft Entra-autentisering kan du använda en identitet i stället för en hemlighet eller anslutningssträng. Information om båda anslutningsmetoderna beskrivs i dokumentationen för varje tjänst.

Vissa Azure Functions-bindningstillägg kan konfigureras för åtkomst till tjänster med hjälp av identitetsbaserade anslutningar. Mer information finns i Konfigurera en identitetsbaserad anslutning.

Ange användningskvoter

Överväg att ange en användningskvot för funktioner som körs i en förbrukningsplan. När du anger en daglig GB-sek-gräns för den totala körningen av funktioner i funktionsappen stoppas körningen när gränsen nås. Den här metoden kan potentiellt bidra till att minimera skadlig kod som kör dina funktioner. Information om hur du beräknar förbrukning för dina funktioner finns i Beräkna kostnader för förbrukningsplan.

Datavalidering

Utlösare och bindningar som används av dina funktioner ger ingen extra dataverifiering. Koden måste verifiera alla data som tas emot från en utlösare eller indatabindning. Om en överordnad tjänst komprometteras vill du inte att ovaliderade indata flödar genom dina funktioner. Om din funktion till exempel lagrar data från en Azure Storage-kö i en relationsdatabas måste du verifiera data och parametrisera dina kommandon för att undvika SQL-inmatningsattacker.

Anta inte att data som kommer till din funktion redan har verifierats eller sanerats. Det är också en bra idé att kontrollera att data som skrivs till utdatabindningar är giltiga.

Hantera felhantering

Även om det verkar grundläggande är det viktigt att skriva bra felhantering i dina funktioner. Ohanterade fel överförs till värdsystemet, och körningsmiljön hanterar dessa fel. Olika bindningar hanterar bearbetningen av fel på olika sätt. Mer information finns i Felhantering i Azure Functions.

Inaktivera fjärrfelsökning

Kontrollera att fjärrfelsökning är inaktiverat, förutom när du aktivt felsöker dina funktioner. Du kan inaktivera fjärrfelsökning på fliken Allmänna inställningar i funktionsappens konfiguration i portalen.

Begränsa CORS-åtkomst

Azure Functions stöder resursdelning mellan ursprung (CORS). CORS konfigureras i portalen och via Azure CLI. CORS-listan över tillåtna ursprung gäller på funktionsappsnivå. När CORS är aktiverat inkluderar svaren rubriken Access-Control-Allow-Origin. Mer information finns i Cross-origin resource sharing.

Använd inte jokertecken i listan över tillåtna ursprung. Ange i stället de specifika domäner som du förväntar dig att få förfrågningar från.

Lagra data krypterade

Azure Storage krypterar alla data i ett lagringskonto i vila. För mer information, se Azure Storage-kryptering för vilande data.

Som standard krypteras data med Microsoft-hanterade nycklar. Om du vill ha mer kontroll över krypteringsnycklar kan du ange kundhanterade nycklar som ska användas för kryptering av blob- och fildata. Dessa nycklar måste finnas i Azure Key Vault för att Functions ska kunna komma åt lagringskontot. Mer information finns i Kryptera dina programdata i vila med hjälp av kundhanterade nycklar.

En funktionsapp är ofta beroende av andra resurser, så en del av att skydda appen är att skydda dessa externa resurser. De flesta funktionsappar är som minst beroende av Application Insights och Azure Storage. Mer information om hur du skyddar dessa resurser finns i Azure-säkerhetsbaslinjen för Azure Monitor och Azure-säkerhetsbaslinjen för Storage .

Viktigt!

Lagringskontot används för att lagra viktiga appdata, ibland inklusive själva programkoden. Du bör begränsa åtkomsten från andra appar och användare till lagringskontot.

Du bör också läsa vägledningen för alla resurstyper som din programlogik är beroende av, både som utlösare och bindningar och från funktionskoden.

Säker driftsättning

Integrering av Azure Functions-verktyg gör det enkelt att publicera projektkod för lokala funktioner till Azure. Det är viktigt att förstå hur distributionen fungerar när du överväger säkerhet för en Azure Functions-topologi.

Autentiseringsuppgifter

App Service-distributioner kräver en uppsättning autentiseringsuppgifter för distribution. Dessa autentiseringsuppgifter för distribution används för att skydda dina funktionsappdistributioner. App Service-plattformen hanterar autentiseringsuppgifter för distribution. Autentiseringsuppgifter krypteras när de lagras.

Det finns två typer av autentiseringsuppgifter för distribution:

  • Autentiseringsuppgifter på användaromfattning eller användarnivå ger en uppsättning autentiseringsuppgifter för distribution för en användares hela Azure-konto. En användare som beviljas appåtkomst via rollbaserad åtkomstkontroll (RBAC) eller medadministratörsbehörigheter kan använda sina autentiseringsuppgifter på användarnivå så länge de har dessa behörigheter.

    Du kan använda dina autentiseringsuppgifter för användaromfattning för att distribuera valfri app till App Service via lokal Git eller FTP/S i alla prenumerationer som ditt Azure-konto har behörighet att komma åt. Du delar inte dessa autentiseringsuppgifter med andra Azure-användare. Du kan återställa dina autentiseringsuppgifter för användaromfång när som helst.

  • Autentiseringsuppgifter på appomfattning eller programnivå är en uppsättning autentiseringsuppgifter per app som endast kan användas för att distribuera appen. Dessa autentiseringsuppgifter genereras automatiskt för varje app när de skapas och kan inte konfigureras manuellt, men lösenordet kan återställas när som helst.

    En användare måste ha minst behörighet på deltagarnivå i en app, inklusive den inbyggda rollen Webbplatsdeltagare , för att beviljas åtkomst till autentiseringsuppgifter på appnivå via RBAC. Läsarrollen kan inte publicera och kan inte komma åt dessa autentiseringsuppgifter.

För närvarande stöds inte Key Vault för autentiseringsuppgifter för distribution. Mer information om hur du hanterar autentiseringsuppgifter för distribution finns i Konfigurera autentiseringsuppgifter för distribution för Azure App Service.

Inaktivera FTP

Som standard har varje funktionsapp en FTP-slutpunkt aktiverad. FTP-ändpunkten nås genom autentiseringsuppgifter för distribution.

FTP rekommenderas inte för att distribuera funktionskoden. FTP-distributioner är manuella och kräver att du synkroniserar utlösare. Mer information finns i FTP-distribution.

När du inte planerar att använda FTP bör du inaktivera det i portalen. Om du väljer att använda FTP bör du framtvinga FTPS.

scm Skydda slutpunkten

Varje funktionsapp har en motsvarande scm tjänstslutpunkt som används av Kudu-tjänsten (Advanced Tools) för distributioner och andra App Service-webbplatstillägg. Slutpunkten scm för en funktionsapp är alltid en URL i formuläret https://<FUNCTION_APP_NAME>.scm.azurewebsites.net. När du använder nätverksisolering för att skydda dina funktioner måste du även ta hänsyn till den här slutpunkten.

Genom att ha en separat scm slutpunkt kan du styra distributioner och andra avancerade verktygsfunktioner för funktionsappar som är isolerade eller körs i ett virtuellt nätverk. Slutpunkten scm stöder både grundläggande autentisering (med autentiseringsuppgifter för distribution) och enkel inloggning med dina Azure Portal autentiseringsuppgifter. Mer information finns i Åtkomst till Kudu-tjänsten.

Kontinuerlig säkerhetsverifiering

Eftersom säkerhet måste beaktas i varje steg i utvecklingsprocessen är det klokt att även implementera säkerhetsvalidering i en kontinuerlig distributionsmiljö. Den här metoden kallas ibland DevSecOps. Med Hjälp av Azure DevOps för din distributionspipeline kan du integrera validering i distributionsprocessen. Mer information finns i Skydda dina Azure Pipelines.

Nätverkssäkerhet

Genom att begränsa nätverksåtkomsten till funktionsappen kan du styra vem som kan komma åt dina funktionsslutpunkter. Functions använder App Service-infrastruktur för att göra det möjligt för dina funktioner att komma åt resurser utan att använda internetroutningsbara adresser eller för att begränsa Internetåtkomsten till en funktionsslutpunkt. Mer information om de här nätverksalternativen finns i Nätverksalternativ för Azure Functions.

Ange åtkomstbegränsningar

Med åtkomstbegränsningar kan du definiera listor med regler för att tillåta/neka för att styra trafiken till din app. Regler utvärderas i prioritetsordning. Om inga regler har definierats accepterar appen trafik från valfri adress. Mer information finns i Åtkomstbegränsningar för Azure App Service.

Skydda lagringskontot

När du skapar en funktionsapp måste du skapa eller länka till ett allmänt Azure Storage-konto som stöder blob-, kö- och tabelllagring. Du kan ersätta det här lagringskontot med ett som skyddas av ett virtuellt nätverk med åtkomst aktiverad av tjänstslutpunkter eller privata slutpunkter. Mer information finns i Begränsa ett lagringskonto till ett virtuellt nätverk.

Distribuera funktionsappen till ett virtuellt nätverk

Azure privat slutpunkt är ett nätverksgränssnitt som ansluter dig privat och säkert till en tjänst som drivs av Azure Private Link. Privat slutpunkt använder en privat IP-adress från ditt virtuella nätverk, vilket effektivt tar in tjänsten i ditt virtuella nätverk.

Du kan använda privat slutpunkt för dina funktioner som finns i Flex Consumption-, Elastic Premium- och Dedicated-abonnemangen (App Service).

Om du vill göra anrop till privata slutpunkter måste du se till att DNS-sökningarna matchar den privata slutpunkten. Du kan tillämpa det här beteendet på något av följande sätt:

  • Integrera med privata Azure DNS-zoner. När det virtuella nätverket inte har någon anpassad DNS-server görs detta automatiskt.
  • Hantera den privata slutpunkten på DEN DNS-server som används av din app. Om du vill hantera en privat slutpunkt måste du känna till slutpunktsadressen och använda en A-record för att referera till slutpunkten som du försöker nå.
  • Konfigurera din egen DNS-server så att den vidarebefordrar till privata Azure DNS-zoner.

Mer information finns i Använda privata slutpunkter för Web Apps.

Distribuera funktionsappen isolerat

Azure App Service-miljön tillhandahåller en dedikerad värdmiljö där du kan köra dina funktioner. Med de här miljöerna kan du konfigurera en enda klientdelsgateway som du kan använda för att autentisera alla inkommande begäranden. Mer information finns i Integrera din ILB App Service-miljö med Azure Application Gateway.

Använd en gatewaytjänst

Med gatewaytjänster som Azure Application Gateway och Azure Front Door kan du konfigurera en brandvägg för webbprogram (WAF). WAF-regler används för att övervaka eller blockera identifierade attacker, vilket ger ett extra skydd för dina funktioner. För att konfigurera en WAF måste funktionsappen köras i en ASE eller använda privata slutpunkter (förhandsversion). Mer information finns i Använda privata slutpunkter.

Nästa steg