- Der Policy Enforcement Point (PEP) ist die Komponente, welche den Entscheid für einen API-Request (z.B. Allow / deny) umsetzt.
- Die Entscheidung, ob ein Zugriff erlaubt ist, wird durch den Policy Decision Point (PDP) gefällt.
- Damit der PDP diesen Entscheid fällen kann, greift er auf den Policy Information Point (PIP) zu; dieser verwaltet die Policies, welche vom PDP als Entscheidungsgrundlage verwendet werden.
- Die Policies im PIP können durch den sogenannten Policy Administration Point (PAP) eingesehen, administriert und editiert werden.
Cloud-Native Entwicklung und Micro Services
Neue Trends befassen sich mit Zero-Trust [2], es gibt keine zentrale Security mehr, welche alles kontrolliert.
Dabei ist das Ziel, jeden API-Call / jeden Request separat zu betrachten und so die Autorisierung in jeder Komponente und deshalb auch in jedem Zugriff durchzuführen.
Dies bedingt, dass jede Komponente einen PEP implementiert und selbstständig einen entsprechenden API-Call erlauben oder ablehnen kann.
Autorisierungs-Implementierung in jedem Service
Dadurch, dass jede Komponente selbst überprüfen muss, ob ein API-Call erlaubt werden soll oder nicht, muss jede Komponente auch fähig sein, diese Entscheidung zu fällen.
Als Micro-Service Entwickler bedeutet dies, dass nebst der Aufgabe des PEP (“ich muss einen Zugriff erlauben oder blockieren können”) ebenfalls ein PDP (“ich muss entscheiden können, ob ein Zugriff erlaubt ist”) implementiert werden muss. Dies sollte innerhalb desselben Microservices geschehen.
In der Regel führt das dazu, dass jeder Microservice seinen PDP anders implementiert und insbesondere andere Regeln und Policies als Entscheidungsgrundlage verwendet. Sprich, es gibt keinen zentralen PIP, Policies sind überall verteilt und werden unterschiedlich formalisiert.
Nebst einem massiven Governance-Overhead, um die Situation im Griff zu behalten, bedeutet dies ebenfalls, dass jede informelle Policy-Änderung zu einer Codeänderung führt:
- neuer Build / Release
- neue Regression-Tests
- neue Deployments (Downtime / Wartefenster)
Im Worst-Case könnte es wie nachfolgend abgebildet aussehen und dies für jeden Microservice.