Szerkesztés

Share via


Virtuális hálózat integrált kiszolgáló nélküli mikroszolgáltatásai

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

Ebben az Azure-megoldásban az Azure API Management (APIM) egyetlen felügyelt végponton keresztül szabályozza az API-hoz való hozzáférést. Az alkalmazás háttérrendszere két egymástól függő Azure Functions-mikroszolgáltatás-alkalmazásból áll, amelyek betegrekordokat és naplózási rekordokat hoznak létre és kezelnek. Az APIM és a két függvényalkalmazás egy zárolt virtuális hálózaton keresztül férnek hozzá egymáshoz.

Ez a cikk és a hozzá tartozó kódprojekt lepárlja a példaforgatókönyvet a fő műszaki összetevőkre, hogy az adott implementációkhoz állványzatként szolgáljon. A megoldás automatizálja az összes kód- és infrastruktúra-üzembe helyezést a Terraform használatával, és magában foglalja az automatizált integrációt, az egységeket és a terheléses tesztelést.

Felépítés

Az alábbi ábra a betegrekordlétrehozási kérelem folyamatát mutatja be:

Diagram showing virtual network integrated microservices.

Töltse le az architektúra Visio-fájlját.

Munkafolyamat

  1. A külső szolgáltatások és ügyfelek POST-kérelmet intéznek az APIM-hez, amely egy betegadatokat tartalmazó adattörzset tartalmaz.
  2. Az APIM meghívja a CreatePatient Patient API függvényét a megadott betegadatokkal.
  3. A CreatePatient Patient API függvénye meghívja a CreateAuditRecord függvényt az Audit API függvényalkalmazásban egy naplózási rekord létrehozásához.
  4. Az Audit APICreateAuditRecord függvény létrehozza a naplózási rekordot az Azure Cosmos DB-ben, és sikeres választ ad vissza a Patient APICreatePatient függvényre.
  5. A CreatePatient függvény létrehozza a betegdokumentumot az Azure Cosmos DB-ben, és sikeres választ ad vissza az APIM-ra.
  6. A külső szolgáltatások és ügyfelek az APIM-től kapják meg a sikerre adott választ.

Összetevők

A megoldás a következő összetevőket használja:

  • Az Azure API Management (APIM) egy hibrid, többfelhős platform az API-k minden környezetben való kezelésére. Ebben a megoldásban az APIM belső és külső hozzáférést biztosít a Patient API-hoz, amely lehetővé teszi az adatok olvasását és/vagy írását. Az APIM lehetővé teszi a különböző hitelesítési mechanizmusokkal való egyszerű integrációt.

  • Az Azure Functions egy kiszolgáló nélküli számítási platform, amely kis méretű, eseményvezérelt kódrészleteket kezel. A felhőinfrastruktúra biztosítja a szükséges frissített kiszolgálókat a függvények nagy léptékű futtatásához. A jelenlegi megoldás két Azure Functions API-mikroszolgáltatást használ, amelyek műveleteket hoznak létre és kezelnek a betegtesztek eredményeihez és a rekordok naplózásához.

  • Az Azure Virtual Network izolált és rendkívül biztonságos alkalmazáskörnyezetet biztosít azáltal, hogy a hálózati hozzáférést meghatározott IP-címekre vagy alhálózatokra korlátozza. Az APIM és az Azure Functions egyaránt támogatja a hozzáférés korlátozását és a virtuális hálózatokban való üzembe helyezést. Ez a megoldás regionális virtuális hálózati integrációt használ mindkét függvényalkalmazás üzembe helyezéséhez ugyanabban a virtuális hálózatban ugyanabban a régióban.

  • Az Azure Key Vault központilag tárolja, titkosítja és kezeli a kulcsokhoz, tanúsítványokhoz és kapcsolati sztring való hozzáférést. Ez a megoldás fenntartja az Azure Functions gazdagépkulcsait és az Azure Cosmos DB-kapcsolati sztring egy Key Vaultban, amelyhez csak a megadott identitások férhetnek hozzá.

  • Az Azure Cosmos DB egy teljes mértékben felügyelt kiszolgáló nélküli adatbázis azonnali, automatikus skálázással. A jelenlegi megoldásban mindkét mikroszolgáltatás az Azure Cosmos DB-ben tárolja az adatokat a MongoDB Node.js illesztőprogram használatával. A szolgáltatások nem osztanak meg adatokat, és mindegyik szolgáltatást üzembe helyezheti a saját független adatbázisában.

  • Az Alkalmazás Elemzések, az Azure Monitor egyik funkciója, az alkalmazások teljesítményéről, használatáról, rendelkezésre állásáról és viselkedéséről szóló jelentések a rendellenességek észleléséhez és diagnosztizálásához.

    A mikroszolgáltatás-alapú architektúra hibái gyakran különböző összetevők között oszlanak meg, és nem diagnosztizálhatók a szolgáltatások elkülönítésével. Ezeknek a problémáknak a diagnosztizálásához elengedhetetlen a telemetriai adatok összetevők közötti korrelációjának képessége. Az alkalmazás Elemzések telemetria központosítja a naplózást a teljes kérelemfolyamaton a teljesítmény rendellenességeinek észlelése érdekében. A telemetria közös műveleti azonosítóval rendelkezik, amely lehetővé teszi az összetevők közötti korrelációt.

    Az APIM és az Azure Functions futtatókörnyezet beépített támogatást nyújt az Application Elemzések számára a telemetriai adatok széles körének létrehozásához és korrelálásához, beleértve a standard alkalmazáskimenetet is. A függvényalkalmazások az Application Elemzések Node.js SDK-t használják a függőségek és egyéb egyéni telemetria manuális nyomon követésére.

    A megoldás elosztott telemetriai nyomkövetésével kapcsolatos további információkért lásd : Elosztott telemetriai adatok.

Alternatívák

  • Az aktuális megoldáshoz előfizetési kulcs szükséges az APIM-végpont eléréséhez, de Microsoft Entra-hitelesítést is használhat.
  • Az API-hozzáférési kulcsok megkövetelése mellett az Azure Functions beépített App Service-hitelesítésével engedélyezheti a Microsoft Entra-hitelesítést az API-k felügyelt identitásaihoz.
  • Ebben a megoldásban az Azure Cosmos DB-végpontot lecserélheti egy másik MongoDB-szolgáltatásra a kód módosítása nélkül.
  • Az Azure Cosmos DB további biztonsága érdekében zárolhatja az Azure Cosmos DB-adatbázisokból a függvényalkalmazásokba irányuló forgalmat.
  • Az olyan összetevők, mint az Azure Cosmos DB, telemetriát küldhetnek az Azure Monitornak, ahol korrelálhatók az Alkalmazás Elemzések telemetriájával.
  • A Terraform helyett használhatja az Azure Portalt vagy az Azure CLI-t a Key Vault kulcsforgatási feladataihoz.
  • A Terraform helyett egy olyan rendszert használhat, mint az Azure DevOps vagy a GitHub Actions a megoldások üzembe helyezésének automatizálására.
  • A magasabb rendelkezésre állás érdekében ez a megoldás több régióban is üzembe helyezhető. Állítsa az Azure Cosmos DB-t több főkiszolgálóra, használja az APIM beépített többrégiós támogatását, és helyezze üzembe az Azure-függvényalkalmazásokat párosított régiókban.

Forgatókönyv részletei

Ez a cikk egy integrált megoldást ismertet a betegrekordok kezeléséhez. Egy egészségügyi szervezetnek nagy mennyiségű, rendkívül érzékeny beteg orvosi tesztadatait kell digitálisan tárolnia a felhőben. A belső és külső rendszereknek képesnek kell lenniük az adatok biztonságos olvasására és írására egy alkalmazásprogramozási felületen (API) keresztül. Az adatokkal való minden interakciót naplóregisztrálóban kell rögzíteni.

Lehetséges használati esetek

  • A kijelölt külső végpontokról rendkívül bizalmas adatokhoz férhet hozzá.
  • Biztonságos naplózás megvalósítása adatelérési műveletekhez.
  • Integrálhatja az egymástól függő mikroszolgáltatás-alkalmazásokat a közös hozzáféréssel és biztonsággal.
  • Használjon virtuális hálózati biztonsági funkciókat, miközben kihasználja a kiszolgáló nélküli költségmegtakarítást és a rugalmasságot.

Előnyök

A kiszolgáló nélküli alkalmazások, például az Azure Functions néhány előnye a költségmegtakarítás és a rugalmasság, amely csak a szükséges számítási erőforrásokat használja ahelyett, hogy előre fizetne a dedikált kiszolgálókért. Ez a megoldás lehetővé teszi, hogy az Azure Functions virtuális hálózati hozzáférési korlátozásokat használjon a biztonság érdekében anélkül, hogy a teljes Azure-alkalmazás szolgáltatáskörnyezetek (A Standard kiadás) költségei és működési többletterhelése felmerül.

Az APIM az Azure Functionsre épülő API-mikroszolgáltatásokhoz való belső és külső hozzáférést szabályozza. A Patient API létrehozási, olvasási, frissítési és törlési (CRUD) műveleteket biztosít a betegeknek és a teszteredményeiknek. Az Audit API függvényalkalmazás műveleteket biztosít a naplózási bejegyzések létrehozásához.

Minden függvényalkalmazás egy független Azure Cosmos DB-adatbázisban tárolja az adatait. Az Azure Key Vault biztonságosan tárolja az alkalmazásokhoz és adatbázisokhoz társított összes kulcsot, titkos kulcsot és kapcsolati sztring. Az alkalmazás telemetriai Elemzések és az Azure Monitor központosítja a naplózást a rendszeren.

Considerations

Ezek a szempontok implementálják az Azure Well-Architected Framework alappilléreit, amely a számítási feladatok minőségének javítására használható vezérelvek halmaza. További információ: Microsoft Azure Well-Architected Framework.

A megoldás megvalósításakor vegye figyelembe az alábbi szempontokat.

Biztonság

A biztonság biztosítékokat nyújt a szándékos támadások és az értékes adatokkal és rendszerekkel való visszaélés ellen. További információ: A biztonsági pillér áttekintése.

Az adatok bizalmassága miatt ebben a megoldásban a biztonság a legfontosabb. A megoldás több mechanizmust használ az adatok védelmére:

  • APIM-átjárók kezelése
  • Virtuális hálózat hozzáférési korlátozásai
  • Szolgáltatáselérési kulcsok és kapcsolati sztringek
  • Kulcs- és kapcsolati sztring kezelés a Key Vaultban
  • Key Vault billentyűforgatás
  • Felügyelt szolgáltatásidentitások

Az Azure API Management-példányt az Azure DDoS Protection használatával megvédheti az elosztott szolgáltatásmegtagadási (DDoS-) támadásoktól. Az Azure DDoS Protection továbbfejlesztett DDoS-kockázatcsökkentési funkciókat biztosít a mennyiségi és protokollalapú DDoS-támadások elleni védelemhez.

A megoldás biztonsági mintájáról további információt az API Management, a Functions-alkalmazások és az Azure Cosmos DB közötti kommunikáció biztonsági mintájában talál.

API-átjárók kezelése

A rendszer nyilvánosan csak az egyetlen felügyelt APIM-végponton keresztül érhető el nyilvánosan. Az APIM-alhálózat a bejövő forgalmat a megadott átjárócsomópont IP-címére korlátozza.

Az APIM lehetővé teszi a különböző hitelesítési mechanizmusokkal való egyszerű integrációt. A jelenlegi megoldáshoz előfizetési kulcs szükséges, de a Microsoft Entra ID-val is biztonságossá teheti az APIM-végpontot anélkül, hogy az APIM-ban kellene kezelnie az előfizetési kulcsokat.

Virtuális hálózat

Az API-k és a függvények nyilvános közzétételének elkerülése érdekében az Azure Virtual Network meghatározott IP-címekre vagy alhálózatokra korlátozza az API-k és a függvények hálózati hozzáférését. Az API Management és az Azure Functions egyaránt támogatja a hozzáférés korlátozását és a virtuális hálózatokon való üzembe helyezést.

A függvényalkalmazások korlátozhatják az IPv4, az IPv6 és a virtuális hálózati alhálózatok hozzáférését. Alapértelmezés szerint egy függvényalkalmazás minden hozzáférést engedélyez, de ha hozzáad egy vagy több cím- vagy alhálózati korlátozást, az alkalmazás letiltja az összes többi hálózati forgalmat.

Ebben a megoldásban a függvényalkalmazások csak a saját virtuális hálózatukon belül engedélyezik az interakciókat. A Patient API engedélyezi a hívásokat az APIM-alhálózatról úgy, hogy hozzáadja az APIM-alhálózatot a hozzáférési korlátozás engedélyezési listájához. Az Audit API lehetővé teszi a Patient API-val való kommunikációt, ha hozzáadja a Patient API alhálózatot a hozzáférés-korlátozás engedélyezési listájához. Az API-k elutasítják a más forrásokból érkező forgalmat.

A megoldás regionális virtuális hálózati integrációval integrálja az APIM-et és a függvényalkalmazásokat ugyanazzal a virtuális hálózattal és Azure-régióval. A regionális virtuális hálózatok integrációjának számos fontos szempontja van:

  • Az Azure Functions Premium termékváltozatot kell használnia a regionális virtuális hálózati integrációhoz és a méretezhetőséghez.
  • A VNET-kapcsolat engedélyezéséhez az APIM Developer vagy a Premium termékváltozatot kell használnia
  • Mivel a függvényalkalmazásokat a virtuális hálózat egy alhálózatán helyezi üzembe, a függvényalkalmazások hozzáférési korlátozásait úgy konfigurálja, hogy engedélyezze a virtuális hálózat más alhálózataiból érkező forgalmat.
  • A regionális virtuális hálózati integráció csak az Azure-függvényből a virtuális hálózatra irányuló kimenő forgalmat korlátozza. A bejövő forgalom továbbra is a virtuális hálózaton kívül van irányítva, bár az alkalmazás hozzáférési listája korlátozza.

Csak az App Service-környezetek kínálnak teljes hálózati szintű virtuális hálózatelkülönítést. Az A Standard kiadás megvalósítása jelentősen több kiadást és erőfeszítést igényelhet, mint a regionális virtuális hálózati integrációt támogató Azure Functions. A Standard kiadás skálázás szintén kevésbé rugalmas.

Hozzáférési kulcsok

Az APIM- és függvényalkalmazásokat hozzáférési kulcsok használata nélkül is meghívhatja. A hozzáférési kulcsok letiltása azonban nem megfelelő biztonsági gyakorlat, ezért a megoldás minden összetevőjének kulcsokra van szüksége a hozzáféréshez.

  • Az APIM-hez való hozzáféréshez előfizetési kulcsra van szükség, ezért a felhasználóknak BELE kell foglalniuk Ocp-Apim-Subscription-Key a HTTP-fejlécekbe.
  • A Patient API függvényalkalmazás összes függvényéhez API-hozzáférési kulcs szükséges, ezért az APIM-nak szerepelnie x-functions-key kell a HTTP-fejlécben a Patient API meghívásakor.
  • Az Audit API függvényalkalmazásban való híváshoz CreateAuditRecord API hozzáférési kulcs szükséges, ezért a Patient API-nak szerepelnie x-functions-key kell a HTTP-fejlécben a CreateAuditRecord függvény hívása során.
  • Mindkét Functions-alkalmazás az Azure Cosmos DB-t használja adattárként, ezért kapcsolati sztring kell használniuk az Azure Cosmos DB-adatbázisok eléréséhez.

Key Vault-tároló

Bár a hozzáférési kulcsok és a kapcsolati sztring megtarthatók az alkalmazásbeállításokban, nem ajánlott, mert bárki, aki hozzáfér az alkalmazáshoz, láthatja a kulcsokat és a sztringeket. Az ajánlott eljárás, különösen éles környezetekben a kulcsok és sztringek megőrzése az Azure Key Vaultban, és a Key Vault-hivatkozások használata az alkalmazások meghívásához. A Key Vault csak a megadott felügyelt identitásokhoz engedélyezi a hozzáférést.

Az APIM egy bejövő szabályzattal gyorsítótárazza a Patient API gazdagépkulcsát a jobb teljesítmény érdekében. A későbbi próbálkozások során az APIM először a gyorsítótárban keresi a kulcsot.

  • Az APIM lekéri a Patient API-gazdakulcsot a Key Vaultból, gyorsítótárazza, majd a Patient API függvényalkalmazás meghívásakor egy HTTP-fejlécbe helyezi.
  • A Patient API függvényalkalmazás lekéri az Audit API-gazdagépkulcsot a Key Vaultból, és egy HTTP-fejlécbe helyezi, amikor meghívja az Audit API függvényalkalmazást.
  • Az Azure-függvény futtatókörnyezete ellenőrzi a HTTP-fejlécek kulcsait a bejövő kérések esetében.

Kulcsrotálás

A Key Vault kulcsainak elforgatásával biztonságosabbá teheti a rendszert. Időnként automatikusan elforgathatja a kulcsokat, vagy szivárgás esetén manuálisan vagy igény szerint elforgathatja a kulcsokat.

A kulcsváltás több beállítás frissítését is magában foglalja:

  • A függvényalkalmazás gazdagépkulcsa
  • A gazdakulcsot tároló Key Vault titkos kódja
  • A Key Vault referenciája a függvényalkalmazás-alkalmazás beállításaiban, a legújabb titkos verzióra való hivatkozáshoz
  • A Key Vault referenciája az APIM gyorsítótárazási szabályzatában a Patient API-hoz

Az aktuális megoldás a Terraformot használja a kulcsforgatási feladatok többségéhez. További információ: Kulcsforgatási minta a Terraformmal.

Managed identities

Ebben a megoldásban az APIM és a függvényalkalmazások az Azure rendszer által hozzárendelt felügyeltszolgáltatás-identitásait (MSI-ket) használják a Key Vault titkos kulcsainak eléréséhez. A Key Vault az alábbi egyéni hozzáférési szabályzatokkal rendelkezik az egyes szolgáltatások felügyelt identitásához:

  • Az APIM lekérheti a Patient API függvényalkalmazás gazdakulcsát.
  • A Patient API függvényalkalmazás lekérheti az Audit API gazdagépkulcsát és az Azure Cosmos DB kapcsolati sztring az adattárhoz.
  • Az Audit API függvényalkalmazás lekérheti az Azure Cosmos DB kapcsolati sztring az adattárához.

Költségoptimalizálás

A költségoptimalizálás a szükségtelen kiadások csökkentésének és a működési hatékonyság javításának módjairól szól. További információ: A költségoptimalizálási pillér áttekintése.

A kiszolgáló nélküli alkalmazások, például az Azure Functions egyik elsődleges előnye, hogy költségmegtakarítást jelent, ha csak a használatért fizetnek, ahelyett, hogy előre fizetnek a dedikált kiszolgálókért. A virtuális hálózat támogatásához az Azure Functions Premium-csomagra van szükség, felár ellenében. Az Azure Functions Premium támogatja a regionális virtuális hálózati integrációt, miközben továbbra is támogatja a dinamikus skálázást. Az Azure Functions Premium termékváltozata magában foglalja az APIM virtuális hálózati integrációját.

A részletekért és a díjkalkulátorért tekintse meg az Azure Functions díjszabását.

A függvények App Service-alapú virtuális gépeken is üzemeltethetők. Csak az App Service-környezetek (A Standard kiadás) kínálnak teljes hálózati szintű virtuális hálózatelkülönítést. Az A Standard kiadás jelentősen drágábbak lehetnek, mint a regionális virtuális hálózati integrációt támogató Azure Functions-csomagok, és az A Standard kiadás skálázás kevésbé rugalmas.

A forgatókönyv üzembe helyezése

A megoldás forráskódja az Azure VNet-integrált kiszolgáló nélküli mikroszolgáltatásokban található.

A PatientTest API és az Audit API TypeScript-forráskódja a /src mappában található. Minden API-forrás tartalmaz egy fejlesztői tárolót, amely tartalmazza az összes előfeltételt, hogy segítsen a gyors használatban.

Mindkét API teljes körű automatizált integrációs és egységtesztekkel rendelkezik, amelyek segítenek megelőzni a regressziót a módosítások során. A projekt az ESLinttel való lintinghez is konfigurálva van, hogy fenntartsa a kódstílusokat, és védve legyen a véletlen hibák ellen. A szolgáltatások megfelelő README-fájljai információkat tartalmaznak a tesztek futtatásáról és a lintingről.

Terraform üzembe helyezése

A kódprojekt /env mappája szkripteket és sablonokat tartalmaz a Terraform üzembe helyezéséhez. A Terraform üzembe helyezi az APIM-et és a függvényalkalmazásokat, és konfigurálja őket az üzembe helyezett alkalmazás Elemzések-példány használatára. A Terraform emellett kiépíti az összes erőforrást és konfigurációt, beleértve a hálózati zárolást és a hozzáférési kulcs biztonsági mintáját.

Az üzembe helyezési README bemutatja, hogyan helyezheti üzembe a Terraform-környezetet a saját Azure-előfizetésében. A /env mappa tartalmaz egy fejlesztői tárolótis, amely a Terraform üzembe helyezéséhez szükséges összes előfeltételt tartalmazza.

Sáska terheléstesztelése

Az API teljesítményének méréséhez terhelésteszteket futtathat az API-kon a mellékelt Locust-terhelési tesztekkel. A Locust egy nyílt forráskódú terheléstesztelési eszköz, és a tesztek Pythonban vannak megírva. A terhelési teszteket helyileg vagy távolról is futtathatja egy Azure Kubernetes Service-fürtben. A tesztek számos különböző műveletet hajtanak végre az APIM-végponton, és ellenőrzik a sikeres és a sikertelenségi feltételeknek megfelelő viselkedést.

Közreműködők

Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködők írták.

Fő szerző:

A nem nyilvános LinkedIn-profilok megtekintéséhez jelentkezzen be a LinkedInbe.

További lépések

A következő architektúrák a legfontosabb API Management-forgatókönyveket fedik le:

A következő cikkek a legfontosabb függvényforgatókönyveket ismertetik: