Bedingte Zugriff Regeln exportieren/importieren

In diesem Artikel möchte ich euch zeigen, wie man bedingte Zugriff Regeln exportieren/importieren kann. Diese Regeln sind auch als Conditional Access bekannt und ein Feature vom Azure Active Directory. Mit dieser Funktionalität kann ich den Zugriff auf Unternehmensressourcen steuern, also z.B. eine Multifaktor Authentifizierung verlangen, wenn auf sehr sensible Daten zugegriffen werden soll. Mehr Informationen gibt zum Conditional Access gibt es bei Microsoft.

Standardmäßig können solche Regeln nicht über die Weboberfläche vom Azure Active Directory importiert bzw. exportiert werden. Hat man also z.B. einen Tenant zum Testen und möchte dann Regeln in den produktiven Tenant überführen, muss man diese wieder über die Weboberfläche zusammenklicken. Das macht erfahrungsgemäß sehr wenig Spaß und ist auch noch fehleranfällig. Auch als Microsoft 365 Dienstleister kommt es häufiger vor, dass man bereits bestehende bedingte Zugriff Regeln aus dem eigenen Tenant auf den Tenant des Kunden kopieren will. Oder man hat bereits gute Baseline Regeln, die auf jedem Tenant aktiviert sein sollten, man diese aber nicht immer manuell zusammenklicken möchte.

Und deshalb gibt es dafür die Lösung: DCToolbox von Daniel Chronlund. Das Tool ist also nicht von mir, sondern ich beschreibe hier nur die Nutzung. Und das Tool kann auch noch viel mehr, als was hier beschrieben wird. 🙂

Um mit DCToolbox bedingte Zugriff Regeln exportieren/importieren zu können, benötigen wir zuerst eine App Registrierung im Tenant, die zur Verbindung des Tools genutzt wird.

Azure Active Directory Weboberfläche
App Registrierungen

Wir erstellen also eine App Registrierung für die DCToolbox. Der Name kann dabei beliebig gewählt werden, nur die Redirect URI muss https://login.microsoftonline.com/common/oauth2/nativeclient genau so lauten.

Registrierung einer App

Im nächsten Schritt müssen wir nun die notwendigen API Berechtigungen für die App setzten. Standardmäßig darf unsere App Registrierung nämlich nicht sehr viel.

API Berechtigungen

Wir fügen also die notwendigen Berechtigungen hinzu. DCToolbox nutzt an dieser Stelle natürlich die Microsoft Graph API.

Microsoft Graph API Berechtigungen vergeben

Und noch wichtig zu wissen, wir müssen als Art die delegierten Berechtigungen (Delegated permissions) auswählen.

Delegierte Berechtigungen auswählen

DCToolbox benötigt folgende Berechtigungen:

  • Agreement.Read.All
  • Application.Read.All
  • Directory.Read.All
  • Policy.Read.All
  • Policy.ReadWrite.ConditionalAccess
API Berechtigungen

Diese angeforderten Berechtigungen müssen wir dann noch genehmigen, bzw. durch einen Benutzer mit entsprechenden Berechtigungen genehmigen lassen.

Danach sollten die Berechtigungen dann entsprechend korrekt vergeben sein.

Korrekte API Berechtigungen vergeben

Damit wir die App Registrierung nutzen können, müssen wir noch ein Client Secret (Value) erstellen und uns zusätzlich die ID der Anwendung merken.

ID der Anwendung
Bedingte Zugriff Regeln exportieren/importieren
Client Secret erstellen

Nachdem wir nun alles vorbereitet haben, können wir DCToolbox installieren und verwenden. Die Installation erfolgt über die PowerShell Gallery mit dem Befehl:

Install-Module DCToolbox
Bedingte Zugriff Regeln exportieren/importieren
DCToolbox installieren

Nun können wir mit den Befehlen Export-DCConditionalAccessPolicyDesign und Import-DCConditionalAccessPolicyDesign die bedingten Zugriff Regeln exportieren/importieren.

Bedingte Zugriff Regeln exportieren/importieren
DCToolbox im Einsatz

Als Beispiel diente eine Regel aus einer meiner vorherigen Beiträge. Durch den Export und Import haben wir die Regel kopiert (nicht sinnvoll, aber es funktioniert wie erwähnt mit beliebigen Tenants). Vor dem Import habe ich das JSON noch angepasst und den Namen geändert. Dazu aber gleich noch mehr.

Bedingte Zugriff Regeln exportieren/importieren
Kopieren von bedingten Zugriff Regeln

Die Regeln werden als JSON gespeichert und für das aufgeführte Beispiel sieht dies folgendermaßen aus:

{
    "displayName":  "BLOCK - Download untrusted Devices 2",
    "state":  "enabledForReportingButNotEnforced",
    "grantControls":  null,
    "conditions":  {
                       "userRiskLevels":  [

                                          ],
                       "signInRiskLevels":  [

                                            ],
                       "clientAppTypes":  [
                                              "browser"
                                          ],
                       "locations":  null,
                       "deviceStates":  null,
                       "clientApplications":  null,
                       "applications":  {
                                            "includeApplications":  [
                                                                        "00000002-0000-0ff1-ce00-000000000000",
                                                                        "00000003-0000-0ff1-ce00-000000000000"
                                                                    ],
                                            "excludeApplications":  [

                                                                    ],
                                            "includeUserActions":  [

                                                                   ]
                                        },
                       "users":  {
                                     "includeUsers":  [
                                                          "All"
                                                      ],
                                     "excludeUsers":  [

                                                      ],
                                     "includeGroups":  [

                                                       ],
                                     "excludeGroups":  [
                                                           "8eec22a1-2777-4aa0-a64c-dfd46e485e43"
                                                       ],
                                     "includeRoles":  [

                                                      ],
                                     "excludeRoles":  [

                                                      ]
                                 },
                       "platforms":  {
                                         "includePlatforms":  [
                                                                  "all"
                                                              ],
                                         "excludePlatforms":  [
                                                                  "android",
                                                                  "iOS",
                                                                  "macOS"
                                                              ]
                                     },
                       "devices":  {
                                       "includeDeviceStates":  [

                                                               ],
                                       "excludeDeviceStates":  [

                                                               ],
                                       "includeDevices":  [
                                                              "All"
                                                          ],
                                       "excludeDevices":  [
                                                              "DomainJoined"
                                                          ]
                                   }
                   },
    "sessionControls":  {
                            "applicationEnforcedRestrictions":  null,
                            "signInFrequency":  null,
                            "persistentBrowser":  null,
                            "cloudAppSecurity":  {
                                                     "cloudAppSecurityType":  "blockDownloads",
                                                     "isEnabled":  true
                                                 }
                        }
}

Mit dieser gezeigten Möglichkeit kann man also nun Conditional Access Regeln ganz einfach exportieren und wieder importieren. Natürlich kann/muss man das JSON auch anpassen, wenn man z.B. dort Gruppen oder ähnliches verwendet. Diese unterscheiden sich natürlich je nach Tenant.

DCToolbox nimmt einem viele manuelle Arbeit ab, weshalb ich das Tool nur jedem empfehlen kann.

Schreibe einen Kommentar