Gatekeeper-patroon

Toepassingen en services beveiligen met behulp van een toegewezen instantie van de host die fungeert als een broker tussen clients en de toepassing of service, die aanvragen valideert en opschoont, en die aanvragen en gegevens tussen deze twee componenten doorgeeft. Dit biedt een extra beveiligingslaag en verkleint de kans op aanvallen op het systeem.

Context en probleem

Toepassingen stellen hun functionaliteit beschikbaar aan clients door aanvragen te accepteren en verwerken. In scenario's met hosting in de cloud geven toepassingen eindpunten weer waarmee clients verbinding kunnen maken. Deze scenario's omvatten dan ook meestal de code voor het afhandelen van de aanvragen van clients. Deze code voert verificatie en validatie uit, evenals verwerking van sommige of alle aanvragen, en biedt wellicht ook toegang tot opslag en andere services namens de client.

Als een kwaadwillende gebruiker zich toegang kan verschaffen tot het systeem en zo tot de hostomgeving van de toepassing, komen de gebruikte beveiligingsmechanismen zoals referenties en opslagsleutels, plus de services en bijbehorende gegevens, op straat te liggen. Daardoor heeft de kwaadwillende gebruiker onbeperkte toegang tot gevoelige informatie en andere services.

Oplossing

Om zoveel mogelijk het risico te beperken dat clients toegang krijgen tot gevoelige informatie en services, moet u hosts of taken die openbare eindpunten onthullen, losmaken van de code die aanvragen verwerkt en toegang heeft tot opslag. U kunt dit bereiken met behulp van een façade of een toegewezen taak die communiceert met clients en vervolgens de aanvraag overhandt, mogelijk via een losgekoppelde interface naar de hosts of taken die de aanvraag — — verwerken. De afbeelding bevat een overzicht op hoog niveau van dit patroon.

Overzicht op hoog niveau van dit patroon

Het gatekeeper-patroon kan worden gebruikt om opslag te beveiligen of kan worden gebruikt als een uitgebreidere façade om alle functies van de toepassing te beveiligen. De belangrijkste factoren zijn:

  • Gecontroleerde validatie. De gatekeeper valideert alle aanvragen en weigert de aanvragen die niet voldoen aan de validatievereisten.
  • Beperkt risico en beperkte blootstelling. De gatekeeper heeft geen toegang tot de referenties of sleutels die door de vertrouwde host worden gebruikt voor toegang tot opslag en services. Als er met de gatekeeper is geknoeid, heeft de aanvaller geen toegang tot deze referenties of sleutels.
  • Juiste beveiliging. De gatekeeper wordt uitgevoerd in een modus met beperkte bevoegdheden, terwijl de rest van de toepassing wordt uitgevoerd in de modus met volledig vertrouwen die vereist is voor toegang tot opslag en services. Als er met de gatekeeper is geknoeid, heeft deze niet rechtstreeks toegang tot de toepassingsservices of -gegevens.

Dit patroon fungeert als een firewall in een doorsnee netwerktopologie. Hiermee kan de gatekeeper aanvragen onderzoeken en beslissen of de aanvraag moet worden door geven aan de vertrouwde host die de vereiste taken uitvoert. Bij deze beslissing moet de gatekeeper de aanvraaginhoud in veel gevallen valideren en opschonen voordat deze aan de vertrouwde host wordt doorgegeven.

Problemen en overwegingen

Beschouw de volgende punten als u besluit hoe u dit patroon wilt implementeren:

  • Zorg ervoor dat de vertrouwde hosts waarnaar de gatekeeper aanvragen doorstuurt alleen interne of beveiligde eindpunten beschikbaar stellen en alleen verbinding maken met de gatekeeper. De vertrouwde hosts mogen geen externe eindpunten of interfaces beschikbaar stellen.
  • De gatekeeper moet worden uitgevoerd in een modus met beperkte bevoegdheden. Dit betekent doorgaans dat de gatekeeper en de vertrouwde hosts in afzonderlijk gehoste services of virtuele machines worden uitgevoerd.
  • De gatekeeper mag geen verwerkingen uitvoeren die betrekking hebben op de toepassing of services of mag ook geen toegang tot gegevens hebben. Dit is uitsluitend bedoeld om aanvragen te valideren en op te schonen. De vertrouwde hosts moeten wellicht een extra validatie van aanvragen uitvoeren, maar de kernvalidatie moet worden uitgevoerd door de gatekeeper.
  • Gebruik waar mogelijk een beveiligd communicatiekanaal (HTTPS, SSL of TLS) tussen de gatekeeper en de vertrouwde hosts of taken. Sommige hostomgevingen bieden echter geen ondersteuning voor HTTPS op interne eindpunten.
  • Het toevoegen van de extra verificatielaag aan de toepassing om het gatekeeperpatroon te implementeren kan enige invloed hebben op de prestaties vanwege de extra verwerking en netwerkcommunicatie die daarvoor nodig zijn.
  • De gatekeeperinstantie kan een Single Point of Failure zijn. Om de impact van een storing te minimaliseren, zou u extra instanties kunnen implementeren en een mechanisme voor automatisch schalen kunnen gebruiken om te controleren of er voldoende capaciteit is om de benodigde beschikbaarheid te garanderen.

Wanneer dit patroon gebruiken

Dit patroon is handig voor:

  • Toepassingen die werken met gevoelige gegevens, stellen services beschikbaar die een hoge mate van bescherming tegen schadelijke aanvallen vereisen of voeren bedrijfskritieke bewerkingen uit die niet mogen worden onderbroken.
  • Gedistribueerde toepassingen waarvoor het nodig is om aanvraagvalidatie los van de hoofdtaken uit te voeren, of om deze validatie te centraliseren om onderhoud en beheer te vereenvoudigen.

Voorbeeld

In een scenario met hosting in de cloud kan dit patroon worden geïmplementeerd door de rol van gatekeeper of de virtuele machine los te koppelen van de vertrouwde functies en services in een toepassing. Doe dit met behulp van een intern eindpunt, een wachtrij of opslag als een tussenliggend mechanisme voor communicatie. De afbeelding laat het gebruik van een intern eindpunt zien.

Een voorbeeld van het patroon met Cloud Services-web- en werkrollen

Het Valet Key-patroon kan ook relevant zijn bij het implementeren van het gatekeeperpatroon. Bij de communicatie tussen de Gatekeeper en vertrouwde rollen is het een goede gewoonte om de beveiliging te verbeteren met behulp van sleutels of tokens die machtigingen voor toegang tot resources beperken. In het patroon wordt beschreven hoe u een token of sleutel gebruikt die clients beperkte, directe toegang biedt tot een specifieke resource of service.