Über das Azure AD Preview Modul ist es möglich Conditional Access Policies in Azure AD mit PowerShell zu verwalten.
Das Azure AD Preview Modul inkludiert 4 Commands für Conditional Access Policies:
- Get-AzureADMSConditionalAccessPolicy
- New-AzureADMSConditionalAccessPolicy
- Set-AzureADMSConditionalAccessPolicy
- Remove-AzureADMSConditionalAccessPolicy
Über die Commands können Conditional Access Policies per PowerShell verwaltet werden.
Um die erforderlichen Angaben für eine neue Policy vorzubereiten müssen diese für PowerShell gebildet werden. Das Azure AD Preview Modul erstellt die Policy über die Conditional Access API von Microsoft Graph.
Damit Administratoren Conditional Access Policies über PowerShell verwalten dürfen muss dem Account die Rolle Conditional Access Admin, Security Admin oder Global Admin zugewiesen sein.
In meinem Beispiel erstelle ich zwei Policies um die Synchronisation von Dokumenten in SharePoint und OneDrive für private Geräte einzuschränken. Am Ende des Posts sind die Commands zusammengefasst.
- Aufbau der Verbindung zu Azure AD.
Import-Module AzureADPreview
$AzureADSession = Connect-AzureAD
- Definieren des Condition Objekts um die Conditions für die Policy vorzubereiten.
$CAConditionSet = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
- Definieren der Applikationen die mit der Policy betroffen sind.
In meinem Fall erstelle ich die Policy für SharePoint Online. Um die betroffene Applikation auszuwählen möchte PowerShell die ID der Applikation. Sollte jemand mehrere Applikationen inkludieren wollen muss es über ein Array gebildet werden.
$CAConditionSet.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$SharePointApp = Get-AzureADServicePrincipal -all $true | ?{$_.displayname -eq "Office 365 SharePoint Online" }
$CAConditionSet.Applications.IncludeApplications = $SharePointApp.AppId
- Definieren der betroffenen Accounts und der Accounts die ausgenommen sind.
In meinem Fall exkludiere ich den Account der die Policy erstellt von der Policy. PowerShell möchte dafür die Giud des Azure AD Accounts.
$CAConditionSet.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$ExcludeADAccount = (Get-AzureADUser -ObjectId $AzureADSession.account.id).ObjectId
$CAConditionSet.Users.IncludeUsers = "All"
$CAConditionSet.Users.ExcludeUsers = $ExcludeADAccount
- Definieren welche Conditions von der Policy betroffen sind.
In meinem Fall betrifft es mobile Apps und Desktop Clients.
$CAConditionSet.ClientAppTypes = @('MobileAppsAndDesktopClients')
- Im nächsten Schritt wird definiert für wen der Zugriff zugelassen oder blockiert wird.
In meinem Fall sollte das Gerät entweder Compliant oder in Azure AD gejoined sein.
$CAConditionControls = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$CAConditionControls._Operator = "OR"
$CAConditionControls.BuiltInControls = @("CompliantDevice", "DomainJoinedDevice")
- Danach wird für die Policy ein Name definiert und die Policy erstellt.
In meinem Fall deaktiviere ich die Policy bei der Erstellung. Sie wird später aktiviert.
$CAPolicy_BlockSharePointAcess = New-AzureADMSConditionalAccessPolicy -DisplayName "PowerShell - Block SharePoint and OneDrive access on unmanaged devices" -State "Disabled" -Conditions $CAConditionSet -GrantControls $CAConditionControls
Mit der ersten Policy wird allen Accounts (ausgenommen dem Ersteller der Policy) verboten von ihrem privaten PC oder Mac auf SharePoint und OneDrive zuzugreifen. Um den Zugriff via Browser zu ermöglichen erstelle ich eine zusätzliche Session Policy. Über die Session Policy wird der Zugriff auf den Browser limitiert. Ein Sync auf private PCs/Macs ist damit nicht möglich. Die Erstellung ist ähnlich zur ersten Policy, die Condition wird angepasst und statt einem Zugriff die Session konfiguriert.
- Wiederhole die Schritte 2 bis 4.
- Definieren welche Conditions von der Policy betroffen sind.
In der zweiten Policy betrifft es den Zugriff über einen Browser.
$CAConditionSet.ClientAppTypes = @('Browser')
- Im nächsten Schritt wird der Zugriff nicht wie in der ersten Policy auf definierte Geräte beschränkt sondern für die Session konfiguriert.
In meinem Fall gebe ich Accounts mit nicht verwalteten Geräten (zb Privat-PCs) limitierten Zugriff auf SharePoint und OneDrive über einen Browser.
$CAConditionControls = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessSessionControls
$CAConditionControls.ApplicationEnforcedRestrictions = $true
- Danach wird für die Policy ein Name definiert und die Policy erstellt.
In meinem Fall deaktiviere ich die Policy bei der Erstellung. Sie wird später aktiviert.
$CAPolicy_LimitSharePointAcessToBrowser = New-AzureADMSConditionalAccessPolicy -DisplayName "PowerShell - Limited browser access to SharePoint and OneDrive for unmanaged devices" -State "Disabled" -Conditions $CAConditionSet -SessionControls $CAConditionControls
Wird es jetzt in den Conditional Access Policies von Azure AD überprüft finden sich die zwei neuen Policies im Status deaktiviert. So könnte jemand die Konfiguration noch einmal überprüfen.
Die Policies können manuell im Browser oder über PowerShell aktiviert werden. Wird eine Policy aktiviert dauert es ein paar Minuten bis die Policy verteilt ist.
Set-AzureADMSConditionalAccessPolicy -PolicyId $CAPolicy_BlockSharePointAcess.Id -State Enabled
Set-AzureADMSConditionalAccessPolicy -PolicyId $CAPolicy_LimitSharePointAcessToBrowser.id -State Enabled
Benutzer die über einen Browser und privatem Endgerät zugreifen sehen jetzt einen Hinweis sie können ihre Tätigkeit nur im Browser vornehmen. Mit der Policy fehlen die Optionen für Synchronisieren oder Herunterladen auf privaten Geräten. Interne Mitarbeitende mit einem vom Unternehmen verwalteten Gerät sehen den Hinweis nicht und können wie gewohnt arbeiten.
Wird die Conditional Access Policy aktiviert gilt es nur für neu angemeldete Benutzer. Ist ein Benutzer bereits im Browser angemeldet wird die Änderung erst mit der nächsten Neuanmeldung wirksam.
Zum Abschluss die Commands via GitHub zusammengefasst.