Conditional Access für Leute, die in Firewall-Regeln denken
Ich sehe immer wieder gute Admins, die Conditional Access leicht falsch verstehen.
Nicht weil das Feature unmöglich wäre. Sondern weil das mentale Modell falsch ist.
Wenn du aus Firewalls, Routing, Proxy-Regeln, iptables oder alten Exchange Transport Rules kommst, suchst du instinktiv nach Reihenfolge:
- Regel 1 matcht, mach das.
- Regel 2 matcht, mach jenes.
- First match wins.
- Vielleicht überschreibt ein späteres Deny ein früheres Allow.
- Vielleicht behebt das Hochziehen der Regel das Problem.
Conditional Access funktioniert nicht so.
Es ist kein Paketfilter. Es ist kein Top-Down-Regelwerk. Es ist kein „first match wins". Es ist eine Policy-Evaluation-Engine, die einen Sign-in nimmt, Fakten über diesen Sign-in sammelt, alle passenden Policies findet und dann das kombinierte Ergebnis durchsetzt. Microsoft beschreibt Conditional Access als Entras Zero-Trust-Policy-Engine und als ein „if-then"-System: wenn ein Nutzer auf eine Ressource zugreifen will, dann muss er die konfigurierten Access Controls erfüllen. Es wird außerdem nach der ersten Authentifizierung durchgesetzt, nicht davor.
Dieser eine Unterschied erklärt die meiste Verwirrung.
Die Kurzfassung
Für einen Sign-in fragt Entra ungefähr Folgendes:
Welche aktivierten Conditional-Access-Policies matchen diesen Nutzer, diese Ressource, diese App, dieses Gerät, diesen Standort, diesen Risk-State und diesen Client-Typ?
Dann:
Was fordert jede passende Policy?
Dann:
Kann der Sign-in das alles erfüllen?
Es gibt keine Policy-Priorität.
Es gibt keine „Allow"-Policy, die eine andere Policy überschreibt.
Es gibt kein „verschiebe diese Policy über die andere".
Wenn zwei Policies greifen, zählen beide. Wenn eine MFA verlangt und eine andere ein konformes Gerät, braucht der Nutzer beides. Microsoft sagt das explizit: mehrere Conditional-Access-Policies können gleichzeitig auf einen Nutzer wirken, und alle müssen erfüllt werden.
Eine Policy hat zwei Hälften
Eine Conditional-Access-Policy versteht sich leichter, wenn du sie in zwei Teile zerlegst.
1. Assignments: wann greift die Policy?
Das ist die Matching-Logik.
Assignments beantworten:
- Welche Nutzer, Gruppen, Rollen, Gäste, Workload Identities oder Agents?
- Welche Cloud-App, User-Action, Authentication Context oder Ressource?
- Welches Netzwerk oder welche Named Location?
- Welche Device-Plattform?
- Welche Client-App?
- Welche Risk-Condition?
- Welcher Device-Filter?
Sieh das als „Scope" der Policy.
Eine Policy greift nur, wenn die konfigurierten Bedingungen erfüllt sind. Microsofts Troubleshooting-Doku sagt, dass Conditional-Access-Policies nur greifen, wenn alle Bedingungen erfüllt oder nicht konfiguriert sind.
Deshalb ist „policy not applied" im Sign-in-Log nicht automatisch ein Problem. Es kann einfach heißen, dass eine Bedingung nicht gematcht hat.
Beispiel:
- Policy: gilt für alle Nutzer.
- Ziel-Ressource: SharePoint.
- Bedingung: nur außerhalb von Trusted Locations.
- Nutzer meldet sich von der Büro-IP an SharePoint an.
- Ergebnis: policy not applied.
Das ist korrekt. Die Location-Bedingung hat nicht gematcht.
2. Access Controls: was passiert, wenn sie greift?
Das ist die Enforcement-Logik.
Access Controls beantworten:
- Access blockieren?
- MFA verlangen?
- Authentication Strength verlangen?
- Konformes Gerät verlangen?
- Hybrid-joined Gerät verlangen?
- App Protection Policy verlangen?
- Terms of Use verlangen?
- Session Controls anwenden?
Grant Controls lassen sich kombinieren. Standardmäßig verlangen mehrere ausgewählte Grant Controls, dass alle erfüllt sein müssen. Du kannst auf „eines der ausgewählten Controls" umstellen, aber nur innerhalb derselben Policy.
Dieses Detail ist wichtig.
Innerhalb einer Policy:
MFA ODER konformes Gerät
ist möglich, wenn du „Require one of the selected controls" setzt.
Über zwei Policies hinweg:
Policy A verlangt MFA
Policy B verlangt konformes Gerät
ergibt:
MFA UND konformes Gerät
weil beide Policies erfüllt sein müssen.
Genau dort werden viele Designs versehentlich strenger als beabsichtigt.
Wo die Firewall-Analogie zerbricht
Eine Firewall-Regel sagt meist sowas wie:
Source, Destination, Protocol, Port, Action.
Conditional Access sagt eher:
Sammle für diesen Sign-in-Kontext alle passenden Anforderungen der Organisation, und entscheide dann, ob der Nutzer sie alle erfüllen kann.
Das heißt: diese Firewall-Instinkte führen dich in die Irre:
| Firewall-Instinkt | Conditional-Access-Realität |
|---|---|
| Regel-Reihenfolge zählt | Policy-Reihenfolge zählt nicht |
| First match wins | Alle passenden Policies greifen |
| Allow überschreibt Deny bei richtiger Sortierung | Eine greifende Block-Policy blockt |
| Source-IP ist das Hauptsignal | Identity, Device, App, Risk, Location, Client und Session zählen alle |
| Eine Regel erlaubt oder verbietet Traffic | Eine Policy kann erst nach Zusatz-Anforderungen erlauben |
| Testen heißt Pakete schicken | Testen heißt What If, Sign-in Logs und Report-only-Auswirkung prüfen |
Das nächstliegende einfache Modell ist nicht iptables.
Es ist eher Flughafensicherheit.
Ein Checkpoint prüft den Pass. Einer das Ticket. Einer Flüssigkeiten. Einer prüft, ob du zufällig für eine zusätzliche Kontrolle gezogen wurdest. An einem Checkpoint vorbeizukommen befreit dich nicht von den anderen.
Was passiert, wenn Policies „kollidieren"?
Die meisten Conditional-Access-„Konflikte" sind keine echten Konflikte. Es sind aufaddierte Anforderungen.
Fall 1: eine Policy verlangt MFA, eine andere ein konformes Gerät
Endergebnis:
Nutzer muss MFA abschließen und ein konformes Gerät nutzen.
Kein Konflikt. Beide greifen.
Fall 2: eine Policy verlangt MFA, eine andere blockt Access
Endergebnis:
Block.
Microsofts Policy-Enforcement-Flow sagt: wenn eine Policy die Block-Grant-Control hat, stoppt die Enforcement und der Nutzer wird geblockt.
Es gibt keinen sinnvollen Weg, in dem eine MFA-Policy gegen eine Block-Policy „gewinnen" könnte.
Fall 3: eine Policy verlangt MFA, eine andere phishing-resistente MFA
Endergebnis:
Nutzer muss die stärkere effektive Anforderung erfüllen.
In der Praxis hängt das von der genauen Authentication Strength und vom Sign-in-Kontext ab. Der Punkt ist: Entra wählt nicht eine Policy aus und ignoriert die andere. Es wertet die greifenden Policies aus, und der Nutzer muss die resultierenden Controls erfüllen.
Fall 4: eine Policy gilt für alle Nutzer, eine andere schließt eine Gruppe aus
Der Ausschluss wirkt nur in der Policy, in der er konfiguriert ist.
Das ist ein häufiger Fehler.
Wenn ein Nutzer aus Policy A ausgeschlossen, aber in Policy B enthalten ist, greift Policy B trotzdem. Exclusions sind keine globalen Bypässe, außer du baust sie über alle relevanten Policies hinweg ein. Microsoft adressiert auch das Governance-Problem rund um Exclusions: wenn Nutzer ausgeschlossen werden, wird die Policy-Absicht für sie nicht durchgesetzt, deshalb brauchen Exclusions Sichtbarkeit und regelmäßiges Review.
Includes und Excludes sind keine Magie
Innerhalb einer Policy entscheiden Includes und Excludes, ob diese Policy im Scope ist.
Beispiel:
Policy-Name:
CA001 - MFA für alle Nutzer verlangen
Assignments:
- Include: Alle Nutzer
- Exclude: Break-Glass-Accounts
- Ressource: Alle Cloud-Apps
- Grant: MFA verlangen
Für normale Nutzer greift die Policy.
Für die ausgeschlossenen Notfall-Accounts greift genau diese Policy nicht.
Aber wenn du eine weitere Policy hast:
CA002 - Access aus nicht unterstützten Ländern blocken
und die alle Nutzer ohne Notfall-Account-Exclusion einschließt, kann dein Break-Glass-Account trotzdem von CA002 geblockt werden.
Das kann genau das sein, was du willst. Es kann dich aber auch im Vorfall aussperren.
Emergency-Access-Accounts brauchen bewusstes Design. Microsoft empfiehlt: mindestens zwei Emergency-Access-Accounts anlegen, cloud-only halten, mit starker oder passwordless Authentifizierung wie FIDO2 oder zertifikatsbasierter Authentifizierung absichern, Sign-ins überwachen und regelmäßig validieren.
Behandle „aus der MFA-Policy ausgeschlossen" nicht als „aus Conditional Access ausgeschlossen".
Das ist es nicht.
„All cloud apps" ist mächtig und gefährlich
Der schnellste Weg, einen Tenant kaputt zu machen, ist eine Policy wie diese:
- Nutzer: alle Nutzer
- Ressourcen: alle Ressourcen
- Grant: Access blockieren
Sie macht genau, was sie sagt.
Microsoft warnt explizit vor breiten „All users / all resources"-Konfigurationen, etwa kompletten Block, Compliance-Gerät-Pflicht für alle bevor das Enrollment bereit ist, oder App-Protection-Pflicht ohne dass die Nutzer sie erfüllen können.
Dasselbe gilt für Geräte-Anforderungen.
Das klingt vernünftig:
Konformes Gerät für alle Nutzer und alle Cloud-Apps verlangen.
Aber wenn das Gerät eines Admins nicht konform ist oder Nutzer noch nicht enrolled sind, blockst du genau die Portale, mit denen du die Situation beheben könntest.
Conditional Access ist nicht schwer, weil die UI schwer wäre.
Es ist schwer, weil breite Aussagen breite Folgen haben.
Warum Teams manchmal kaputt geht, obwohl du SharePoint targetest
Noch eine Verwirrungsquelle: Nutzer denken, sie melden sich an einer App an, aber Microsoft-365-Apps hängen oft von anderen Services ab.
Teams ist das klassische Beispiel.
Ein Nutzer öffnet Teams und denkt:
Ich melde mich an Teams an.
Aber Teams braucht je nach Funktion Exchange, SharePoint, Planner, Stream, Whiteboard und weitere nachgelagerte Ressourcen. Microsofts Service-Dependency-Doku weist darauf hin und empfiehlt, für gängige Microsoft-365-Policies das Office-365-App-Target zu nutzen, um Überraschungen zu vermeiden.
Eine Policy auf SharePoint kann also die Teams-Experience beeinflussen.
Das ist kein zufälliges Verhalten von Conditional Access. Es ist der App-Stack, der enger verzahnt ist als die UI vermuten lässt.
Beim Troubleshooten nicht nur auf den App-Namen schauen, den der Nutzer nennt. Sign-in Log, Resource, Audience und die Policies im Conditional-Access-Tab anschauen.
Network Locations sind Public-Network-Signale
Named Locations sind nützlich, aber keine internen Firewall-Zonen.
Für IP-basierte Named Locations sieht Entra die öffentliche IP, mit der du Microsoft erreichst, nicht die private RFC1918-Adresse im LAN. Microsofts Network-Signal-Doku sagt: für Geräte in einem privaten Netz ist die relevante Adresse die öffentliche Adresse, mit der das Netz ins Internet geht, nicht die interne Client-IP.
Also: nicht 10.0.0.0/8 in eine Trusted Location packen und erwarten, dass Entra weiß, wo dein Laptop im Gebäude sitzt.
Das sieht es nicht.
Es sieht den Egress-Pfad.
Device-Plattform ist keine Sicherheitsgrenze
Conditional Access kann Device-Plattform als Signal nutzen.
Aber Vorsicht.
Microsoft sagt: die Plattform-Erkennung nutzt vom Gerät geliefertes Material, etwa User-Agent-Strings, und das ist nicht verifiziert.
Eine Policy wie:
Linux blocken.
ist als grobe Kontrolle nützlich, aber kein kryptografisch belastbares Device-Trust.
Für echtes Device-Trust: Device-Compliance, Hybrid Join wo passend, Device-Filter und Intune-gestützter State.
Die zwei Tools, die Ratespielchen reduzieren
1. What If
Das What-If-Tool lässt dich einen Sign-in-Fall für einen Nutzer, eine Workload Identity oder eine Agent Identity simulieren und sehen, welche Policies greifen würden. Es hilft beim Design und beim Troubleshooten komplexerer Fälle. Microsoft weist darauf hin, dass nur aktivierte und Report-only-Policies in die Evaluation einfließen und dass das Tool keine Conditional-Access-Service-Dependencies testet.
What If ist also gut.
Aber nicht die ganze Wahrheit bei Teams-typischen Dependency-Problemen.
2. Sign-in Logs
In den Sign-in Logs siehst du, was wirklich passiert ist.
Für einen fehlgeschlagenen oder unerwarteten Sign-in:
Entra Admin Center → Monitoring & health → Sign-in logs → ausgewählter Sign-in → Conditional Access-Tab
Dort siehst du, welche Policies griffen, welche nicht und warum. Microsofts Troubleshooting-Doku empfiehlt genau diesen Weg für unerwartete Sign-in-Ergebnisse und zeigt, dass der Conditional-Access-Tab die Policy oder Policies identifiziert, die die Unterbrechung verursacht haben.
Das ist der schnellste Weg, das Raten zu beenden.
Report-only ist nicht optional bei ernsten Änderungen
Im Report-only-Modus kannst du die meisten Conditional-Access-Policies prüfen, bevor du sie durchsetzt. Während des Sign-ins werden Report-only-Policies ausgewertet, aber nicht erzwungen, und die Ergebnisse landen in den Sign-in-Log-Details.
Das ist das richtige Rollout-Muster:
- Policy bauen.
- In Report-only stellen.
- Schauen, wer betroffen wäre.
- Exclusions und Scope korrigieren.
- Auf eine Pilotgruppe ausrollen.
- Dann in Produktion.
Das schlechteste Muster ist:
- Breite Policy bauen.
- Anschalten.
- Aus dem Ausfall lernen.
Funktioniert auch. Die Lektion ist nur teurer.
Mein praktisches Namensschema
Ich mag Policy-Namen, die mir vier Dinge sagen:
Nummer - Scope - Bedingung - Control
Beispiel:
CA001 - All users - Legacy auth - BlockCA010 - Admin roles - All apps - Require phishing-resistant MFACA020 - All users - Microsoft 365 - Require MFACA030 - Unmanaged devices - SharePoint - Session restrictionsCA040 - High sign-in risk - All apps - Require MFACA050 - Unsupported countries - All apps - Block
Die Nummer ist keine Priorität. Sie ist nur Sortierung.
Diese Unterscheidung ist wichtig. Ein Junior-Admin sollte nicht denken, CA001 läuft vor CA050. Tut es nicht. Die Nummer macht nur die Liste lesbar.
Die Baseline, die ich einem neuen Admin erklären würde
Fang nicht mit 30 cleveren Policies an.
Fang mit ein paar langweiligen an:
| Policy | Zweck |
|---|---|
| Legacy Authentication blocken | Alte Clients können moderne Controls nicht sauber |
| Starke MFA für Admins | Admin-Kompromittierung tut mehr weh |
| MFA für Nutzer | Basis-Identitätsschutz |
| Konformes oder verwaltetes Gerät für sensible Apps | Device-Trust dort, wo es zählt |
| Risk-basierte Sign-ins einschränken | Wenn ihr Entra ID Protection habt |
| Session-Restrictions für unverwaltete Geräte | Browser-Zugriff erlauben, ohne das volle Data-Leak-Risiko |
| Standorte blocken, aus denen ihr nie arbeitet | Nützlich, aber Reisen und False Positives einplanen |
| Emergency-Access-Accounts anders behandeln | Sie sind keine normalen Admin-Accounts |
Microsoft liefert außerdem Conditional-Access-Templates, die an gängige Empfehlungen angelehnt sind. Als Startpunkt gut, nicht als Ersatz dafür, das Design zu verstehen.
Die Denkfehler, die ich selber wieder mache
Der erste Fehler ist die Frage:
Warum hat diese Policy nicht gegriffen?
Die bessere Frage ist:
Welche Bedingung war nicht erfüllt?
Der zweite Fehler ist die Frage:
Welche Policy hat gewonnen?
Die bessere Frage ist:
Welche Policies griffen, und welche kombinierten Anforderungen entstanden daraus?
Der dritte Fehler ist der Satz:
Ich habe den Nutzer aus Conditional Access ausgeschlossen.
Der bessere Satz ist:
Ich habe den Nutzer aus dieser einen Policy ausgeschlossen.
Der vierte Fehler ist der Gedanke:
Teams-Policy.
Der bessere Gedanke ist:
Teams plus seine nachgelagerten Ressourcen.
Der fünfte Fehler ist der Gedanke:
Trusted LAN.
Der bessere Gedanke ist:
Public-Egress-IP oder Global-Secure-Access-Signal.
Das mentale Modell, das endlich hängen bleibt
Stell dir für jeden Sign-in vor, dass Entra eine Checkliste baut.
Jede greifende Conditional-Access-Policy fügt der Checkliste Punkte hinzu.
- Eine Policy fügt MFA hinzu.
- Eine fügt konformes Gerät hinzu.
- Eine fügt Terms of Use hinzu.
- Eine fügt Session-Restrictions hinzu.
- Eine sagt block.
Der Nutzer bekommt nur Zugriff, wenn die Checkliste erfüllbar ist.
Steht „block" auf der Liste, ist das Gespräch beendet.
Das ist Conditional Access.
Keine Top-Down-Firewall-Regeln.
Eine Checkliste, gebaut aus jeder Policy, die greift.