Virtuele netwerk geïntegreerde serverloze microservices

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

In deze Azure-oplossing beheert Azure API Management (APIM) de toegang tot de API via één beheerd eindpunt. De toepassingsback-end bestaat uit twee onderling afhankelijke microservice-apps van Azure Functions waarmee patiëntrecords en controlerecords worden gemaakt en beheerd. APIM en de twee functie-apps hebben toegang tot elkaar via een vergrendeld virtueel netwerk.

In dit artikel en het bijbehorende codeproject wordt het voorbeeldscenario gedestilleerd tot de belangrijkste technische onderdelen, om te fungeren als scaffolding voor specifieke implementaties. De oplossing automatiseert alle code- en infrastructuurimplementaties met Terraform en omvat geautomatiseerde integratie, eenheid en belastingstests.

Architectuur

In het volgende diagram ziet u de aanvraagstroom voor het maken van patiëntenrecords:

Diagram showing virtual network integrated microservices.

Een Visio-bestand van deze architectuur downloaden.

Werkstroom

  1. Externe services en clients doen een POST-aanvraag naar APIM, met een gegevensbody die patiëntgegevens bevat.
  2. APIM roept de CreatePatient functie aan in de patiënten-API met de opgegeven patiëntgegevens.
  3. Met CreatePatient de functie in patiënt-API wordt de CreateAuditRecord functie aangeroepen in de functie-app Audit-API om een auditrecord te maken.
  4. De functie Controle-APICreateAuditRecord maakt de controlerecord in Azure Cosmos DB en retourneert een geslaagde reactie op de functie Patiënt-APICreatePatient .
  5. De CreatePatient functie maakt het patiëntdocument in Azure Cosmos DB en retourneert een geslaagde reactie op APIM.
  6. De externe services en clients ontvangen het succesantwoord van APIM.

Onderdelen

De oplossing maakt gebruik van de volgende onderdelen:

  • Azure API Management (APIM) is een hybride, multicloudplatform voor het beheren van API's in alle omgevingen. In deze oplossing beheert APIM interne en externe toegang tot de Patiënt-API waarmee gegevens kunnen worden gelezen en/of geschreven. APIM maakt eenvoudige integratie met verschillende verificatiemechanismen mogelijk.

  • Azure Functions is een serverloos rekenplatform waarmee kleine, gebeurtenisgestuurde stukjes code worden verwerkt. De cloudinfrastructuur biedt de benodigde bijgewerkte servers om de functies op schaal uit te voeren. De huidige oplossing maakt gebruik van twee Azure Functions API-microservices die bewerkingen maken en beheren voor patiënttestresultaten en controlerecords.

  • Azure Virtual Network biedt een geïsoleerde en zeer veilige toepassingsomgeving door netwerktoegang tot specifieke IP-adressen of subnetten te beperken. ApiM en Azure Functions bieden ondersteuning voor toegangsbeperking en implementatie in virtuele netwerken. Deze oplossing maakt gebruik van regionale integratie van virtuele netwerken om beide functie-apps in hetzelfde virtuele netwerk in dezelfde regio te implementeren.

  • Azure Key Vault slaat de toegang tot sleutels, certificaten en verbindingsreeks centraal op, versleutelt en beheert. Deze oplossing onderhoudt de Azure Functions-hostsleutels en Azure Cosmos DB-verbindingsreeks s in een Key Vault waartoe alleen opgegeven identiteiten toegang hebben.

  • Azure Cosmos DB is een volledig beheerde serverloze database met direct, automatisch schalen. In de huidige oplossing slaan beide microservices gegevens op in Azure Cosmos DB met behulp van het MongoDB Node.js-stuurprogramma. De services delen geen gegevens en u kunt elke service implementeren in een eigen onafhankelijke database.

  • Application Insights, een functie van Azure Monitor, rapporteert over toepassingsprestaties, gebruik, beschikbaarheid en gedrag om afwijkingen te detecteren en te helpen diagnosticeren.

    Fouten in architectuur op basis van microservices worden vaak verdeeld over verschillende onderdelen en kunnen niet worden agnose door de services geïsoleerd te bekijken. De mogelijkheid om telemetrie te correleren tussen onderdelen is essentieel voor het diagnosticeren van deze problemen. Application Insights-telemetrie centraliseert logboekregistratie in de hele aanvraagpijplijn om prestatieafwijkingen te detecteren. De telemetrie deelt een gemeenschappelijke bewerkings-id, waardoor correlatie tussen onderdelen mogelijk is.

    APIM en de Azure Functions-runtime bieden ingebouwde ondersteuning voor Application Insights voor het genereren en correleren van een groot aantal telemetriegegevens, waaronder standaardtoepassingsuitvoer. De functie-apps gebruiken de Application Insights Node.js SDK om afhankelijkheden en andere aangepaste telemetrie handmatig bij te houden.

    Zie gedistribueerde telemetrie voor meer informatie over de gedistribueerde telemetrietracering in deze oplossing.

