Gatekeeper-mönster

Azure Dedicated Host

Skydda applikationer och tjänster med hjälp av en dedikerad värdinstans för att förmedla begäranden mellan klienter och applikationen eller tjänsten. Meddelandeförmedlaren validerar och rensar begärandena och kan ge ett extra säkerhetslager samt begränsa systemets attackyta.

Kontext och problem

Molntjänster exponerar slutpunkter som gör det möjligt för klientprogram att anropa sina API:er. Koden som används för att implementera API:erna utlöser eller utför flera uppgifter, inklusive men inte begränsat till autentisering, auktorisering, parameterverifiering och viss eller all bearbetning av begäranden. API-koden kommer sannolikt att komma åt lagring och andra tjänster för klientens räkning.

Om en obehörig användare komprometterar systemet och får åtkomst till programmets värdmiljö exponeras dess säkerhetsmekanismer och åtkomst till data och andra tjänster. Därför kan den skadliga användaren få obegränsad åtkomst till autentiseringsuppgifter, lagringsnycklar, känslig information och andra tjänster.

Lösning

En lösning på det här problemet är att frikoppla koden som implementerar offentliga slutpunkter från koden som bearbetar begäranden och får åtkomst till lagring. Du kan uppnå frikoppling med hjälp av en fasad eller en dedikerad uppgift som interagerar med klienter och sedan lämnar över begäran – kanske via ett frikopplat gränssnitt – till värdar eller uppgifter som hanterar begäran. Bilden innehåller en översikt på hög nivå över det här mönstret.

Översikt på hög nivå över det här mönstret

Gatekeeper-mönstret kan användas för att skydda lagring, eller så kan det användas som en mer omfattande fasad för att skydda alla funktioner i programmet. Viktiga faktorer är:

  • Kontrollerad validering. Gatekeepern validerar alla begäranden och avvisar begäranden som inte uppfyller valideringskraven.
  • Begränsad risk och exponering. Gatekeeper har inte åtkomst till de autentiseringsuppgifter eller nycklar som den betrodda värddatorn använder för att komma åt lagring och tjänster. Om gatekeepern komprometteras får angriparen inte åtkomst till dessa autentiseringsuppgifter eller nycklar.
  • Rätt säkerhet. Gatekeepern körs i ett läge med begränsad behörighet, medan resten av programmet körs med det fullständiga förtroendeläge som krävs för att komma åt lagringsutrymme och tjänster. Om gatekeepern komprometteras kan den inte få direkt åtkomst till programtjänster eller data.

Det här mönstret fungerar som en brandvägg i en typisk nätverkstopografi. Den gör det möjligt för gatekeepern att undersöka begäranden och fatta ett beslut om huruvida begäran ska skickas vidare till den betrodda värd som utför de uppgifter som krävs. Det här beslutet kräver normalt att gatekeepern validerar och sanerar begärans innehåll innan det vidarebefordras till den betrodda värddatorn.

Problem och överväganden

Tänk på följande när du bestämmer hur du ska implementera mönstret:

  • Se till att de betrodda värdarna endast exponerar interna eller skyddade slutpunkter, som endast används av gatekeepern. De betrodda värdarna får inte tillgängliggöra några externa slutpunkter eller gränssnitt.
  • Gatekeeper måste köras i ett läge med begränsade behörigheter, vilket vanligtvis kräver att gatekeeper och den betrodda värddatorn körs i separata hostade tjänster eller virtuella datorer.
  • Gatekeepern bör inte utföra någon bearbetning som är relaterad till programmet eller tjänsterna eller komma åt några data. Dess funktion är enbart att kontrollera och rensa begäranden. De betrodda värdarna kan behöva utföra ytterligare validering av begäranden, men gatekeepern bör utföra kärnverifieringen.
  • Använd en säker kommunikationskanal (HTTPS, SSL eller TLS) mellan gatekeepern och betrodda värdar eller uppgifter där det är möjligt. Vissa värdmiljöer stöder dock inte HTTPS på interna slutpunkter.
  • Att lägga till det extra lagret för att implementera gatekeeper-mönstret kommer sannolikt att påverka prestandan på grund av den ytterligare bearbetning och nätverkskommunikation som krävs.
  • Gatekeeper-instansen kan vara en ensam felpunkt. För att minimera effekten av ett fel bör du överväga att distribuera redundanta instanser och använda en mekanism för automatisk skalning för att säkerställa kapacitet för att upprätthålla tillgängligheten.

När du ska använda det här mönstret

Det här mönstret är användbart för program som:

  • hantera känslig information
  • exponera tjänster som kräver en hög grad av skydd mot skadliga attacker
  • utföra verksamhetskritiska åtgärder som inte kan störas.
  • kräv att verifiering av begäranden utförs separat från huvuduppgifterna, eller för att centralisera den här valideringen för att förenkla underhåll och administration

Design av arbetsbelastning

En arkitekt bör utvärdera hur Gatekeeper-mönstret kan användas i arbetsbelastningens design för att uppfylla de mål och principer som beskrivs i grundpelarna i Azure Well-Architected Framework. Till exempel:

Grundpelare Så här stöder det här mönstret pelarmål
Beslut om säkerhetsdesign bidrar till att säkerställa konfidentialitet, integritet och tillgänglighet för arbetsbelastningens data och system. Genom att lägga till en gateway i begärandeflödet kan du centralisera säkerhetsfunktioner som brandväggar för webbprogram, DDoS-skydd, robotidentifiering, manipulering av begäranden, autentiseringsinitiering och auktoriseringskontroller.

- SE:06 Nätverkskontroller
- SE:10 Övervakning och hotidentifiering
Prestandaeffektivitet hjälper din arbetsbelastning att effektivt uppfylla kraven genom optimeringar inom skalning, data och kod. Det här mönstret är hur du kan implementera begränsning på gatewaynivå i stället för att implementera hastighetskontroller på nodnivå. Att samordna tillståndet för överföringshastigheten mellan alla noder är inte i sig prestandamässigt effektivt.

- PE:03 Välja tjänster

Som med alla designbeslut bör du överväga eventuella kompromisser mot målen för de andra pelarna som kan införas med det här mönstret.

Exempel

I ett molnbaserat scenario kan det här mönstret implementeras genom att koppla bort rollen gatekeeper eller den virtuella datorn från de betrodda rollerna och tjänsterna i ett program. Implementeringen kan använda en intern slutpunkt, en kö eller lagring som en mellanliggande kommunikationsmekanism. I figuren illustreras detta med hjälp av en intern slutpunkt.

Ett exempel på mönstret med webb- och arbetsroller i Cloud Services

Valet-nyckelmönstret kan även vara relevant när du implementerar gatekeeper-mönstret. När du kommunicerar mellan Gatekeeper och betrodda roller är det en bra idé att förbättra säkerheten med hjälp av nycklar eller token som begränsar behörigheter för åtkomst till resurser. Mönstret beskriver hur du använder en token eller nyckel som ger klienter begränsad, direkt åtkomst till en specifik resurs eller tjänst.

Strypningsmönstret tillämpas ofta vid gatekeeperns eller gatewayens gräns, där man genom att centralisera tillståndet för hastighetsbegränsning undviker samordningskostnaden för att utföra kontroller på hastighetsbegränsningen på varje backendnod.