Gatekeeper-mönster

Azure Dedicated Host

Skydda program och tjänster med hjälp av en dedikerad värdinstans för att asynkrona begäranden mellan klienter och programmet eller tjänsten. Asynkron meddelandekö validerar och sanerar begäranden och kan ge ytterligare ett säkerhetslager och 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. Gatekeepern har inte åtkomst till de autentiseringsuppgifter eller nycklar som används av den betrodda värden för att få åtkomst till minne 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 kontrollerar och rensar innehållet i begäran innan det skickas till den betrodda värden.

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.
  • Gatekeepern måste köras i ett begränsat privilegierat läge, vilket vanligtvis kräver att gatekeepern och den betrodda värden körs i separata värdbaserade 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 felkritisk systemdel. 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å. Samordningen av hastighetstillståndet mellan alla noder fungerar inte i sig.

- 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 som använder webb- och arbetsrollerna 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.