Alternatieven

  • Voor de huidige oplossing is een abonnementssleutel vereist voor toegang tot het APIM-eindpunt, maar u kunt ook Microsoft Entra-verificatie gebruiken.
  • Naast het vereisen van API-toegangssleutels, kunt u de ingebouwde App Service-verificatie van Azure Functions gebruiken om Microsoft Entra-autorisatie in te schakelen voor de beheerde identiteiten van de API's.
  • U kunt het Azure Cosmos DB-eindpunt in deze oplossing vervangen door een andere MongoDB-service zonder de code te wijzigen.
  • Voor extra Azure Cosmos DB-beveiliging kunt u verkeer van de Azure Cosmos DB-databases naar de functie-apps vergrendelen.
  • Onderdelen zoals Azure Cosmos DB kunnen telemetrie verzenden naar Azure Monitor, waar deze kan worden gecorreleerd met de telemetrie van Application Insights.
  • In plaats van Terraform kunt u Azure Portal of Azure CLI gebruiken voor sleutelrotatietaken van Key Vault.
  • In plaats van Terraform kunt u een systeem zoals Azure DevOps of GitHub Actions gebruiken om de implementatie van oplossingen te automatiseren.
  • Voor hogere beschikbaarheid kan deze oplossing worden geïmplementeerd in meerdere regio's. Stel Azure Cosmos DB in op meerdere masters, gebruik de ingebouwde ondersteuning voor meerdere regio's van APIM en implementeer de Azure Function-apps in gekoppelde regio's.

Scenariodetails

In dit artikel wordt een geïntegreerde oplossing beschreven voor patiëntendossierbeheer. Een gezondheidsorganisatie moet digitaal grote hoeveelheden zeer gevoelige medische testgegevens van patiënten opslaan in de cloud. Interne systemen en systemen van derden moeten de gegevens veilig kunnen lezen en schrijven via een API (Application Programming Interface). Alle interacties met de gegevens moeten worden vastgelegd in een auditregister.

Potentiële gebruikscases

  • Toegang tot zeer gevoelige gegevens vanaf aangewezen externe eindpunten.
  • Implementeer beveiligde controle voor gegevenstoegangsbewerkingen.
  • Integreer onderling afhankelijke microservices-apps met algemene toegang en beveiliging.
  • Gebruik beveiligingsfuncties voor virtuele netwerken terwijl u profiteert van serverloze kostenbesparingen en flexibiliteit.

Vergoedingen

