Upravit

Sdílet prostřednictvím


Integrované bezserverové mikroslužby virtuální sítě

Azure API Management
Azure Cosmos DB
Azure Functions
Azure Key Vault
Azure Virtual Network

V tomto řešení Azure řídí Azure API Management (APIM) přístup k rozhraní API prostřednictvím jednoho spravovaného koncového bodu. Back-end aplikace se skládá ze dvou vzájemně závislých aplikací mikroslužeb Azure Functions , které vytvářejí a spravují záznamy pacientů a záznamy auditu. APIM a dvě aplikace funkcí k sobě přistupují prostřednictvím uzamčené virtuální sítě.

Tento článek a přidružený projekt kódu destilují ukázkový scénář až do hlavních technických komponent, aby sloužily jako generování pro konkrétní implementace. Řešení automatizuje všechna nasazení kódu a infrastruktury pomocí Terraformu a zahrnuje automatizovanou integraci, jednotku a zátěžové testování.

Architektura

Následující diagram znázorňuje tok žádosti o vytvoření záznamu pacienta:

Diagram znázorňující integrované mikroslužby virtuální sítě

Stáhněte si soubor aplikace Visio s touto architekturou.

Workflow

  1. Externí služby a klienti vytvoří požadavek POST na APIM s datovým tělem, který obsahuje informace o pacientech.
  2. APIM volá CreatePatient funkci v rozhraní API patient s danými informacemi o pacientech.
  3. Funkce CreatePatient v rozhraní API pro pacienta volá CreateAuditRecord funkci v aplikaci funkcí Rozhraní API pro audit a vytvoří záznam auditu.
  4. Funkce rozhraní APICreateAuditRecord pro audit vytvoří záznam auditu ve službě Azure Cosmos DB a vrátí úspěšnou odpověď na funkci rozhraní APICreatePatient pacienta.
  5. Funkce CreatePatient vytvoří dokument pacienta ve službě Azure Cosmos DB a vrátí úspěšnou odpověď na APIM.
  6. Vnější služby a klienti obdrží odpověď na úspěch z APIM.

Komponenty

Řešení používá následující komponenty:

  • Azure API Management (APIM) je hybridní multicloudová platforma pro správu rozhraní API ve všech prostředích. V tomto řešení apim řídí interní a třetí strany přístup k rozhraní API pro pacienta, které umožňuje čtení a zápis dat. APIM umožňuje snadnou integraci s různými mechanismy ověřování.

  • Azure Functions je bezserverová výpočetní platforma, která zpracovává malé části kódu řízené událostmi. Cloudová infrastruktura poskytuje potřebné aktualizované servery pro spouštění funkcí ve velkém měřítku. Aktuální řešení používá sadu dvou mikroslužeb rozhraní API služby Azure Functions, které vytvářejí a spravují operace pro výsledky testů pacientů a záznamy auditování.

  • Azure Virtual Network poskytuje izolované a vysoce zabezpečené aplikační prostředí omezením síťového přístupu na konkrétní IP adresy nebo podsítě. ApiM i Azure Functions podporují omezení přístupu a nasazení ve virtuálních sítích. Toto řešení používá integraci místní virtuální sítě k nasazení obou aplikací funkcí ve stejné virtuální síti ve stejné oblasti.

  • Azure Key Vault centrálně ukládá, šifruje a spravuje přístup ke klíčům, certifikátům a připojovací řetězec. Toto řešení udržuje klíče hostitele Služby Azure Functions a připojovací řetězec Azure Cosmos DB ve službě Key Vault, ke kterým mají přístup pouze zadané identity.

  • Azure Cosmos DB je plně spravovaná bezserverová databáze s okamžitým automatickým škálováním. V aktuálním řešení obě mikroslužby ukládají data ve službě Azure Cosmos DB pomocí ovladače MongoDB Node.js. Služby nesdílejí data a každou službu můžete nasadit do své vlastní nezávislé databáze.

  • Application Insights, funkce služby Azure Monitor, sestavy o výkonu aplikací, využití, dostupnosti a chování pro detekci a diagnostice anomálií.

    Selhání v architektuře založené na mikroslužbách se často distribuují v různých komponentách a není možné je diagnostikovat tak, že se podíváte na služby izolovaně. Schopnost korelovat telemetrii napříč komponentami je důležitá pro diagnostiku těchto problémů. Telemetrie Application Insights centralizuje protokolování podél celého kanálu požadavků, aby bylo zjištěno anomálie výkonu. Telemetrie sdílí společné ID operace, což umožňuje korelaci mezi komponentami.

    ApiM a modul runtime Azure Functions mají integrovanou podporu application Insights ke generování a korelaci široké škály telemetrických dat, včetně standardního výstupu aplikace. Aplikace funkcí používají sadu Application Insights Node.js SDK k ručnímu sledování závislostí a další vlastní telemetrie.

    Další informace o distribuovaném trasování telemetrie v tomto řešení najdete v tématu Distribuovaná telemetrie.

Alternativy

  • Aktuální řešení vyžaduje klíč předplatného pro přístup ke koncovému bodu APIM, ale můžete také použít ověřování Microsoft Entra.
  • Kromě vyžadování přístupových klíčů rozhraní API můžete k povolení autorizace Microsoft Entra pro spravované identity rozhraní API použít integrované ověřování služby App Service služby Azure Functions.
  • Koncový bod služby Azure Cosmos DB v tomto řešení můžete nahradit jinou službou MongoDB beze změny kódu.
  • Další zabezpečení služby Azure Cosmos DB umožňuje uzamknout provoz z databází Azure Cosmos DB do aplikací funkcí.
  • Komponenty, jako je Azure Cosmos DB, můžou odesílat telemetrii do služby Azure Monitor, kde je možné korelovat s telemetrií z Application Insights.
  • Místo Terraformu můžete pro úlohy obměny klíčů key Vaultu použít Azure Portal nebo Azure CLI.
  • Místo Terraformu můžete k automatizaci nasazení řešení použít systém, jako je Azure DevOps nebo GitHub Actions .
  • Pro zajištění vyšší dostupnosti je možné toto řešení nasadit do více oblastí. Nastavte Službu Azure Cosmos DB na multi-master, použijte integrovanou podporu služby APIM pro více oblastí a nasaďte aplikace Azure Functions do spárovaných oblastí.

Podrobnosti scénáře

Tento článek popisuje integrované řešení pro správu záznamů pacientů. Zdravotnická organizace musí digitálně ukládat velké objemy vysoce citlivých dat zdravotních testů pacientů v cloudu. Interní systémy a systémy třetích stran musí být schopné bezpečně číst a zapisovat data prostřednictvím aplikačního programovacího rozhraní (API). Všechny interakce s daty musí být zaznamenány v registru auditu.

Potenciální případy použití

  • Přístup k vysoce citlivým datům z určených externích koncových bodů
  • Implementujte zabezpečené auditování pro operace přístupu k datům.
  • Integrujte vzájemně závislé aplikace mikroslužeb s běžným přístupem a zabezpečením.
  • Používejte funkce zabezpečení virtuální sítě a současně využijte úspory nákladů bez serveru a flexibilitu.

Zaměstnanecké výhody

Mezi výhody bezserverových aplikací, jako je Azure Functions, patří úspora nákladů a flexibilita při používání pouze nezbytných výpočetních prostředků, a nikoli placení předem vyhrazených serverů. Toto řešení umožňuje službě Azure Functions používat omezení přístupu k virtuální síti pro zabezpečení bez nákladů a provozních nákladů na plnou Aplikace Azure prostředí služeb (ASE).

APIM řídí interní přístup a přístup třetích stran k sadě mikroslužeb rozhraní API založených na azure Functions. Rozhraní API pro pacienta poskytuje operace vytvoření, čtení, aktualizace a odstranění (CRUD) pro pacienty a jejich výsledky testů. Aplikace funkcí rozhraní API pro audit poskytuje operace pro vytváření položek auditování.

Každá aplikace funkcí ukládá svá data do nezávislé databáze Azure Cosmos DB . Azure Key Vault bezpečně uchovává všechny klíče, tajné kódy a připojovací řetězec přidružené k aplikacím a databázím. Telemetrie Application Insights a Azure Monitor centralizuje protokolování napříč systémem.

Důležité informace

Tyto aspekty implementují pilíře dobře architektuře Azure, což je sada hlavních principů, které je možné použít ke zlepšení kvality úlohy. Další informace naleznete v tématu Microsoft Azure Well-Architected Framework.

Při implementaci tohoto řešení zvažte následující aspekty.

Zabezpečení

Zabezpečení poskytuje záruky proti záměrným útokům a zneužití cenných dat a systémů. Další informace najdete v tématu Přehled pilíře zabezpečení.

Vzhledem k citlivosti dat je zabezpečení v tomto řešení nejdůležitější. Řešení používá k ochraně dat několik mechanismů:

  • Správa brány APIM
  • Omezení přístupu k virtuální síti
  • Přístupové klíče služby a připojovací řetězce
  • Správa klíčů a připojovací řetězec ve službě Key Vault
  • Obměně klíčů služby Key Vault
  • Identity spravované služby

Instanci služby Azure API Management můžete chránit před distribuovanými útoky DDoS (Denial of Service) pomocí ochrany Před útoky DDoS (Azure DDoS). Azure DDoS Protection poskytuje vylepšené funkce omezení rizik DDoS, které chrání před útoky DDoS volumetric a protocol.

Další podrobnosti o vzoru zabezpečení pro toto řešení najdete v tématu Vzor zabezpečení pro komunikaci mezi api Management, aplikacemi Functions a Azure Cosmos DB.

Správa brány rozhraní API

Systém je veřejně přístupný pouze prostřednictvím jediného spravovaného koncového bodu APIM. Podsíť APIM omezuje příchozí provoz na zadané IP adresy uzlu brány.

APIM umožňuje snadnou integraci s různými mechanismy ověřování. Aktuální řešení vyžaduje klíč předplatného, ale k zabezpečení koncového bodu APIM můžete použít také ID Microsoft Entra, aniž byste museli spravovat klíče předplatného v APIM.

Virtuální síť

Aby se zabránilo veřejnému zveřejnění rozhraní API a funkcí, azure Virtual Network omezuje síťový přístup pro rozhraní API a funkce na konkrétní IP adresy nebo podsítě. Api Management i Azure Functions podporují omezení přístupu a nasazení ve virtuálních sítích.

Aplikace funkcí můžou omezit přístup k podsíti IPv4, IPv6 a podsítě virtuální sítě. Aplikace funkcí ve výchozím nastavení povoluje veškerý přístup, ale jakmile přidáte jednu nebo více omezení adresy nebo podsítě, aplikace odepře všechny ostatní síťové přenosy.

V tomto řešení aplikace funkcí umožňují interakce pouze v rámci své vlastní virtuální sítě. Rozhraní API pro pacienta umožňuje volání z podsítě APIM přidáním podsítě APIM do seznamu povolených omezení přístupu. Rozhraní API pro audit umožňuje komunikaci s rozhraním Patient API přidáním podsítě rozhraní Patient API do seznamu povolených omezení přístupu. Rozhraní API odmítnou provoz z jiných zdrojů.

Řešení využívá integraci místních virtuálních sítí k integraci SLUŽBY APIM a aplikací funkcí se stejnou virtuální sítí a oblastí Azure. Při použití integrace regionální virtuální sítě je potřeba vzít v úvahu několik důležitých aspektů:

  • Skladovou položku Azure Functions Premium musíte použít k integraci místní virtuální sítě i škálovatelnosti.
  • K povolení připojení virtuální sítě musíte použít SKU APIM Developer nebo Premium.
  • Vzhledem k tomu, že nasadíte aplikace funkcí v podsíti virtuální sítě, nakonfigurujete omezení přístupu aplikací funkcí tak, aby umožňovala provoz z jiných podsítí ve virtuální síti.
  • Integrace místní virtuální sítě omezuje pouze odchozí provoz z funkce Azure Functions do virtuální sítě. Příchozí provoz se stále směruje mimo virtuální síť, i když je omezený přístupovým seznamem aplikace.

Izolace virtuální sítě na úrovni sítě nabízí pouze služba App Service Environment . Služba ASE může vyžadovat výrazně větší náklady a úsilí k implementaci než Azure Functions, které podporují integraci regionálních virtuálních sítí. Škálování ASE je také méně elastické.

Access keys

Můžete volat APIM a aplikace funkcí bez použití přístupových klíčů. Zakázání přístupových klíčů ale není dobrým postupem zabezpečení, takže všechny komponenty v tomto řešení vyžadují pro přístup klíče.

  • Přístup k APIM vyžaduje klíč předplatného, takže uživatelé musí do hlaviček HTTP zahrnout Ocp-Apim-Subscription-Key .
  • Všechny funkce v aplikaci funkcí Rozhraní API pro pacienta vyžadují přístupový klíč rozhraní API, takže APIM musí při volání rozhraní PATIENT API obsahovat x-functions-key hlavičku HTTP.
  • Volání CreateAuditRecord v aplikaci funkcí Rozhraní API pro audit vyžaduje přístupový klíč rozhraní API, takže rozhraní API pro pacienta musí být při volání funkce zahrnuté x-functions-key do hlavičky CreateAuditRecord HTTP.
  • Obě aplikace Functions používají azure Cosmos DB jako úložiště dat, takže musí používat připojovací řetězec pro přístup k databázím Azure Cosmos DB.

Úložiště služby Key Vault

I když je možné zachovat přístupové klíče a připojovací řetězec v nastavení aplikace, není vhodné, protože každý, kdo má přístup k aplikaci, uvidí klíče a řetězce. Osvědčeným postupem, zejména pro produkční prostředí, je zachovat klíče a řetězce ve službě Azure Key Vault a používat odkazy služby Key Vault k volání aplikací. Key Vault umožňuje přístup pouze k určeným spravovaným identitám.

Služba APIM používá příchozí zásadu k ukládání klíče hostitele rozhraní Patient API do mezipaměti, aby se zlepšil výkon. V případě následných pokusů apiM nejprve vyhledá klíč v mezipaměti.

  • APIM načte klíč hostitele rozhraní API pro pacienta ze služby Key Vault, uloží ho do mezipaměti a vloží ho do hlavičky HTTP při volání aplikace funkcí api pro pacienta.
  • Aplikace funkcí rozhraní API pro pacienta načte klíč hostitele rozhraní API pro audit ze služby Key Vault a při volání aplikace funkcí api pro audit ji vloží do hlavičky HTTP.
  • Modul runtime služby Azure Functions ověřuje klíče v hlavičce HTTP příchozích požadavků.

Obměna klíčů

Rotace klíčů key Vaultu pomáhá zajistit lepší zabezpečení systému. Klíče můžete automaticky otáčet pravidelně nebo můžete klíče otáčet ručně nebo na vyžádání v případě úniku.

Obměna klíčů zahrnuje aktualizaci několika nastavení:

  • Samotný klíč hostitele aplikace funkcí
  • Tajný klíč ve službě Key Vault, který ukládá klíč hostitele
  • Referenční informace ke službě Key Vault v nastavení aplikace funkcí pro odkaz na nejnovější verzi tajného kódu
  • Referenční informace ke službě Key Vault v zásadách ukládání do mezipaměti APIM pro rozhraní API pro pacienta

Aktuální řešení používá Terraform pro většinu klíčových úloh obměně. Další informace najdete v tématu Vzor obměnky klíčů pomocí Terraformu.

Spravované identity

V tomto řešení APIM a aplikace funkcí používají identity spravované služby přiřazené systémem Azure (MSI) pro přístup k tajným kódům služby Key Vault. Key Vault má pro spravovanou identitu každé služby následující zásady přístupu:

  • APIM může získat klíč hostitele aplikace funkcí API pro pacienta.
  • Aplikace funkcí rozhraní API pro pacienta může získat klíč hostitele rozhraní API pro audit a připojovací řetězec služby Azure Cosmos DB pro své úložiště dat.
  • Aplikace funkcí rozhraní API pro audit může získat připojovací řetězec služby Azure Cosmos DB pro své úložiště dat.

Optimalizace nákladů

Optimalizace nákladů se zabývá způsoby, jak snížit zbytečné výdaje a zlepšit efektivitu provozu. Další informace najdete v tématu Přehled pilíře optimalizace nákladů.

Jednou z hlavních výhod bezserverových aplikací, jako je Azure Functions, jsou úspory nákladů, které se můžou platit jenom za spotřebu, a ne platit předem za vyhrazené servery. Podpora virtuální sítě vyžaduje plán Azure Functions Premium za příplatek. Azure Functions Premium podporuje integraci regionálních virtuálních sítí a stále podporuje dynamické škálování. Skladová položka Azure Functions Premium zahrnuje integraci virtuální sítě do služby APIM.

Podrobnosti a cenová kalkulačka najdete v tématu Ceny služby Azure Functions.

Funkce je také možné hostovat na virtuálních počítačích služby App Service. Izolace virtuální sítě na úrovni sítě nabízí pouze prostředí App Service Environment (ASE ). Služba ASE může být výrazně dražší než plán Azure Functions, který podporuje integraci regionálních virtuálních sítí, a škálování ASE je méně elastické.

Nasazení tohoto scénáře

Zdrojový kód pro toto řešení je v mikroslužbách bezserverových mikroslužeb integrovaných v rámci virtuální sítě Azure.

Zdrojový kód TypeScriptupro rozhraní PatientTest API a rozhraní API pro audit jsou ve /src složce. Zdroj každého rozhraní API obsahuje vývojový kontejner , který má nainstalované všechny požadavky, které vám pomůžou rychle začít.

Obě rozhraní API mají úplnou sadu automatizovaných integračních testů a testů jednotek, které pomáhají zabránit regresím při provádění změn. Projekt je také nakonfigurovaný pro lintování pomocí ESLint, aby se zachovaly styly kódu a pomohly chránit před neúmyslnými chybami. Příslušné soubory README služeb obsahují informace o tom, jak spouštět testy a lintovat.

Nasazení Terraformu

Složka /env projektu kódu obsahuje skripty a šablony pro nasazení Terraformu. Terraform nasadí APIM a aplikace funkcí a nakonfiguruje je tak, aby používaly nasazenou instanci Application Insights. Terraform také zřídí všechny prostředky a konfigurace, včetně uzamčení sítě a vzoru zabezpečení přístupového klíče.

Soubor README nasazení vysvětluje, jak nasadit prostředí Terraformu ve vašem vlastním předplatném Azure. Složka /env obsahuje také vývojový kontejner , který má nainstalované všechny požadavky pro nasazení Terraformu.

Zátěžové testování Pomocí testovacího zatížení

Pokud chcete měřit výkon rozhraní API, můžete spouštět zátěžové testování s rozhraními API s zahrnutými zátěžovými testy Sady. Python je opensourcový nástroj pro zátěžové testování a testy jsou napsané v Pythonu. Zátěžové testy můžete spouštět místně nebo vzdáleně v clusteru Azure Kubernetes Service (AKS). Testy provádějí různé operace s koncovým bodem APIM a ověřují chování proti kritériím úspěchu a selhání.

Přispěvatelé

Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.

Hlavní autor:

  • Hannes Nel | Vedoucí hlavního softwarového inženýrství

Pokud chcete zobrazit neveřejné profily LinkedIn, přihlaste se na LinkedIn.

Další kroky

Následující architektury pokrývají klíčové scénáře služby API Management:

Následující články popisují klíčové scénáře funkcí: