Sdílet prostřednictvím


Zabezpečení Azure Funkcí

Plánování zabezpečeného vývoje, nasazení a provozu bezserverových funkcí je v mnoha ohledech stejné jako u jakékoli webové nebo cloudové aplikace. Služba Azure App poskytuje hostingovou infrastrukturu pro vaše funkční aplikace. Tento článek obsahuje strategie zabezpečení pro spouštění kódu funkce a způsob, jakým vám app Service může pomoct zabezpečit funkce.

Azure App Service aktivně zabezpečuje a zlepšuje zabezpečení komponent platformy, včetně virtuálních počítačů Azure, úložiště, síťových připojení, webových architektur a funkcí pro správu a integraci. Služba App Service prochází nepřetržitými a přísnými kontrolami dodržování předpisů, aby se zajistilo, že:

Další informace o zabezpečení infrastruktury a platformy v Azure najdete v Centru zabezpečení Azure.

Sadu doporučení zabezpečení, která se řídí srovnávacím testem zabezpečení cloudu Microsoftu, najdete v tématu Standardní hodnoty zabezpečení Azure pro Azure Functions.

Zabezpečená operace

Tato část vás provede co nejbezpečenější konfigurací a spuštěním aplikace funkcí.

Defender for Cloud

Defender for Cloud se integruje s vaší funkční aplikací na portálu. Poskytuje zdarma rychlé posouzení potenciálních ohrožení zabezpečení souvisejících s konfigurací. Aplikace funkcí běžící ve vyhrazeném plánu můžou také využívat funkce rozšířeného zabezpečení v programu Defender for Cloud za příplatek. Další informace viz Defender for App Service.

Protokolování a monitorování

Jedním ze způsobů, jak detekovat útoky, je monitorování aktivit a protokolování analýzy. Funkce se integrují s Application Insights za účelem shromažďování dat protokolu, výkonu a chyb pro vaši aplikaci funkcí. Application Insights automaticky detekuje anomálie výkonu a obsahuje výkonné analytické nástroje, které vám pomůžou diagnostikovat problémy a pochopit, jak se vaše funkce používají. Další informace naleznete v tématu Monitor Azure Functions.

Funkce se také integruje s protokoly azure Monitoru, abyste mohli konsolidovat protokoly aplikací funkcí pomocí systémových událostí pro snadnější analýzu. Nastavení diagnostiky můžete použít k nakonfigurování streamovaného exportu protokolů a metrik platformy pro vaše funkce na vámi zvolené místo určení, například do pracovního prostoru Služby Log Analytics. Další informace najdete v tématu Monitorování služby Azure Functions pomocí nástroje Azure Monitor.

Pro automatizaci hrozeb na podnikové úrovni streamujte protokoly a události do pracovního prostoru Služby Logs Analytics. Microsoft Sentinel pak můžete připojit k tomuto pracovnímu prostoru. Další informace najdete v tématu Co je Microsoft Sentinel.

Další doporučení zabezpečení pro pozorovatelnost najdete ve standardních hodnotách zabezpečení Azure pro Azure Functions.

Zabezpečení koncových bodů HTTP

Koncové body HTTP, které jsou veřejně vystaveny, poskytují vektor útoku pro aktéry se zlými úmysly. Při zabezpečení koncových bodů HTTP byste měli použít vícevrstvý přístup k zabezpečení. Tyto techniky lze použít ke snížení ohrožení zabezpečení veřejně vystavených koncových bodů HTTP seřazených od nejzásadnějších po nejbezpečnější a omezující:

Vyžadovat HTTPS

Ve výchozím nastavení se klienti můžou připojit ke koncovým bodům funkcí pomocí protokolu HTTP nebo HTTPS. Protokol HTTP byste měli přesměrovat na HTTPS, protože protokol TLS používá k zajištění zabezpečeného připojení, které je šifrované i ověřené. Postup najdete v tématu Vynucení HTTPS.

Pokud potřebujete protokol HTTPS, měli byste také vyžadovat nejnovější verzi protokolu TLS. Postup najdete v tématu Vynucení verzí protokolu TLS.

Další informace najdete v tématu Zabezpečené připojení (TLS).

Klávesy přístupu k funkci

Funkce umožňují používat klíče, které znesnadní přístup ke koncovým bodům funkce. Pokud není úroveň přístupu HTTP u funkce aktivované protokolem HTTP nastavená na anonymous, požadavky musí v požadavku obsahovat přístupový klíč. Další informace najdete v tématu Práce s přístupovými klíči ve službě Azure Functions.

Přístupové klíče sice můžou zajistit určité omezení nežádoucího přístupu, ale jediný způsob, jak skutečně zabezpečit koncové body funkce, je implementace pozitivního ověřování klientů, kteří přistupují k vašim funkcím. Pak můžete provádět rozhodnutí o autorizaci na základě identity.

Pro nejvyšší úroveň zabezpečení můžete také zabezpečit celou architekturu aplikace ve virtuální síti pomocí privátních koncových bodů nebo spuštěním izolovaně.

Zakázání koncových bodů správy

Aplikace funkcí můžou obsluhovat koncové body správy v rámci /admin trasy, které se dají použít pro operace, jako je získání informací o stavu hostitele a provádění volání testů. Při zveřejnění musí požadavky na tyto koncové body obsahovat hlavní klíč aplikace. Operace správy jsou k dispozici také prostřednictvím Microsoft.Web/sites Azure Resource Manageru, které nabízí Azure RBAC. Koncové body můžete zakázat /admin nastavením functionsRuntimeAdminIsolationEnabled vlastnosti webu na true hodnotu. Tuto vlastnost nelze nakonfigurovat pro aplikace běžící na Linux Consumption SKU, ani pro aplikace běžící na Azure Functions verze 1.x. Pokud používáte verzi 1.x, musíte nejprve migrovat na verzi 4.x.

Povolení ověřování/autorizace služby App Service

Platforma App Service umožňuje k ověřování klientů používat ID Microsoft Entra a několik zprostředkovatelů identity jiných společností než Microsoft. Tuto strategii můžete použít k implementaci vlastních autorizačních pravidel pro vaše funkce a můžete pracovat s informacemi o uživateli z kódu funkce. Další informace najdete v tématu Ověřování a autorizace ve službě Azure App Service a práce s identitami klientů.

Použití služby Azure API Management (APIM) k ověřování požadavků

APIM poskytuje různé možnosti zabezpečení rozhraní API pro příchozí požadavky. Další informace najdete v tématu Zásady ověřování služby API Management. Pomocí služby APIM můžete nakonfigurovat aplikaci funkcí tak, aby přijímala požadavky pouze z IP adresy vaší instance APIM. Další informace najdete v tématu Omezení IP adres.

Oprávnění

Stejně jako u jakékoli aplikace nebo služby je cílem spustit aplikaci funkcí s nejnižšími možnými oprávněními.

Oprávnění pro správu uživatelů

Functions podporuje integrované řízení přístupu na základě role v Azure (Azure RBAC). Role Azure podporované funkcí jsou Přispěvatel, Vlastník a Čtenář.

Oprávnění jsou platná na úrovni aplikace funkcí. Role Přispěvatel je nutná k provádění většiny úloh na úrovni aplikace funkcí. Aby bylo možné zobrazit data protokolu v Application Insights, potřebujete roli přispěvatele spolu s oprávněním Čtenář monitorování. Funkční aplikaci může odstranit pouze role vlastníka.

Uspořádání funkcí podle oprávnění

Připojovací řetězce a další přihlašovací údaje uložené v nastavení aplikace poskytují všem funkcím v aplikaci funkcí stejnou sadu oprávnění v přidruženém prostředku. Zvažte minimalizaci počtu funkcí s přístupem ke konkrétním přihlašovacím údajům přesunutím funkcí, které tyto přihlašovací údaje nepoužívají do samostatné aplikace funkcí. K předávání dat mezi funkcemi v různých aplikacích funkcí můžete použít techniky, jako je například řetězení funkcí.

Spravované identity

Spravovaná identita z Microsoft Entra ID umožňuje vaší aplikaci snadno přistupovat k dalším prostředkům chráněným microsoftem Entra, jako je Azure Key Vault. Platforma Azure spravuje identitu, takže nemusíte zřizovat ani obměňovat tajné kódy. Další informace o spravovaných identitách v Microsoft Entra ID najdete v tématu Spravované identity pro prostředky Azure.

Aplikaci můžete udělit dva typy identit:

  • Identita přiřazená systémem je svázaná s aplikací a je odstraněna, pokud je aplikace odstraněna. Aplikace může mít pouze jednu identitu přiřazenou systémem.
  • Identita přiřazená uživatelem je samostatný prostředek Azure, který je možné přiřadit k vaší aplikaci. Aplikace může mít více identit přiřazených uživatelem. Jednu identitu přiřazenou uživatelem je možné přiřadit k několika prostředkům Azure, jako jsou dvě aplikace App Service.

Spravované identity lze použít místo hesel pro připojení u některých spouštěčů a vazeb. Viz Připojení založená na identitě.

Další informace najdete v tématu Použití spravovaných identit pro App Service a Azure Functions.

Omezení přístupu CORS

Sdílení prostředků mezi zdroji (CORS) je způsob, jak umožnit webovým aplikacím běžícím v jiné doméně provádět požadavky na koncové body triggeru HTTP. App Service poskytuje integrovanou podporu pro předání požadovaných hlaviček CORS v požadavcích HTTP. Pravidla CORS jsou definována na úrovni aplikace funkcí.

Je lákavé použít zástupný znak, který umožňuje všem webům přístup k vašemu koncovému bodu. Tento přístup porazí účel CORS, který pomáhá předcházet útokům na skriptování mezi weby. Místo toho přidejte samostatnou položku CORS pro doménu každé webové aplikace, která musí přistupovat k vašemu koncovému bodu.

Správa tajemství

Aby se mohly připojit k různým službám a prostředkům potřebným ke spuštění kódu, musí mít aplikace funkcí přístup k tajným kódům, jako jsou připojovací řetězec a klíče služby. Tato část popisuje, jak ukládat tajné kódy vyžadované vašimi funkcemi.

Nikdy neukládejte tajné kódy do kódu funkce.

Nastavení aplikace

Ve výchozím nastavení ukládáte připojovací řetězec a tajné kódy používané aplikací funkcí a vazby jako nastavení aplikace. Tento přístup zpřístupňuje tyto přihlašovací údaje kódu funkce i různým vazbám používaným funkcí. Název nastavení aplikace (klíč) slouží k načtení skutečné hodnoty, což je tajemství.

Například každá funkční aplikace vyžaduje přidružený účet úložiště, které využívá běhové prostředí. Ve výchozím nastavení je připojení k tomuto účtu úložiště uloženo v nastavení aplikace s názvem AzureWebJobsStorage.

Nastavení aplikací a připojovací řetězec se ukládají zašifrované v Azure. Dešifrují se jenom před vložením do paměti procesu vaší aplikace při spuštění aplikace. Šifrovací klíče se pravidelně obměňují. Pokud dáváte přednost správě zabezpečeného úložiště tajných kódů, mělo by být nastavení aplikace odkazy na tajné kódy služby Azure Key Vault.

Nastavení můžete ve výchozím nastavení zašifrovat také v local.settings.json souboru při vývoji funkcí na místním počítači. Další informace najdete v tématu Šifrování místního souboru nastavení.

Reference ke službě Key Vault

I když pro většinu funkcí stačí nastavení aplikace, můžete chtít sdílet stejné tajné kódy napříč několika službami. V takovém případě má redundantní úložiště tajných kódů za následek větší potenciální ohrožení zabezpečení. Bezpečnějším přístupem je použití centrální služby úložiště tajných kódů a použití odkazů na tuto službu místo samotných tajných kódů.

Azure Key Vault je služba, která poskytuje centralizovanou správu tajných kódů s plnou kontrolou nad zásadami přístupu a historií auditu. Referenci na Key Vault můžete použít místo připojovacího řetězce nebo klíče v nastavení aplikace. Další informace najdete v tématu Použití odkazů služby Key Vault pro App Service a Azure Functions.

Připojení založená na identitách

Identity se můžou používat místo tajných kódů pro připojení k některým prostředkům. Přístup má výhodu, že nevyžaduje správu tajného kódu a poskytuje jemněji odstupňované řízení přístupu a auditování.

Když napíšete kód, který vytvoří připojení ke službám Azure, které podporují ověřování Microsoft Entra, můžete místo tajného klíče nebo připojovacího řetězce použít identitu. Podrobnosti o obou metodách připojení najdete v dokumentaci pro každou službu.

Některá rozšíření vazeb Azure Functions je možné nakonfigurovat pro přístup ke službám pomocí připojení založených na identitě. Další informace najdete v tématu Konfigurace připojení založeného na identitě.

Nastavení kvót využití

Zvažte nastavení kvóty využití pro funkce spuštěné v plánu Consumption. Když nastavíte denní limit GB za sekundu pro celkové spouštění funkcí ve vaší aplikaci funkcí, při dosažení limitu se zastaví provádění. Tento přístup může potenciálně pomoct zmírnit škodlivé kódy spouštěné vašimi funkcemi. Pro informace o odhad spotřeby pro vaše funkce viz Odhad nákladů na plán Consumption.

Ověření dat

Triggery a vazby používané vašimi funkcemi neposkytují žádné další ověření dat. Váš kód musí ověřit všechna data přijatá z triggeru nebo vstupní vazby. Pokud dojde k ohrožení zabezpečení upstreamové služby, nechcete, aby vaše funkce procházely nevalidovanými vstupy. Pokud například vaše funkce ukládá data z fronty Azure Storage do relační databáze, musíte data ověřit a parametrizovat příkazy, aby se zabránilo útokům prostřednictvím injektáže SQL.

Nepředpokládáme, že data přicházející do vaší funkce již byla ověřena nebo upravena. Je také vhodné ověřit, jestli jsou data zapsaná do výstupních vazeb platná.

Řešení chyb

I když to vypadá jako základní, je důležité ve svých funkcích napsat dobré zpracování chyb. Neošetřené chyby přecházejí až k hostiteli a běhové prostředí tyto chyby zpracovává. Různé vazby zpracovávají chyby odlišně. Další informace najdete v tématu Zpracování chyb ve službě Azure Functions.

Zakázat vzdálené ladění

Ujistěte se, že je vzdálené ladění zakázané, s výjimkou případů, kdy aktivně ladíte funkce. Vzdálené ladění můžete zakázat v kartě Obecné nastavení konfigurace vaší aplikace funkcí v portálu.

Omezení přístupu CORS

Azure Functions podporuje sdílení prostředků mezi různými zdroji (CORS). CORS se konfiguruje na portálu a prostřednictvím Azure CLI. Seznam povolených zdrojů CORS se vztahuje na úrovni aplikace funkcí. S povoleným CORS zahrnují odpovědi hlavičku Access-Control-Allow-Origin . Další informace naleznete v tématu Sdílení prostředků různého původu.

Nepoužívejte v seznamu povolených domén zástupné znaky. Místo toho uveďte konkrétní domény, ze kterých očekáváte získání požadavků.

Ukládání šifrovaných dat

Azure Storage šifruje všechny uložené údaje v klidovém stavu v účtu úložiště. Další informace najdete v tématu Šifrování služby Azure Storage pro neaktivní uložená data.

Ve výchozím nastavení se data šifrují pomocí klíčů spravovaných Microsoftem. Pokud chcete mít větší kontrolu nad šifrovacími klíči, můžete zadat klíče spravované zákazníkem pro šifrování dat objektů blob a souborů. Tyto klíče musí být k dispozici ve službě Azure Key Vault, aby služba Functions mohla získat přístup k účtu úložiště. Další informace najdete v tématu Šifrování neaktivních uložených dat aplikace pomocí klíčů spravovaných zákazníkem.

Aplikace funkcí často závisí na jiných prostředcích, takže součástí zabezpečení aplikace je zabezpečení těchto externích prostředků. Minimálně většina aplikací funkcí zahrnuje závislost na Application Insights a Azure Storage. Pokyny k zabezpečení těchto prostředků najdete v standardních hodnotách zabezpečení Azure pro Azure Monitor a standardních hodnotách zabezpečení Azure pro službu Storage.

Důležité

Účet úložiště slouží k ukládání důležitých dat aplikace, někdy včetně samotného kódu aplikace. Měli byste omezit přístup z jiných aplikací a uživatelů k účtu pro ukládání.

Měli byste se také podívat na pokyny pro všechny typy zdrojů, na které vaše logika aplikace závisí, a to jak ve formě spouštěčů, tak i vazeb a také z kódu funkce.

Zabezpečené nasazení

Integrace nástrojů Azure Functions usnadňuje publikování kódu projektu místních funkcí do Azure. Při zvažování zabezpečení topologie Azure Functions je důležité pochopit, jak funguje nasazení.

Přihlašovací údaje pro nasazení

Nasazení služby App Service vyžaduje sadu nasazovacích přihlašovacích údajů. Tyto nasazovací přihlašovací údaje se používají k zabezpečení nasazení funkční aplikace. Platforma App Service spravuje přihlašovací údaje pro nasazení. Přihlašovací údaje jsou zašifrované v klidu.

Existují dva druhy nasazovacích přihlašovacích údajů:

  • Uživatelské přihlašovací údaje nebo údaje na úrovni uživatele poskytují jednu sadu přístupových údajů pro nasazení v rámci celého účtu Azure uživatele. Uživatel, kterému je udělen přístup k aplikaci prostřednictvím řízení přístupu na základě role (RBAC) nebo oprávnění spolusprávce, může používat přihlašovací údaje na úrovni uživatele, pokud mají tato oprávnění.

    Pomocí přihlašovacích údajů pro konkrétního uživatele můžete provést nasazení jakékoli aplikace do služby App Service prostřednictvím místního Gitu nebo FTP/S v libovolném předplatném, ke kterému má váš účet Azure přístupová práva. Tyto přihlašovací údaje nesdílíte s ostatními uživateli Azure. Přihlašovací údaje uživatelského rozsahu můžete kdykoli resetovat.

  • Přihlašovací údaje na úrovni aplikace nebo oboru aplikace jsou jednou sadou přihlašovacích údajů na aplikaci, kterou je možné použít k nasazení pouze této aplikace. Tyto přihlašovací údaje se generují automaticky pro každou aplikaci při vytváření a nedají se konfigurovat ručně, ale heslo je možné kdykoli resetovat.

    Aby uživatel získal přístup k povolením na úrovni aplikace, musí mít k aplikaci alespoň oprávnění na úrovni Contributor, včetně předdefinované role Website Contributor. Role čtenáře nemůže publikovat a nemá přístup k těmto přihlašovacím údajům.

V tuto chvíli se pro přihlašovací údaje pro nasazení nepodporuje služba Key Vault. Další informace o správě přihlašovacích údajů nasazení najdete v tématu Konfigurace přihlašovacích údajů nasazení pro službu Aplikace Azure Service.

Zakázání FTP

Ve výchozím nastavení má každá aplikace funkcí povolený koncový bod FTP. K FTP koncovému bodu se přistupuje pomocí přihlašovacích údajů pro nasazení.

Ftp se nedoporučuje pro nasazení kódu funkce. Nasazení FTP jsou ruční a vyžadují synchronizaci triggerů. Další informace najdete v tématu Nasazení ftp.

Pokud nechcete používat PROTOKOL FTP, měli byste ho zakázat na portálu. Pokud se rozhodnete používat protokol FTP, měli byste vynutit FTPS.

Zabezpečte koncový scm bod

Každá aplikace funkcí má odpovídající scm koncový bod služby, který používá služba Advanced Tools (Kudu) pro nasazení a další rozšíření webu služby App Service. Koncový scm bod aplikace funkcí je vždy adresa URL ve formuláři https://<FUNCTION_APP_NAME>.scm.azurewebsites.net. Pokud k zabezpečení funkcí používáte izolaci sítě, musíte pro tento koncový bod také počítat.

Když máte samostatný scm koncový bod, můžete řídit nasazení a další funkcionality Pokročilých nástrojů pro aplikace funkcí, které jsou izolované nebo spuštěné ve virtuální síti. Koncový scm bod podporuje základní ověřování (pomocí přihlašovacích údajů nasazení) i jednotné přihlašování pomocí přihlašovacích údajů webu Azure Portal. Další informace najdete v tématu Přístup ke službě Kudu.

Průběžné ověřování zabezpečení

Vzhledem k tomu, že je potřeba zvážit zabezpečení v každém kroku procesu vývoje, je vhodné implementovat také ověřování zabezpečení v prostředí průběžného nasazování. Tento přístup se někdy označuje jako DevSecOps. Pomocí Azure DevOps pro váš kanál nasazení můžete integrovat ověřování do procesu nasazení. Další informace najdete v tématu Zabezpečení služby Azure Pipelines.

Zabezpečení sítě

Omezení síťového přístupu k vaší aplikaci funkcí umožňuje řídit, kdo má přístup k vašim koncovým bodům funkcí. Služba Functions používá infrastrukturu služby App Service, aby umožnila přístup k prostředkům bez použití internetově směrovatelných adres, nebo aby omezila přístup k internetu na koncový bod funkce. Další informace o těchtomožnostch

Nastavení omezení přístupu

Omezení přístupu umožňují definovat seznamy pravidel povolení a zamítnutí pro řízení provozu do vaší aplikace. Pravidla se vyhodnocují v pořadí priority. Pokud nejsou definována žádná pravidla, vaše aplikace přijímá provoz z libovolné adresy. Další informace najdete v tématu Omezení přístupu ke službě Azure App Service.

Zabezpečení účtu úložiště

Když vytváříte aplikaci funkcí, musíte vytvořit nebo propojit účet Azure Storage pro obecné účely, který podporuje službu Blob, Queue a Table Storage. Tento účet úložiště můžete nahradit účtem, který je zabezpečený virtuální sítí s přístupem povoleným koncovými body služby nebo privátními koncovými body. Další informace najdete v části Omezení účtu úložiště na virtuální síť.

Nasazení aplikace funkcí do virtuální sítě

Služba Azure Private Endpoint je síťové rozhraní, které umožňuje soukromé a bezpečné připojení ke službě, která používá technologii Azure Private Link. Privátní koncový bod používá privátní IP adresu vaší virtuální sítě a tím vlastně přináší službu do vaší virtuální sítě.

Privátní koncový bod můžete použít pro funkce hostované v plánech Flex Consumption, Elastic Premium a Dedicated (App Service).

Pokud chcete uskutečňovat hovory na privátní koncové body, musíte se ujistit, že vaše vyhledávání DNS se přeloží na privátní koncové body. Toto chování můžete vynutit jedním z následujících způsobů:

  • Integrace s privátními zónami Azure DNS Pokud vaše virtuální síť nemá vlastní server DNS, provede se to automaticky.
  • Spravujte privátní koncový bod na serveru DNS používaném vaší aplikací. Pokud chcete spravovat privátní koncový bod, musíte znát adresu koncového bodu a pomocí záznamu A odkazovat na koncový bod, ke kterém se pokoušíte připojit.
  • Nakonfigurujte vlastní server DNS tak, aby předával privátní zóny Azure DNS.

Další informace najdete v tématu Použití privátních koncových bodů pro Web Apps.

Nasazení aplikace funkcí izolovaně

Aplikace Azure Service Environment poskytuje vyhrazené hostitelské prostředí, ve kterém můžete spouštět funkce. Tato prostředí umožňují nakonfigurovat jednu front-endovou bránu, kterou můžete použít k ověření všech příchozích požadavků. Další informace najdete v tématu Integrace prostředí ILB App Service Environment se službou Azure Application Gateway.

Použijte službu brány

Služby brány, jako je Azure Application Gateway a Azure Front Door, umožňují nastavit firewall webových aplikací (WAF). Pravidla WAF slouží k monitorování nebo blokování zjištěných útoků, které poskytují další vrstvu ochrany vašich funkcí. Pokud chcete nastavit WAF, musí vaše aplikace funkcí běžet v ASE nebo používat privátní koncové body (Preview). Další informace najdete v tématu Použití privátních koncových bodů.

Další kroky