Enkele voordelen van serverloze toepassingen zoals Azure Functions zijn de kostenbesparingen en flexibiliteit van het gebruik van alleen benodigde rekenresources, in plaats van vooraf te betalen voor toegewezen servers. Met deze oplossing kan Azure Functions toegangsbeperkingen voor virtuele netwerken gebruiken voor beveiliging, zonder dat hiervoor kosten en operationele overhead van volledige Azure-app Service Environments (ASE's) in rekening worden gebracht.

APIM beheert interne en externe toegang tot een set API-microservices die zijn gebouwd op Azure Functions. De Patiënten-API biedt CRUD-bewerkingen (create, read, update en delete) voor patiënten en hun testresultaten. De functie-app Controle-API biedt bewerkingen voor het maken van controlevermeldingen.

Elke functie-app slaat de gegevens op in een onafhankelijke Azure Cosmos DB-database . Azure Key Vault bevat veilig alle sleutels, geheimen en verbindingsreeks die zijn gekoppeld aan de apps en databases. Application Insights-telemetrie en Azure Monitor centraliseren logboekregistratie in het systeem.

Overwegingen

Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die kunnen worden gebruikt om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.

Houd rekening met de volgende aspecten bij het implementeren van deze oplossing.

Beveiliging

Beveiliging biedt garanties tegen opzettelijke aanvallen en misbruik van uw waardevolle gegevens en systemen. Zie Overzicht van de beveiligingspijler voor meer informatie.

Vanwege de gevoeligheid van de gegevens is beveiliging van cruciaal belang in deze oplossing. De oplossing maakt gebruik van verschillende mechanismen om de gegevens te beveiligen:

  • APIM-gatewaybeheer
  • Toegangsbeperkingen voor virtuele netwerken
  • Servicetoegangssleutels en verbindingsreeksen
  • Sleutel- en verbindingsreeks-beheer in Key Vault
  • Key Vault-sleutelrotatie
  • Beheerde service-identiteiten

U kunt uw Azure API Management-exemplaar beveiligen tegen DDoS-aanvallen (Distributed Denial of Service) met behulp van Azure DDoS-beveiliging. Azure DDoS Protection biedt verbeterde DDoS-risicobeperkingsfuncties voor bescherming tegen DDoS-aanvallen met volumetric en protocol.

Zie beveiligingspatroon voor communicatie tussen API Management, Functions-apps en Azure Cosmos DB voor meer informatie over het beveiligingspatroon voor deze oplossing.

API-gatewaybeheer

Het systeem is alleen openbaar toegankelijk via het beheerde APIM-eindpunt. Het APIM-subnet beperkt inkomend verkeer tot opgegeven IP-adressen van gatewayknooppunten.

APIM maakt eenvoudige integratie met verschillende verificatiemechanismen mogelijk. Voor de huidige oplossing is een abonnementssleutel vereist, maar u kunt ook Microsoft Entra-id gebruiken om het APIM-eindpunt te beveiligen zonder dat u abonnementssleutels in APIM hoeft te beheren.

Virtueel netwerk

Om te voorkomen dat API's en functies openbaar worden gemaakt, beperkt Azure Virtual Network de netwerktoegang voor API's en functies tot specifieke IP-adressen of subnetten. Api Management en Azure Functions bieden ondersteuning voor toegangsbeperking en implementatie in virtuele netwerken.

Functie-apps kunnen IPv4-, IPv6- en virtuele netwerksubnettoegang beperken. Een functie-app staat standaard alle toegang toe, maar zodra u een of meer adres- of subnetbeperkingen toevoegt, weigert de app al het andere netwerkverkeer.

In deze oplossing staan de functie-apps alleen interacties toe binnen hun eigen virtuele netwerk. De Patiënt-API staat aanroepen uit het APIM-subnet toe door het APIM-subnet toe te voegen aan de acceptatielijst voor toegangsbeperkingen. De audit-API staat communicatie met de patiënt-API toe door het subnet van de patiënt-API toe te voegen aan de acceptatielijst voor toegangsbeperkingen. De API's weigeren verkeer van andere bronnen.

De oplossing maakt gebruik van regionale integratie van virtuele netwerken om APIM en de functie-apps te integreren met hetzelfde virtuele netwerk en dezelfde Azure-regio. Er zijn verschillende belangrijke overwegingen voor het gebruik van regionale integratie van virtuele netwerken:

  • U moet de Azure Functions Premium-SKU gebruiken om zowel regionale integratie van virtuele netwerken als schaalbaarheid te hebben.
  • U moet de APIM Developer of Premium SKU gebruiken om VNET-connectiviteit in te schakelen
  • Omdat u de functie-apps in een subnet van het virtuele netwerk implementeert, configureert u de toegangsbeperkingen van de functie-apps om verkeer van andere subnetten in het virtuele netwerk toe te staan.
  • Regionale integratie van virtuele netwerken beperkt alleen uitgaand verkeer van de Azure-functie naar het virtuele netwerk. Binnenkomend verkeer wordt nog steeds buiten het virtuele netwerk gerouteerd, hoewel dit wordt beperkt door de toegangslijst van de app.

Alleen App Service Environments bieden volledige isolatie van virtuele netwerken op netwerkniveau. ASE's kunnen aanzienlijk meer kosten en moeite vergen om te implementeren dan Azure Functions die ondersteuning bieden voor regionale integratie van virtuele netwerken. ASE-schaalaanpassing is ook minder elastisch.

Access keys

U kunt APIM- en functie-apps aanroepen zonder toegangssleutels te gebruiken. Het uitschakelen van de toegangssleutels is echter geen goede beveiligingspraktijk, dus alle onderdelen in deze oplossing vereisen sleutels voor toegang.

  • Voor toegang tot APIM is een abonnementssleutel vereist, zodat gebruikers deze moeten opnemen Ocp-Apim-Subscription-Key in HTTP-headers.
  • Voor alle functies in de functie-app Patiënt-API is een API-toegangssleutel vereist. APIM moet dus worden opgenomen x-functions-key in de HTTP-header bij het aanroepen van de Patiënt-API.
  • Voor het aanroepen CreateAuditRecord in de functie-app Controle-API is een API-toegangssleutel vereist. Patiënten-API moet dus worden opgenomen x-functions-key in de HTTP-header bij het aanroepen van de CreateAuditRecord functie.
  • Beide Functions-apps gebruiken Azure Cosmos DB als hun gegevensarchief, dus ze moeten verbindingsreeks gebruiken om toegang te krijgen tot de Azure Cosmos DB-databases.

Key Vault-opslag

Hoewel het mogelijk is om toegangssleutels en verbindingsreeks s in de toepassingsinstellingen te bewaren, is het niet raadzaam, omdat iedereen die toegang heeft tot de app de sleutels en tekenreeksen kan zien. De aanbevolen procedure, met name voor productieomgevingen, is om de sleutels en tekenreeksen in Azure Key Vault te bewaren en de Key Vault-verwijzingen te gebruiken om de apps aan te roepen. Key Vault staat alleen toegang toe tot opgegeven beheerde identiteiten.

APIM maakt gebruik van een inkomend beleid om de hostsleutel patient-API in de cache op te cachen voor verbeterde prestaties. Voor volgende pogingen zoekt APIM eerst naar de sleutel in de cache.

  • APIM haalt de hostsleutel van de Patiënt-API op uit Key Vault, slaat deze op in de cache en plaatst deze in een HTTP-header bij het aanroepen van de functie-app patiënt-API.
  • De functie-app Patiënt-API haalt de sleutel van de audit-API-host op uit Key Vault en plaatst deze in een HTTP-header bij het aanroepen van de audit-API-functie-app.
  • De Azure Function-runtime valideert de sleutels in de HTTP-headers voor binnenkomende aanvragen.

Sleutelroulatie

Het roteren van Key Vault-sleutels helpt het systeem veiliger te maken. U kunt sleutels automatisch periodiek draaien of u kunt sleutels handmatig of op aanvraag draaien in geval van lekkage.

Sleutelrotatie omvat het bijwerken van verschillende instellingen:

  • De hostsleutel van de functie-app zelf
  • Het geheim in Key Vault waarin de hostsleutel wordt opgeslagen
  • De Key Vault-verwijzing in de toepassingsinstellingen van de functie-app om te verwijzen naar de nieuwste geheime versie
  • De Key Vault-verwijzing in het APIM-cachebeleid voor de patiënt-API

De huidige oplossing maakt gebruik van Terraform voor de meeste sleutelrotatietaken. Zie het patroon Sleutelrotatie met Terraform voor meer informatie.

Beheerde identiteiten

In deze oplossing gebruiken APIM en de functie-apps door het Azure-systeem toegewezen beheerde service-identiteiten (MSA's) toegang tot de Key Vault-geheimen. Key Vault heeft het volgende afzonderlijke toegangsbeleid voor de beheerde identiteit van elke service:

  • APIM kan de hostsleutel van de functie-app Patiënt-API ophalen.
  • De functie-app Patiënt-API kan de hostsleutel van de audit-API en de Azure Cosmos DB-verbindingsreeks voor het gegevensarchief ophalen.
  • Met de functie-app Controle-API kunt u de Azure Cosmos DB-verbindingsreeks voor het gegevensarchief ophalen.

Kostenoptimalisatie

Kostenoptimalisatie gaat over manieren om onnodige uitgaven te verminderen en operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.

Een van de belangrijkste voordelen van serverloze toepassingen zoals Azure Functions is de kostenbesparingen om alleen te betalen voor verbruik, in plaats van vooraf te betalen voor toegewezen servers. Ondersteuning voor virtuele netwerken vereist het Azure Functions Premium-abonnement , tegen extra kosten. Azure Functions Premium biedt ondersteuning voor regionale integratie van virtuele netwerken, terwijl dynamische schaalaanpassing nog steeds wordt ondersteund. De Azure Functions Premium-SKU bevat integratie van virtuele netwerken in APIM.

Zie De prijzen van Azure Functions voor meer informatie en prijscalculator.

Functies kunnen ook worden gehost op virtuele Machines van App Service. Alleen App Service Environments (ASE's) bieden volledige isolatie van virtuele netwerken op netwerkniveau. AS-omgevingen kunnen aanzienlijk duurder zijn dan een Azure Functions-plan dat ondersteuning biedt voor regionale integratie van virtuele netwerken en ASE-schaalaanpassing is minder elastisch.

Dit scenario implementeren

De broncode voor deze oplossing bevindt zich bij serverloze microservices van Azure VNet.

De TypeScript-broncode voor de PatientTest-API en de audit-API bevinden zich in de /src map. De bron van elke API bevat een dev-container waarop alle vereisten zijn geïnstalleerd, zodat u snel aan de slag kunt.

Beide API's hebben een volledige reeks geautomatiseerde integratie- en eenheidstests om regressies te voorkomen wanneer u wijzigingen aanbrengt. Het project is ook geconfigureerd voor linting met ESLint, om codestijlen te onderhouden en te beschermen tegen onbedoelde fouten. De respectieve README-bestanden van de services bevatten informatie over het uitvoeren van de tests en linting.

Terraform-implementatie

De map /env van het codeproject bevat scripts en sjablonen voor Terraform-implementatie. Terraform implementeert APIM en de functie-apps en configureert deze voor het gebruik van het geïmplementeerde Application Insights-exemplaar. Terraform richt ook alle resources en configuraties in, waaronder netwerkvergrendeling en het beveiligingspatroon voor toegangssleutels.

In de LEESMIJ-implementatie wordt uitgelegd hoe u de Terraform-omgeving implementeert in uw eigen Azure-abonnement. De /env map bevat ook een dev-container waarop alle vereisten zijn geïnstalleerd voor terraform-implementatie.

Locust load testing

Als u de API-prestaties wilt meten, kunt u belastingstests uitvoeren op de API's met de meegeleverde locust-belastingstests. Locust is een opensource-hulpprogramma voor belastingstests en de tests worden geschreven in Python. U kunt de belastingstests lokaal of extern uitvoeren in een AKS-cluster (Azure Kubernetes Service). De tests voeren verschillende bewerkingen uit op het APIM-eindpunt en controleren het gedrag op basis van succes- en foutcriteria.

Bijdragers

Dit artikel wordt onderhouden door Microsoft. De tekst is oorspronkelijk geschreven door de volgende Inzenders.

Hoofdauteur:

  • Hannes Nel | Principal Software Engineering Lead

Als u niet-openbare LinkedIn-profielen wilt zien, meldt u zich aan bij LinkedIn.

Volgende stappen

De volgende architecturen hebben betrekking op belangrijke API Management-scenario's:

De volgende artikelen hebben betrekking op belangrijke functiescenario's: