Gatekeeper-mönster

Skydda program och tjänster med hjälp av en dedikerad värdinstans som fungerar som koordinator mellan klienter och programmet eller tjänsten, validerar och åtgärdar förfrågningar och skickar förfrågningar och data mellan dem. Detta kan ge extra lager av säkerhet och minska risken för angrepp på systemet.

Kontext och problem

Program tillgängliggör sina funktioner till klienter genom att godkänna och bearbeta begäranden. I molnbaserade scenarier tillgängliggör programmen slutpunkter som klienterna ansluter till, och inkluderar vanligtvis koden för att hantera begäranden från klienterna. Den här koden utför autentisering och verifiering, viss eller all bearbetning av begäranden, och kan förväntas få åtkomst till lagring och andra tjänster för klientens räkning.

Om en obehörig användare kan kompromettera systemet och få åtkomst till programmets värdmiljö, exponeras de säkerhetsmekanismer som det använder, till exempel autentiseringsuppgifter och lagringsnycklar samt de tjänster och data som det har åtkomst till. Därmed kan den illasinnade användaren få obegränsad åtkomst till känslig information och andra tjänster.

Lösning

För att minimera risken för att klienter får åtkomst till känslig information och känsliga tjänster ska du frikoppla värdar eller aktiviteter som tillgängliggör offentliga slutpunkter från den kod som bearbetar begäranden och har åtkomst till lagring. Du kan åstadkomma detta genom att använda en fasad eller en dedikerad uppgift som interagerar med klienter och sedan skickar begäran – kanske via ett fristående gränssnitt – till de värdar eller uppgifter som ska hantera 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

Gatekeepermönstret kan användas för att helt enkelt skydda lagring eller också kan den 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 de som inte uppfyller verifieringskraven.
  • 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.
  • Lämplig 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. Det gör att gatekeepern kan undersöka begäranden och fatta ett beslut om huruvida begäran ska överföras till den betrodda värd som utför de nödvändiga uppgifterna. 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ärdar som gatekeepern skickar begäranden till tillgängliggör endast interna eller skyddade slutpunkter och endast ansluter till 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 läge med begränsad behörighet. Det innebär vanligtvis att gatekeepern och den betrodda värden körs på separata värdbaserade tjänster eller virtuella datorer.
  • Gatekeepern får inte utföra någon bearbetning som rör program eller tjänster eller åtkomst till data. Dess funktion är enbart att kontrollera och rensa begäranden. Betrodda värdar kan behöva utföra ytterligare verifiering av begärandena, men kärnverifieringen bör utföras av gatekeepern.
  • Använd en säker kommunikationskanal (HTTPS, SSL eller TLS) mellan gatekeepern och de betrodda värdarna och aktiviteterna om detta är möjligt. Vissa värdmiljöer stöder dock inte HTTPS på interna slutpunkter.
  • Att lägga till extra lager i programmet för att implementera gatekeepermönstret kommer sannolikt att ha viss inverkan på prestanda på grund av den ytterligare bearbetnings- och nätverkskommunikation som krävs.
  • Gatekeeper-instansen kan vara en felkritisk systemdel. Överväg att distribuera ytterligare instanser och använda en mekanism för autoskalning så att kapaciteten att upprätthålla tillgängligheten säkerställs, i syfte att minimera effekten av ett fel.

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

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

  • Program som hanterar känslig information tillgängliggör tjänster som måste ha en hög grad av skydd mot skadliga attacker eller utför uppdragskritiska åtgärder som inte får avbrytas.
  • Distribuerade program där det är nödvändigt att utföra begärandevalideringen separat från de viktigaste uppgifterna eller att centralisera valideringen för att förenkla underhåll och administration.

Exempel

Det här mönstret kan implementeras genom frikoppling av gatekeeperrollen eller den virtuella datorn från de betrodda rollerna och tjänsterna i ett program i ett scenario med värd i molnet. Du kan göra detta genom att använda en intern slutpunkt, en kö eller ett lagringsutrymme 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 gatekeepern och betrodda roller är det en bra idé att förbättra säkerheten genom att använda 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.