Virtuella nätverksintegrerade serverlösa mikrotjänster

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

I den här Azure-lösningen styr Azure API Management (APIM) åtkomsten till API:et via en enda hanterad slutpunkt. Programserverdelen består av två beroende Azure Functions-mikrotjänstappar som skapar och hanterar patientposter och granskningsposter. APIM och de två funktionsapparna kommer åt varandra via ett låst virtuellt nätverk.

Den här artikeln och det associerade kodprojektet destillerar exempelscenariot ned till de viktigaste tekniska komponenterna för att fungera som byggnadsställningar för specifika implementeringar. Lösningen automatiserar alla kod- och infrastrukturdistributioner med Terraform och inkluderar automatiserad integrering, enhets- och belastningstestning.

Arkitektur

Följande diagram visar flödet för begäran om att skapa patientposter:

Diagram showing virtual network integrated microservices.

Ladda ned en Visio-fil med den här arkitekturen.

Arbetsflöde

  1. Externa tjänster och klienter gör en POST-begäran till APIM, med en datakropp som innehåller patientinformation.
  2. APIM anropar CreatePatient funktionen i patient-API:et med den angivna patientinformationen.
  3. Funktionen CreatePatient i patient-API :et CreateAuditRecord anropar funktionen i funktionsappen Gransknings-API för att skapa en granskningspost.
  4. Funktionen Audit APICreateAuditRecord skapar granskningsposten i Azure Cosmos DB och returnerar ett lyckat svar på funktionen Patient APICreatePatient .
  5. Funktionen CreatePatient skapar patientdokumentet i Azure Cosmos DB och returnerar ett lyckat svar till APIM.
  6. Externa tjänster och klienter får svar från APIM.

Komponenter

Lösningen använder följande komponenter:

  • Azure API Management (APIM) är en hybridplattform med flera moln för hantering av API:er i alla miljöer. I den här lösningen kontrollerar APIM intern och tredjepartsåtkomst till patient-API:et som tillåter läsning och/eller skrivning av data. APIM möjliggör enkel integrering med olika autentiseringsmekanismer.

  • Azure Functions är en serverlös beräkningsplattform som hanterar små, händelsedrivna koddelar. Molninfrastrukturen tillhandahåller de nödvändiga uppdaterade servrarna för att köra funktionerna i stor skala. Den aktuella lösningen använder en uppsättning med två Azure Functions API-mikrotjänster som skapar och hanterar åtgärder för patienttestresultat och granskningsposter.

  • Azure Virtual Network tillhandahåller en isolerad och mycket säker programmiljö genom att begränsa nätverksåtkomsten till specifika IP-adresser eller undernät. Både APIM och Azure Functions stöder åtkomstbegränsningar och distribution i virtuella nätverk. Den här lösningen använder regional integrering av virtuella nätverk för att distribuera båda funktionsapparna i samma virtuella nätverk i samma region.

  • Azure Key Vault lagrar, krypterar och hanterar åtkomst till nycklar, certifikat och anslutningssträng centralt. Den här lösningen underhåller Azure Functions-värdnycklarna och Azure Cosmos DB-anslutningssträng i ett Nyckelvalv som endast angivna identiteter kan komma åt.

  • Azure Cosmos DB är en fullständigt hanterad serverlös databas med omedelbar, automatisk skalning. I den aktuella lösningen lagrar båda mikrotjänsterna data i Azure Cosmos DB med hjälp av MongoDB Node.js-drivrutinen. Tjänsterna delar inte data och du kan distribuera varje tjänst till en egen oberoende databas.

  • Application Insights, en funktion i Azure Monitor, rapporterar om programprestanda, användning, tillgänglighet och beteende för att identifiera och diagnostisera avvikelser.

    Fel i mikrotjänstbaserad arkitektur distribueras ofta över en mängd olika komponenter och kan inte diagnostiseras genom att titta på tjänsterna isolerat. Möjligheten att korrelera telemetri mellan komponenter är avgörande för att diagnostisera dessa problem. Application Insights-telemetri centraliserar loggning längs hela begärandepipelinen för att identifiera prestandaavvikelser. Telemetrin delar ett gemensamt åtgärds-ID, vilket möjliggör korrelation mellan komponenter.

    APIM och Azure Functions-körningen har inbyggt stöd för Application Insights för att generera och korrelera en mängd olika telemetri, inklusive standardprogramutdata. Funktionsapparna använder Application Insights Node.js SDK för att manuellt spåra beroenden och annan anpassad telemetri.

    Mer information om den distribuerade telemetrispårningen i den här lösningen finns i Distribuerad telemetri.

Alternativ

  • Den aktuella lösningen kräver en prenumerationsnyckel för åtkomst till APIM-slutpunkten, men du kan också använda Microsoft Entra-autentisering.
  • Förutom att kräva API-åtkomstnycklar kan du använda Azure Functions inbyggda App Service-autentisering för att aktivera Microsoft Entra-auktorisering för API:ernas hanterade identiteter.
  • Du kan ersätta Azure Cosmos DB-slutpunkten i den här lösningen med en annan MongoDB-tjänst utan att ändra koden.
  • För ytterligare Azure Cosmos DB-säkerhet kan du låsa trafiken från Azure Cosmos DB-databaserna till funktionsapparna.
  • Komponenter som Azure Cosmos DB kan skicka telemetri till Azure Monitor, där den kan korreleras med telemetrin från Application Insights.
  • I stället för Terraform kan du använda Azure-portalen eller Azure CLI för key vault-nyckelrotationsuppgifter .
  • I stället för Terraform kan du använda ett system som Azure DevOps eller GitHub Actions för att automatisera lösningsdistributionen.
  • För högre tillgänglighet kan den här lösningen distribueras till flera regioner. Ange Azure Cosmos DB till multi-master, använd APIM:s inbyggda stöd för flera regioner och distribuera Azure Function-apparna till länkade regioner.

Information om scenario

I den här artikeln beskrivs en integrerad lösning för hantering av patientjournaler. En hälsoorganisation måste lagra stora mängder mycket känsliga medicinska testdata för patienter digitalt i molnet. Interna system och tredjepartssystem måste kunna läsa och skriva data på ett säkert sätt via ett api (Application Programming Interface). Alla interaktioner med data måste registreras i ett granskningsregister.

Potentiella användningsfall

  • Få åtkomst till mycket känsliga data från avsedda externa slutpunkter.
  • Implementera säker granskning för dataåtkomståtgärder.
  • Integrera beroende mikrotjänstappar med gemensam åtkomst och säkerhet.
  • Använd säkerhetsfunktioner för virtuella nätverk samtidigt som du drar nytta av serverlösa kostnadsbesparingar och flexibilitet.

Förmåner

Vissa fördelar med serverlösa program som Azure Functions är kostnadsbesparingarna och flexibiliteten med att bara använda nödvändiga beräkningsresurser i stället för att betala i förväg för dedikerade servrar. Med den här lösningen kan Azure Functions använda åtkomstbegränsningar för virtuella nätverk för säkerhet, utan att medföra kostnader och driftkostnader för fullständiga Azure-App Service-miljön (ASE).

APIM styr intern och tredjepartsåtkomst till en uppsättning API-mikrotjänster som bygger på Azure Functions. Patient-API:et tillhandahåller crud-åtgärder (create, read, update och delete) för patienter och deras testresultat. Funktionsappen Gransknings-API tillhandahåller åtgärder för att skapa granskningsposter.

Varje funktionsapp lagrar sina data i en oberoende Azure Cosmos DB-databas . Azure Key Vault innehåller säkert alla nycklar, hemligheter och anslutningssträng som är associerade med appar och databaser. Application Insights-telemetri och Azure Monitor centraliserar loggning i hela systemet.

Att tänka på

Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.

Tänk på följande när du implementerar den här lösningen.

Säkerhet

Säkerhet ger garantier mot avsiktliga attacker och missbruk av dina värdefulla data och system. Mer information finns i Översikt över säkerhetspelare.

På grund av datakänsligheten är säkerheten av största vikt i den här lösningen. Lösningen använder flera mekanismer för att skydda data:

  • APIM-gatewayhantering
  • Åtkomstbegränsningar för virtuellt nätverk
  • Tjänståtkomstnycklar och anslutningssträngar
  • Nyckel- och anslutningssträng hantering i Key Vault
  • Nyckelrotation för Key Vault
  • Hanterade tjänstidentiteter

Du kan skydda din Azure API Management-instans mot DDoS-attacker (Distributed Denial of Service) med Azure DDoS-skydd. Azure DDoS Protection tillhandahåller förbättrade DDoS-åtgärdsfunktioner som skyddar mot DDoS-attacker med volymer och protokoll.

Mer information om säkerhetsmönstret för den här lösningen finns i Säkerhetsmönster för kommunikation mellan API Management, Functions-appar och Azure Cosmos DB.

HANTERING av API-gateway

Systemet är endast offentligt tillgängligt via den enda hanterade APIM-slutpunkten. APIM-undernätet begränsar inkommande trafik till angivna IP-adresser för gatewaynoder.

APIM möjliggör enkel integrering med olika autentiseringsmekanismer. Den aktuella lösningen kräver en prenumerationsnyckel, men du kan också använda Microsoft Entra-ID för att skydda APIM-slutpunkten utan att behöva hantera prenumerationsnycklar i APIM.

Virtuellt nätverk

För att undvika att exponera API:er och funktioner offentligt begränsar Azure Virtual Network nätverksåtkomsten för API:er och funktioner till specifika IP-adresser eller undernät. Både API Management och Azure Functions stöder åtkomstbegränsningar och distribution i virtuella nätverk.

Funktionsappar kan begränsa åtkomsten till IPv4, IPv6 och det virtuella nätverkets undernät. Som standard tillåter en funktionsapp all åtkomst, men när du lägger till en eller flera adress- eller undernätsbegränsningar nekar appen all annan nätverkstrafik.

I den här lösningen tillåter funktionsapparna endast interaktioner i sitt eget virtuella nätverk. Patient-API:et tillåter anrop från APIM-undernätet genom att lägga till APIM-undernätet i listan över tillåtna åtkomstbegränsningar. Gransknings-API:et tillåter kommunikation med patient-API:et genom att lägga till patient-API:ets undernät i listan över tillåtna åtkomstbegränsningar. API:erna avvisar trafik från andra källor.

Lösningen använder regional integrering av virtuella nätverk för att integrera APIM och funktionsapparna med samma virtuella nätverk och Azure-region. Det finns flera viktiga saker att tänka på när du använder regional integrering av virtuella nätverk:

  • Du måste använda Azure Functions Premium SKU för att ha både regional integrering av virtuella nätverk och skalbarhet.
  • Du måste använda APIM Developer eller Premium SKU för att aktivera VNET-anslutning
  • Eftersom du distribuerar funktionsapparna i ett undernät i det virtuella nätverket konfigurerar du funktionsapparnas åtkomstbegränsningar för att tillåta trafik från andra undernät i det virtuella nätverket.
  • Regional integrering av virtuella nätverk begränsar endast utgående trafik från Azure-funktionen till det virtuella nätverket. Inkommande trafik dirigeras fortfarande utanför det virtuella nätverket, men begränsas av appens åtkomstlista.

Endast App Service-miljön erbjuder fullständig isolering av virtuella nätverk på nätverksnivå. ASE:er kan kräva betydligt mer kostnader och arbete för att implementera än Azure Functions som stöder regional integrering av virtuella nätverk. ASE-skalning är också mindre elastisk.

Access keys

Du kan anropa APIM- och funktionsappar utan att använda åtkomstnycklar. Det är dock inte bra att inaktivera åtkomstnycklarna, så alla komponenter i den här lösningen kräver nycklar för åtkomst.

  • Åtkomst till APIM kräver en prenumerationsnyckel, så användarna måste inkludera Ocp-Apim-Subscription-Key i HTTP-huvuden.
  • Alla funktioner i patient-API-funktionsappen kräver en API-åtkomstnyckel, så APIM måste inkluderas x-functions-key i HTTP-huvudet när du anropar patient-API:et.
  • Anrop CreateAuditRecord i funktionsappen Gransknings-API kräver en API-åtkomstnyckel, så patient-API:et måste inkluderas x-functions-key i HTTP-huvudet när funktionen anropas CreateAuditRecord .
  • Båda Functions-apparna använder Azure Cosmos DB som datalager, så de måste använda anslutningssträng för att få åtkomst till Azure Cosmos DB-databaserna.

Key Vault-lagring

Även om det är möjligt att behålla åtkomstnycklar och anslutningssträng i programinställningarna är det inte bra, eftersom alla som har åtkomst till appen kan se nycklar och strängar. Det bästa sättet, särskilt för produktionsmiljöer, är att behålla nycklar och strängar i Azure Key Vault och använda Key Vault-referenser för att anropa apparna. Key Vault tillåter endast åtkomst till angivna hanterade identiteter.

APIM använder en inkommande princip för att cachelagrat värdnyckeln för patient-API:et för bättre prestanda. För efterföljande försök letar APIM först efter nyckeln i cacheminnet.

  • APIM hämtar värdnyckeln för patient-API:et från Key Vault, cachelagrar den och placerar den i ett HTTP-huvud när du anropar funktionsappen patient-API.
  • Patient-API-funktionsappen hämtar värdnyckeln för gransknings-API:et från Key Vault och placerar den i ett HTTP-huvud när du anropar funktionsappen Gransknings-API.
  • Azure-funktionskörningen verifierar nycklarna i HTTP-huvudena på inkommande begäranden.

Nyckelrotation

Genom att rotera Key Vault-nycklar blir systemet säkrare. Du kan rotera nycklar automatiskt med jämna mellanrum, eller så kan du rotera nycklar manuellt eller på begäran i händelse av läckage.

Nyckelrotation omfattar uppdatering av flera inställningar:

  • Själva funktionsappens värdnyckel
  • Hemligheten i Key Vault som lagrar värdnyckeln
  • Key Vault-referensen i programinställningarna för funktionsappen för att referera till den senaste hemliga versionen
  • Key Vault-referensen i APIM-cachelagringsprincipen för patient-API:et

Den aktuella lösningen använder Terraform för de flesta nyckelrotationsuppgifter. Mer information finns i Nyckelrotationsmönster med Terraform.

Hanterade identiteter

I den här lösningen använder APIM och funktionsapparna Azure systemtilldelade hanterade tjänstidentiteter (MSI: er) för att få åtkomst till Key Vault-hemligheterna. Key Vault har följande enskilda åtkomstprinciper för varje tjänsts hanterade identitet:

  • APIM kan hämta värdnyckeln för patient-API-funktionsappen.
  • Patient-API-funktionsappen kan hämta värdnyckeln för gransknings-API:et och Azure Cosmos DB-anslutningssträng för datalagret.
  • Funktionsappen Gransknings-API kan hämta Azure Cosmos DB-anslutningssträng för datalagret.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.

En av de främsta fördelarna med serverlösa program som Azure Functions är kostnadsbesparingarna med att bara betala för förbrukning, i stället för att betala i förväg för dedikerade servrar. Stöd för virtuella nätverk kräver Azure Functions Premium-planen , mot en extra kostnad. Azure Functions Premium har stöd för regional integrering av virtuella nätverk, samtidigt som dynamisk skalning stöds. Azure Functions Premium SKU innehåller integrering av virtuella nätverk i APIM.

Mer information och priskalkylator finns i Prissättning för Azure Functions.

Funktioner kan också finnas på virtuella App Service-datorer. Endast App Service-miljön (ASE) erbjuder fullständig isolering av virtuella nätverk på nätverksnivå. ASE kan vara betydligt dyrare än en Azure Functions-plan som stöder regional integrering av virtuella nätverk, och ASE-skalning är mindre elastisk.

Distribuera det här scenariot

Källkoden för den här lösningen finns på Azure VNet-Integrated Serverless Microservices.

TypeScript-källkoden för PatientTest-API:et och gransknings-API:et /src finns i mappen. Varje API:s källa innehåller en utvecklingscontainer som har alla förutsättningar installerade för att hjälpa dig att komma igång snabbt.

Båda API:erna har en fullständig uppsättning automatiserade integrerings- och enhetstester för att förhindra regressioner när du gör ändringar. Projektet är också konfigurerat för lintning med ESLint, för att underhålla kodformat och skydda mot oavsiktliga fel. Tjänsternas respektive README-filer innehåller information om hur du kör testerna och linting.

Terraform-distribution

Kodprojektets /env-mapp innehåller skript och mallar för Terraform-distribution . Terraform distribuerar APIM och funktionsapparna och konfigurerar dem att använda den distribuerade Application Insights-instansen. Terraform etablerar även alla resurser och konfigurationer, inklusive nätverkslåsning och säkerhetsmönstret för åtkomstnycklar.

I distributions-README förklaras hur du distribuerar Terraform-miljön i din egen Azure-prenumeration. Mappen /env innehåller också en utvecklingscontainer som har alla förutsättningar installerade för Terraform-distribution.

Testning av gräshoppsbelastning

För att mäta API-prestanda kan du köra belastningstestning mot API:erna med de inkluderade Locust-belastningstesterna. Locust är ett verktyg för belastningstestning med öppen källkod och testerna skrivs i Python. Du kan köra belastningstesterna lokalt eller via fjärranslutning i ett AKS-kluster (Azure Kubernetes Service). Testerna utför en mängd olika åtgärder mot APIM-slutpunkten och verifierar beteenden mot framgångs- och felkriterier.

Deltagare

Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.

Huvudförfattare:

  • Hannes Nel | Huvudansvarig programvaruutvecklingsledare

Om du vill se icke-offentliga LinkedIn-profiler loggar du in på LinkedIn.

Nästa steg

Följande arkitekturer omfattar viktiga API Management-scenarier:

Följande artiklar beskriver viktiga funktionsscenarier: