Exchange Intune Connector

Wer Exchange Server betreibt, möchte meist die Endgeräte unter Kontrolle haben. OWA kann pro Benutzer und im Umfang beschränkt werden und der Zugang per Outlook ist über VPNs und andere Tricks ebenfalls steuerbar. In der Cloud gibt es ja direkt Conditional Access um Clients zu filtern. Für Mobilgeräte ist es dann Intune, mit der die Geräte verwaltet werden. Den Zugriff auf eigene Exchange Server über ActiveSync lässt sich über die ActiveSync Quarantäne schon mit Bordmitteln steuern. Mit dem Microsoft Exchange Intune Connector können Sie als Administrator nun die beiden Welten verbinden. Der Connector hat die Aufgabe, abhängig vom Intune-Status eines Mobilgeräts die Quarantäne eines Exchange Servers zu verwalten. So können Intune aus der Cloud und Exchange ohne „Conditional Access“ den Zugriff auf Postfächer kontrollieren und auf Geräte beschränken, die „compliant“ sind.

Die Funktion wurde von Microsoft mittlerweile abgekündigt
Changes to the Intune Exchange On-Premises Connector (10 Jun 2020)
https://techcommunity.microsoft.com/t5/exchange-team-blog/changes-to-the-intune-exchange-On-Premises-connector/ba-p/1455299

Download

Zur Installation laden Sie sich die Quelle als ZIP-Archiv aus dem Intune-Portal herunter und packen es lokal aus.

Das gleiche Fenster gibt es im Endpoint Manager Admin Center

Dienstkonto

Ehe Sie zur Installation schreiten, benötigen Sie ein Dienstkonto in der Exchange Umgebung, welches Zugriff auf einige Exchange PowerShell Commandlets hat. Über den Weg wird die Quarantäne gepflegt. Genau genommen sind dies:

Get-ActiveSyncOrganizationSettings, Set-ActiveSyncOrganizationSettings
Get-CasMailbox, Set-CasMailbox
Get-ActiveSyncMailboxPolicy, Set-ActiveSyncMailboxPolicy, New-ActiveSyncMailboxPolicy, Remove-ActiveSyncMailboxPolicy
Get-ActiveSyncDeviceAccessRule, Set-ActiveSyncDeviceAccessRule, New-ActiveSyncDeviceAccessRule, Remove-ActiveSyncDeviceAccessRule
Get-ActiveSyncDeviceStatisticsGet-ActiveSyncDevice
Get-ExchangeServer
Get-ActiveSyncDeviceClass
Get-Recipient
Clear-ActiveSyncDevice, Remove-ActiveSyncDevice
Set-ADServerSettings
Get-Command

Details finden Sie dazu auch auf der Beschreibung

Es gibt leider keine vordefinierte RBAC-Rolle für "Quarantäne Administratoren": Damit das Dienstkonto aber kein "Exchange Admin" wird, können Sie eine solche RBAC-Rolle natürlich selbst anlegen. Ehe Sie nun aber die Befehle zusammensuchen, können Sie ein fertiges Skript nutzen

Das Script macht genau das, so dass Sie das Dienstkonto dann nur noch in die RBAC-Rollengruppe aufnehmen müssen. Ein Exchange Postfach muss das Dienstkonto nicht haben. Allerdings muss es mittels ADSync ins AzureAD repliziert werden. Es braucht in der Cloud auch eine Intune-Lizenz

„You'll need an account with an Intune license that can be used by the connector to connect to Exchange”
Quelle: https://docs.microsoft.com/en-us/intune/exchange-connector-install

Konfiguration

Einige Einstellungen des Connectors sind im Device Management Portal möglich. Für Migrationen von anderen Plattformen ist es besonders interessant, über Gruppen den Arbeitsbereich zu beschränken. So können Sie den Connector nur auf bestimmte Personen limitieren, während alle anderen z. B. noch über die alte Plattform abrufen.

Installation

Der Connector ist eine 32bit Software und installiert sich daher nach “C:\Program Files (x86)\Windows Intune Exchange Connector“. Bei der Installation werden Sie nach den Anmeldedaten für die Exchange Umgebung und einem Administrator zur Einrichtung in Intune gefragt.

Beim Exchange Server Namen sollten Sie einen FQDN eines Frondend Servers angeben. Der Connector sucht sich dann alle Frontends in der AD-Site und handhabt selbst das Failover, wenn ein Exchange Frontend Server nicht verfügbar ist. Das können Sie später auch in der Konfigurationsdatei „C:\ProgramData\Microsoft\Windows Intune Exchange Connector\On-PremisesExchangeConnectorCasFailoverConfiguration.xml“ kontrollieren. Sie können sogar einen Proxy Server einstellen und Benachrichtigungen per Mail erhalten. Allerdings scheint der Connector diese Mails per EWS bei einem Exchange Server authentifiziert einzustellen. Nicht gerade optimal für eine Überwachung mit statischem Kennwort und Postfach zu benachrichtigen. Danach ist der Dienst installiert. Er startet übrigens mit einem ebenfalls lokal angelegten Benutzer.

Der Dienst selbst läuft aber nicht mit dem Dienstkonto der Domäne, sondern mit einem lokalen Konto. Damit ist aber klar, dass auch die Anmeldedaten für den Exchange Zugriff irgendwo hinterlegt sein müssen. Nach dem Start verbindet sich der Connector mit Intune per HTTPS unter Nutzung eines Zertifikats und mit dem Exchange Server über einen klassischen Benutzernamen mit Kennwort. Eine GUI zur Kontrolle o.ä. wie bei ADSync habe ich nicht gefunden. Hier bleiben also Eventlog, Performancecounter, Tracelogs und bei Aktivität auch der Resource Monitor.

Hier sehen Sie natürlich nichts, wenn der Dienst zwischen den Läufen "idle" ist. Es bleibt auch keine Verbindnug zur Cloud offen. Es gibt also anscheinend auch kein „Push“ seitens der Cloud an den Service

Auf https://docs.microsoft.com/en-us/intune/exchange-connector-install steht noch was interessantes
„If the destination folder is not a secure location, you should delete the certificate file MicrosoftIntune.accountcert when you are finished installing your On-Premises connectors“

Das sieht so aus, als ob das Connector Setup ein Zertifikat für den User bekommt und sich damit dann anmeldet. Auf der gleichen Seite steht zum Thema Hochverfügbar, dass der Connector alleine einen anderen CAS nutzt aber selbst nicht Hochverfügbar ausgelegt ist. Allerdings synchronisiert er selbst auch nur alle 2 Stunden, so dass ein SLA durch eine Neuinstallation einfach zu halten ist. Sie müssen natürlich erkennen, dass der Connector nicht mehr läuft. Dazu weiter unten mehr.

„If the connector fails, there is no automatic failover and you must replace that connector by installing a new connector.”
https://docs.microsoft.com/en-us/intune/exchange-connector-install#reinstall-the-On-Premises-exchange-connector

Eventlog

Der Connector schreibt ein paar Informationen ins Eventlog. Bislang habe ich nur „Information“ und „SuccessAudit“ gesehen und warte noch auf erste Fehler. Hier erst mal ein paar normale Events eines Start und Ende

Get-EventLog -LogName application -Source "Microsoft Intune Exchange Connector" -Newest 15 | ft entrytype,instanceid,message -AutoSize

EntryType InstanceId Message
--------- ---------- -------
Information 7004 Stopping the Windows Intune Exchange Connector Service
SuccessAudit 7001 Getting the administrator mail recipients completed successfully. Details: Get admin mail re...
SuccessAudit 7001 Getting the device access rules completed successfully. Details: Get device access rules com...
SuccessAudit 7001 Synchronizing the device classes completed successfully. Details: Sync device classes comman...
SuccessAudit 7001 Getting the mobile device list without a time filter (full sync) for 44 users completed succ...
Information 7009 Windows Intune Exchange Connector certificate has been installed...
Information 7003 Starting the Windows Intune Exchange Connector Service

Viele Events sind es nicht und ich habe auch noch nicht viele mehr gesehen. Wenn Sie etwas länger die Logs anschauen, dann sehen sie, dass der Event 7001 unterschiedliche Meldungen hat. Leider hat Microsoft hier keine unterschiedlichen EventIDs verwendet. Her nur die 7001 Events

Get-EventLog -LogName application -Source "Microsoft Intune Exchange Connector" -Newest 35 | ft timegenerated,entrytype,instanceid,message -AutoSize

timegenerated       EntryType    Id Message
------------------- ------------ ---- -------
02.05.2019 21:51:50 SuccessAudit 7001 Getting the mobile device list without a time filter (full sync) for 43 users completed successfully. Details: Inventory
02.05.2019 19:45:36 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 15:09:33' (quick sync) for 43 users completed successfull
02.05.2019 17:39:48 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 13:03:45' (quick sync) for 43 users completed successfull
02.05.2019 15:34:01 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 10:57:58' (quick sync) for 43 users completed successfull
02.05.2019 13:28:13 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 08:47:08' (quick sync) for 43 users completed successfull
02.05.2019 11:17:24 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 06:41:14' (quick sync) for 43 users completed successfull
02.05.2019 09:11:35 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 04:35:26' (quick sync) for 43 users completed successfull
02.05.2019 07:05:42 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 02:29:35' (quick sync) for 43 users completed successfull
02.05.2019 04:59:50 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/02/2019 00:23:47' (quick sync) for 43 users completed successfull
02.05.2019 02:54:03 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/01/2019 22:18:01' (quick sync) for 43 users completed successfull
02.05.2019 00:48:17 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/01/2019 20:07:16' (quick sync) for 43 users completed successfull
01.05.2019 22:37:31 SuccessAudit 7001 Getting the mobile device list with a time filter: '05/01/2019 18:01:16' (quick sync) for 43 users completed successfull
01.05.2019 20:31:45 SuccessAudit 7001 Getting the mobile device list without a time filter (full sync) for 43 users completed successfully. Details: Inventory

Es ist gut zu sehen, dass der Connector nach einem Start immer einen „FullSync“ macht und dann ca. 2 Stunden einen „Quick Sync“ mit einem Zeitfilter. Anscheinend liefert Intune immer nur eine komplette Liste und keine Deltas, so dass der Connector die Liste mit einer lokalen Kopie abgleichen muss, um dann in Exchange die Änderungen vorzunehmen. Leider loggt der Server im Eventlog nicht die ausgeführten Exchange Commandlets. Die finden Sie dann aber auf dem Exchange Eventlog.

Performance Counter

Natürlich habe ich auch in Perfmon kontrolliert, was ich da sehe. Der Connector hat tatsächlich auch hier neue Counter mitgebracht:

Die Counter starten nach dem Start aber immer bei 0 und sind daher keine Aussage zur Anzahlt der Geräte. Für eine einfache Überwachung von Aktivitäten ist es ein Anfang

Trace Logs

Neben dem Eventlog landen noch sehr viele Textdateien im Verzeichnis „C:\ProgramData\Microsoft\Windows Intune Exchange Connector\Logs“

Die Dateien sind XML-Dateien dessen Rootknoten auf "<E2ETraceEvent>" lautet. Mit Notepad kommen sie nicht weiter aber mit einem Tool von Microsoft

Monitoring

Wir wissen ja nun schon, dass der Connector alle 2 Stunden eine Verbindung zu Intune aufbaut, um sich die aktuelle Gerätekonfiguration zu holen und die Exchange Quarantäne entsprechend anzupassen. Damit schreibt der Connector bei jedem Sync-Lauf eine Meldung ins Eventlog, die wir überwachen können. Die TCP-Verbindung wird allerdings immer wieder abgebaut, so dass diese nicht überwacht werden kann. Insofern beschränkt sich eine Überwachung auf Fehler im Eventlog und das der Dienst selbst gestartet ist. Sie könnten aus den folgenden Befehlen sich also eine Überwachung bauen:

# Dienst muss laufen

$globalstatusok = $true
try {
   if (Get-Service "Microsoft Intune Exchange Connector Service").status -eq "Running"){
      write-host "ServiceStatus:Running"
   }
   else {
      write-host "ServiceStatus:NotRunning"
      $globalstatusok = $false
   }
}
catch {
   write-host "ServiceStatusOK: Unable to get Service Status"
   $globalstatusok = $false
}

# in den letzten 120+ Minuten muss es Events geben
try {
   if (Get-EventLog -LogName application -Source "Microsoft Intune Exchange Connector" -After (get-date).addminutes(-130)) {
      write-host "Events:Found"
   }
   else {
      write-host "Events: Missing"
      $globalstatusok = $false
   }
}
catch {
   write-host "Events: Error reading"
   $globalstatusok = $false
}

# Es sollten aber keine Fehler dabei sein
try {
   if (Get-EventLog -LogName application -Source "Microsoft Intune Exchange Connector" -After (get-date).addminutes(-130) -EntryType error,warning,failureaudit) {
      write-host "Events:Errors Found"
      $globalstatusok = $false
   }
   else {
      write-host "Events: No Errors"
   }
}
catch {
   write-host "Events: Error reading"
   $globalstatusok = $false
}

Write-host "GlobalStatusOK: $($globalstatusok)"

Sicher können Sie die Ausgabe noch anpassen und eine geeignete Meldung an ihr PRTG, Nagios o.ä. absetzen.

Konfiguration

Wenn Sie etwas tiefer in die Konfiguration schauen wollen, dann ist der Inhalt des Ordners "C:\ProgramData\Microsoft\Windows Intune Exchange Connector" interessant. Hier gibt es jede Menge Konfigurationsdateien, die Sie lesen können.

In der Datei "On-PremisesExchangeConnectorCasFailoverConfiguration.xml" können Sie sehen, welche CAS-Server das Setup ermittelt und eingetragen hat. "IntuneServiceConfiguration.xml" enthält die URLs zu den Cloud-Diensten, die sie z.B. in einem Proxy oder Firewall per Allowlisting durchlassen können und in "On-PremisesExchangeConnectorServiceConfiguration.xml" finden Sie dann auch die Daten zum Exchange Server, Site, Service Account und das verschlüsselte Kennwort. An diesen Dateien musste ich selbst bislang noch nichts ändern. Im Programmverzeichnis selbst gibt es aber noch eine CONFIG-Datei, in der eine Datenbank verlinkt ist:

Weitere Links