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.

Plattforms komponenterna i App Service, inklusive virtuella Azure-datorer, lagring, nätverks anslutningar, webb ramverk, hanterings-och integrations funktioner, är aktivt säkra och skärps. App Service genomgår en kontinuerlig kontroll av efterlevnaden för att se till att:

  • Dina app-resurser skyddas från de andra kundernas Azure-resurser.
  • VM-instanser och runtime-programvaran uppdateras regelbundet för att lösa nyupptäckta sårbarheter.
  • Kommunikation av hemligheter (t. ex. anslutnings strängar) mellan din app och andra Azure-resurser (till exempel SQL Database) ligger kvar i Azure och korsar inte några nätverks gränser. Hemligheter krypteras alltid när de lagras.
  • All kommunikation via App Service anslutnings funktioner, till exempel hybrid anslutning, krypteras.
  • Anslutningar med verktyg för fjärrhantering som Azure PowerShell, Azure CLI, Azure SDK: er, REST API: er är krypterade.
  • 24-timmars hot hantering skyddar infrastrukturen och plattformen mot skadlig kod, distribuerad denial-of-service (DDoS), man-in-the-Middle (MITM) och andra hot.

Mer information om infrastruktur-och plattforms säkerhet i Azure finns Azure Säkerhetscenter.

En uppsättning säkerhetsrekommendationer som följer Benchmark för Azure Security finnsi Azure Security Baseline for Azure Functions.

Säker åtgärd

I det här avsnittet får du hjälp med att konfigurera och köra funktionsappen så säkert som möjligt.

Security Center

Security Center integreras med funktionsappen i portalen. Det ger en kostnadsfri snabb utvärdering av potentiella konfigurationsrelaterade säkerhetsproblem. Funktionsappar som körs i en dedikerad plan kan också använda säkerhetsfunktionerna i realtid Security Center, till en extra kostnad. Mer information finns i Skydda dina Azure App Service-webbappar och API:er.

Logga och övervaka

Ett sätt att identifiera attacker är via aktivitetsövervakning och loggningsanalys. Functions integreras med Application Insights för att samla in logg-, prestanda- och feldata för din funktionsapp. Program 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 strömningsexport av plattformsloggar och mått för dina funktioner till det mål du väljer, till exempel en Logs Analytics-arbetsyta. Mer information finns i Monitoring Azure Functions with Azure Monitor Logs (Övervaka Azure Functions med Azure Monitor loggar).

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

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

Kräv HTTPS

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

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

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

Funktionsåtkomstnycklar

Med funktioner kan du använda nycklar för att göra det svårare att komma åt HTTP-funktionerna under utvecklingen. Om inte HTTP-filnivån på en HTTP-utlöst funktion har angetts till anonymous måste begär Anden innehålla en API-åtkomst nyckel i begäran.

Även om nycklar ger en standardmekanism för säkerhetsmekanism, kanske du vill överväga ytterligare alternativ för att skydda en HTTP-slutpunkt i produktionen. Det är till exempel vanligt vis inte en bra idé att distribuera delad hemlighet i offentliga appar. Om din funktion anropas från en offentlig klient kanske du vill överväga att implementera en annan säkerhetsmekanism. Mer information finns i skydda en HTTP-slutpunkt i produktion.

När du förnyar funktions nyckel värden måste du manuellt distribuera de uppdaterade nyckelvärdena till alla klienter som anropar din funktion.

Authorization-omfattningar (funktions nivå)

Det finns två åtkomstscope för nycklar på funktions nivå:

  • Funktion: dessa nycklar gäller endast för de funktioner som de är definierade under. När den används som en API-nyckel tillåter dessa endast åtkomst till den funktionen.

  • Värd: nycklar med ett värd omfång kan användas för att få åtkomst till alla funktioner i Function-appen. När den används som en API-nyckel tillåter dessa åtkomst till alla funktioner i Function-appen.

Varje nyckel namnges som referens och det finns en standard nyckel (med namnet "standard") på funktion-och värdnivå. Funktions tangenter prioriteras framför värd nycklar. När två nycklar definieras med samma namn används alltid funktions nyckeln.

Huvud nyckel (admin-nivå)

Varje Function-app har också en värd nyckel på administratörs nivå med namnet _master . Förutom att tillhandahålla åtkomst på värdnivå till alla funktioner i appen, ger huvud nyckeln även administrativ åtkomst till REST-API: erna för körning. Den här nyckeln kan inte återkallas. När du anger en åtkomst nivå för admin måste begär Anden använda huvud nyckeln. eventuella andra nycklar leder till att åtkomsten Miss lyckas.

Varning

På grund av de utökade behörigheterna i din Function-app som beviljats av huvud nyckeln bör du inte dela den här nyckeln med tredje part eller distribuera den i interna klient program. Använd försiktighet när du väljer administratörs åtkomst nivå.

Systemnyckel

Vissa tillägg kan kräva en system hanterad nyckel för att få åtkomst till webhook-slutpunkter. Systemnycklar är utformade för tilläggsspecifika funktionsslutpunkter som anropas av interna komponenter. Till exempel kräver Event Grid-utlösaren att prenumerationen använder en systemnyckel när den anropar utlösarslutpunkten. Durable Functions också systemnycklar för att anropa DURABLE Task-tilläggs-API:er.

Omfånget för systemnycklar bestäms av tillägget, men det gäller vanligtvis för hela funktionsappen. Systemnycklar kan bara skapas av specifika tillägg och du kan inte uttryckligen ange deras värden. Precis som med andra nycklar kan du generera ett nytt värde för nyckeln från portalen eller med hjälp av nyckel-API:erna.

Jämförelse av nycklar

I följande tabell jämförs användningsområden för olika typer av åtkomstnycklar:

Åtgärd Omfång Giltiga nycklar
Köra en funktion Specifik funktion Funktion
Köra en funktion Valfri funktion Funktion eller värd
Anropa en administratörsslutpunkt Funktionsapp Värd (endast huvud)
Anropa DURABLE Task-tilläggs-API:er Funktionsapp1 System2
Anropa en tilläggsspecifik webhook (intern) Funktionsapp1 system2

1 Omfång som bestäms av tillägget.
2 Specifika namn som anges med tillägg.

Mer information om åtkomstnycklar finns i artikeln HTTP-utlösarbindning.

Hemliga lagringsplatsen

Som standard lagras nycklar i en Blob Storage-container i det konto som anges av AzureWebJobsStorage inställningen. Du kan använda specifika programinställningar för att åsidosätta det här beteendet och lagra nycklar på en annan plats.

Location Inställning Värde Beskrivning
Annat lagringskonto AzureWebJobsSecretStorageSas <BLOB_SAS_URL> Lagrar nycklar i Blob Storage för ett andra lagringskonto, baserat på den angivna SAS-URL:en. Nycklar krypteras innan de lagras med hjälp av en hemlighet som är unik för din funktionsapp.
Filsystem AzureWebJobsSecretStorageType files Nycklar bevaras i filsystemet, krypteras före lagring med hjälp av en hemlighet som är unik för din funktionsapp.
Azure Key Vault AzureWebJobsSecretStorageType
AzureWebJobsSecretStorageKeyVaultName
keyvault
<VAULT_NAME>
Valvet måste ha en åtkomstprincip som motsvarar värdresursens system tilldelade hanterade identitet. Åtkomstprincipen bör ge identiteten följande hemliga behörigheter: Get , Set , och List Delete .
När du kör lokalt används utvecklaridentiteten och inställningarna måste finnas ilocal.settings.js på filen.
Kubernetes-hemligheter AzureWebJobsSecretStorageType
AzureWebJobsKubernetesSecretName (valfritt)
kubernetes
<SECRETS_RESOURCE>
Stöds endast när du kör Functions-körningen i Kubernetes. När AzureWebJobsKubernetesSecretName inte har angetts betraktas lagringsplatsen som skrivskyddade. I det här fallet måste värdena genereras före distributionen. Den Azure Functions Core Tools genererar värdena automatiskt när du distribuerar till Kubernetes.

Autentisering/auktorisering

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

Aktivera App Service autentisering/auktorisering

App Services plattformen gör att du kan använda Azure Active Directory (AAD) och flera identitets leverantörer från tredje part 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ändar information från funktions koden. Mer information finns i autentisering och auktorisering i Azure App Service och arbeta med klient identiteter.

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

APIM tillhandahåller flera olika API-säkerhetsalternativ för inkommande begär Anden. Läs mer i API Management autentiseringsprinciper. Med APIM på plats kan du konfigurera Function-appen så att den endast accepterar begär Anden 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 stöder inbyggd rollbaserad åtkomstkontroll i Azure (Azure RBAC). Azure-roller som stöds av Functions är Deltagare, Ägareoch Läsare.

Behörigheter gäller på funktionsappnivå. Rollen Deltagare krävs för att utföra de flesta uppgifter på funktionsnivå på appnivå. Endast rollen Ägare kan ta bort en funktionsapp.

Organisera funktioner efter behörighet

Anslutningssträngar och andra autentiseringsuppgifter som lagras i programinställningarna 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 funktionskedja för att skicka data mellan funktioner i olika funktionsappar.

Hanterade identiteter

Med en hanterad identitet från Azure Active Directory (Azure AD) kan din app enkelt komma åt andra Azure AD-skyddade resurser som Azure Key Vault. Identiteten hanteras av Azure-plattformen och kräver inte att du etablerar eller roterar några hemligheter. Mer information om hanterade identiteter i Azure AD finns i hanterade identiteter för Azure-resurser.

Ditt program kan beviljas två typer av identiteter:

  • En systemtilldelad identitet är kopplad till ditt program och tas bort om din app tas bort. En app kan bara ha en tilldelad identitet.
  • En användardefinierad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användare tilldelade identiteter.

Hanterade identiteter kan användas i stället för hemligheter för anslutningar från 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 för korsande ursprung (CORS) är ett sätt att tillåta att webbappar som körs i en annan domän gör begäranden till HTTP-utlösarslutpunkter. App Service har inbyggt stöd för att skicka nödvändiga CORS-huvuden i HTTP-begäranden. CORS-regler definieras på funktionsappnivå.

Även om det är lockande att använda ett jokertecken som gör att alla webbplatser kan komma åt din slutpunkt. Men detta motverkar syftet med CORS, som ä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 ha åtkomst till slutpunkten.

Hantera hemligheter

För att kunna ansluta till de olika tjänster och resurser som krävs för att köra din kod måste funktionsappar kunna komma åt hemligheter, till exempel anslutningssträngar 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ängar och hemligheter som används av funktionsappen och bindningar som programinställningar. Detta 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 funktionsapp ett associerat lagringskonto som används av körningen. Som standard lagras anslutningen till det här lagringskontot i en programinställning med namnet AzureWebJobsStorage .

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

Du kan också kryptera inställningar som standard i local.settings.jspå filen när du utvecklar funktioner på den lokala datorn. Mer information finns i egenskapen IsEncrypted i den lokala inställningsfilen.

Key Vault referenser

Programinställningarna är tillräckliga för de flesta funktioner, men du kanske vill dela samma hemligheter mellan flera tjänster. I det här fallet resulterar redundant lagring av hemligheter i fler potentiella sårbarheter. En säkrare metod är en central hemlighetslagringstjänst och använder 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 hemlighetshantering 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. Detta har fördelen att det inte krävs hantering av en hemlighet och ger mer information om åtkomstkontroll och granskning.

När du skriver kod som skapar anslutningen till Azure-tjänster som stöder Azure AD-autentiseringkan du välja att använda en identitet i stället för en hemlighet eller anslutningssträng. Information om båda anslutningsmetoderna finns i dokumentationen för varje tjänst.

Vissa Azure Functions utlösare och bindningstillägg kan konfigureras med hjälp av en identitetsbaserad anslutning. I dag omfattar detta Azure Blob- och Azure Queue-tilläggen. Information om hur du konfigurerar dessa tillägg för att använda en identitet finns i Använda identitetsbaserade anslutningar i Azure Functions.

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. Detta kan potentiellt minska risken för skadlig kod som kör dina funktioner. Information om hur du beräknar förbrukningen för dina funktioner finns i Beräkna kostnader för förbrukningsplanen.

Datavalidering

De utlösare och bindningar som används av dina funktioner ger ingen ytterligare datavalidering. 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 ovärderade indata ska flöda 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 parameterisera dina kommandon för att undvika SQL ktionsattacker.

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 fel

Även om det verkar grundläggande är det viktigt att skriva bra felhantering i dina funktioner. Ohanterade fel bubblar upp till värden och hanteras av körningen. Olika bindningar hanterar bearbetning av fel på olika sätt. Mer information finns i Azure Functions felhantering.

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änt Inställningar i funktionsappens Konfiguration i portalen.

Begränsa CORS-åtkomst

Azure Functions stöder resurs delning mellan ursprung (CORS). CORS konfigureras i portalen och via Azure CLI. Listan över tillåtna ursprung för CORS-listan gäller på funktions nivån app. När CORS är aktiverat inkluderar Svaren Access-Control-Allow-Origin rubriken. Mer information finns i Cross-origin resource sharing.

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

Lagra data krypterade

Azure Storage krypterar alla data i ett lagrings konto i vila. Mer information finns i Azure Storage kryptering för vilande data.

Som standard krypteras data med Microsoft-hanterade nycklar. Om du vill ha mer kontroll över krypterings nycklar 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 funktioner ska kunna komma åt lagrings kontot. Mer information finns i kryptering i vila med Kundhanterade nycklar.

Säker distribution

Azure Functions en integrering 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 distributioner av funktionsappen. Autentiseringsuppgifter för distribution hanteras av App Service plattformen och krypteras i vila.

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

  • Autentiseringsuppgifter för användar nivå: en uppsättning autentiseringsuppgifter för hela Azure-kontot. Den kan användas för att distribuera till App Service för alla appar, i alla prenumerationer, som Azure-kontot har behörighet att komma åt. Det är den standard uppsättning som finns i portalens GUI (till exempel Översikt och Egenskaper för appens resurs sida). När en användare beviljas åtkomst till appen via Role-Based Access Control (RBAC) eller behörigheten administratör kan användaren använda sina egna autentiseringsuppgifter på användar nivå tills åtkomsten har återkallats. Dela inte dessa autentiseringsuppgifter med andra Azure-användare.

  • Autentiseringsuppgifter för app-nivå: en uppsättning autentiseringsuppgifter för varje app. Den kan endast användas för att distribuera till appen. Autentiseringsuppgifterna för varje app genereras automatiskt när appen skapas. De kan inte konfigureras manuellt, men de kan återställas när som helst. För att en användare ska beviljas åtkomst till autentiseringsuppgifter för app-nivå via (RBAC) måste användaren vara deltagare eller högre i appen (inklusive den inbyggda rollen som webbplats deltagare). Läsarna får inte publicera och har inte åtkomst till dessa autentiseringsuppgifter.

För närvarande stöds Key Vault inte 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-slutpunkten nås med 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.

Skydda SCM-slutpunkten

Varje funktionsapp har en motsvarande tjänstslutpunkt som används av tjänsten Avancerade verktyg (Kudu) för distributioner och scm andra App Service-webbplatstillägg. SCM-slutpunkten för en funktionsapp är alltid en URL i formen 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 funktionsapp som är isolerade eller körs i ett virtuellt nätverk. SCM-slutpunkten 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äkerhetsvalidering

Eftersom säkerhet måste betraktas som ett steg i utvecklingsprocessen är det klokt att även implementera säkerhetsvalidering i en kontinuerlig distributionsmiljö. Detta kallas ibland DevSecOps. Med Azure DevOps för din distributionspipeline kan du integrera valideringen i distributionsprocessen. Mer information finns i Lär dig hur du lägger till kontinuerlig säkerhetsvalidering i CI/CD-pipelinen.

Nätverkssäkerhet

Genom att begränsa nätverksåtkomsten till funktionsappen kan du styra vem som har åtkomst till dina funktionsslutpunkter. Functions använder App Service infrastruktur för att ge dina funktioner åtkomst till resurser utan att använda Internet-dirigerbara adresser eller begränsa Internetåtkomsten till en funktionsslutpunkt. Mer information om dessa nätverksalternativ finns i Azure Functions nätverksalternativ.

Ange åtkomstbegränsningar

Med åtkomstbegränsningar kan du definiera listor över 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 din app trafik från valfri adress. Mer information finns i Azure App Service åtkomstbegränsningar.

Åtkomst till privat plats

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 slut punkt för dina funktioner som finns i Premium -och App Service -planerna.

När du skapar en inkommande privat slut punkts anslutning för functions måste du också ha en DNS-post för att matcha den privata adressen. Som standard skapas en privat DNS-post åt dig när du skapar en privat slut punkt med hjälp av Azure Portal.

Mer information finns i använda privata slut punkter för Web Apps.

Distribuera funktionsappen isolerat

Azure App Service-miljön (ASE) tillhandahåller en dedikerad värdmiljö där du kan köra dina funktioner. Med ASE kan du konfigurera en enda frontend-gateway som du kan använda för att autentisera alla inkommande begäranden. Mer information finns i Configuring a Web Application Firewall (WAF) for App Service-miljön.

Använda en gateway-tjänst

Med gatewaytjänster som Azure Application Gateway och Azure Front Door kan du konfigurera en Web Application Firewall (WAF). WAF-regler används för att övervaka eller blockera identifierade attacker, vilket ger ett extra skyddslager för dina funktioner. Om du vill 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