blog.icewolf.ch

Let's talk about IT!
posts - 1870, comments - 295, trackbacks - 0

My Links

Archives

Post Categories

icewolf

Monday, August 23, 2021

M365 neue Service Health und Communications API in Microsoft Graph

Hallo zusammen,

Mit der Nachricht MC275573 hat Microsoft im M365 Message Center angekündigt, dass die alte Service Health und Communication API per 17.12.2021 eingestellt wird und stattdessen die API über Graph benutzt werden kann.

Ich hatte mich mit der alten API https://manage.office.com bereits mal beschäftig gehabt.

Office 365 Service Communications API with Powershell
https://blog.icewolf.ch/archive/2018/01/11/office-365-service-communications-api-with-powershell.aspx

Die Infos zur neuen Graph API von Service Health und Communications findet man hier

Working with service communications API in Microsoft Graph
https://docs.microsoft.com/en-us/graph/api/resources/service-communications-api-overview?view=graph-rest-1.0

Die API bietet Informationen zu

  • Service Health (Dienststatus)
  • Issues (Vorfälle / Hinweise)
  • Messages (Nachrichtencenter)

Wie immer braucht es dazu eine Applikation im Azure AD mit folgenden Permissions

  • ServiceMessage.Read.All
  • ServiceHealth.Read.All

Für die Authentication gegenüber Azure AD nutze ich das PowerShell Module MSAL.PS

Import-Module MSAL.PS
$TenantId = "icewolfch.onmicrosoft.com"
$APPID = "29581967-458b-4c7a-a4f7-03fa440c0e13" #ServiceCommunications
$CertificateThumbprint = "3B42F63204F0F54F6E4CB9CF96E365513C913C2B"

#Roles = "ServiceHealth.Read.All", "ServiceMessage.Read.All"
$ClientCertificate = Get-Item Cert:\CurrentUser\My\$CertificateThumbprint
$Scope = "https://graph.microsoft.com/.default"
$Token = Get-MsalToken -clientID $AppID -ClientCertificate $ClientCertificate -tenantID $tenantID -Scope $Scope
$AccessToken = $Token.AccessToken
$AccessToken

Den JWT Token kann man sich mit https://jwt.ms/ decodieren. Man sieht die beiden Rollen sind zugewiesen.

Service Health Overview

#Healh Overview
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.Value

Service Health für einen bestimmten Service

#Healh Overview "Exchange Online"
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/Exchange Online"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result

Issues

#Issues
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.value
$result.value | where {$_.isResolved -ne $true}
$result.value | where {$_.Service -eq "Exchange Online" -AND $_.isResolved -ne $true}
$result.value | where {$_.status -ne "serviceRestored"}

Derselben Issue ist auch im Admin Center sichtbar

Nachrichtencenter

#Messages
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.value
$result.value | where {$_.Services -eq "Exchange Online"}
$Messages = $result.value | where {$_.Services -eq "Exchange Online"}
$messages[0]

Auch hier findet man die Nachricht im Nachrichtencenter

Fazit:

Der Zugriff auf das neue API ist eigentlich relativ einfach. Allerdings müssen bisherige Scripte umgebaut werden, da die API nicht mehr ganz gleich funktioniert wie die alte API. Es ist rasch Ende Jahr also so rasch wie möglich daran machen vorhandene Scripte zu aktualisieren

Grüsse
Andres Bohren

posted @ Tuesday, August 24, 2021 8:48 AM | Filed Under [ PowerShell Microsoft365 ]

Defender for Office 365 Advanced Hunting

Hallo zusammen,

Kürzlich wollte ich herausfinden wie oft ein bestimmte Dateiendung verwendet wird, bevor ich die Dateiendung in der Anti MalwareFilterPolicy sperre. Mit dem Threat Explorer konnte man dies jedoch nicht herausfinden.

Ich bin dann aber mit der erweiterten suche (advanced Hunting) erfolgreich gewesen. Hier reichen die "Exchange Administrator" Berechtigungen aus https://security.microsoft.com/advanced-hunting

Ein paar einfachere KQL Querys zum Anfangen

EmailAttachmentInfo | where FileName like '.docx' | summarize count()

oder
EmailAttachmentInfo | summarize count() by FileType
EmailAttachmentInfo | summarize count() by FileType | order by count_ | render barchart 

Es gibt aber auch komplexere Abfragen

let OfficeMacroFiles = dynamic([".docm",".dotm",".ppsm",".pptm",".potm",".xlam",".xlsm",".xltm",".xlw"]);
EmailAttachmentInfo | where FileName has_any (OfficeMacroFiles) | summarize count() by FileType | order by count_
oder
EmailAttachmentInfo
| summarize count () by bin(Timestamp, 1d), FileType
| render linechart 

Oder die Zustellung von Mails

EmailEvents
| where EmailDirection == "Inbound"
| summarize count () by bin(Timestamp, 1d), DeliveryAction
| render linechart 

Weitere Beispiele für Querys gibt es hier https://github.com/microsoft/Microsoft-365-Defender-Hunting-Queries

Liebe Grüsse
Andres Bohren

posted @ Monday, August 23, 2021 9:55 PM | Filed Under [ Exchange Microsoft365 ]

GitHub neues Format vom PersönlichenAccessToken

Hallo zusammen,

In GitHub wurden im Frühling das Authentication Token Format geändert https://github.blog/changelog/2021-03-04-authentication-token-format-updates/ 

Als ich mich kürzlich mit Visual Studio Code bei Github angemeldet habe, wurde mir folgendes Mail zugestellt.

Um einen Token im neuen Format zu erstellen geht man folgendermassen vor.

Anschliessend muss man sich nochmals anmelden

Nun kann man bestimmen, wie lange der Access Token gültig sein soll. Ich habe Custom ausgewählt und das Datum auf das Ende des Jahres festgelegt.

Der Personal Access Token wird nur einmal angezeigt. Stellt also sicher, dass ihr den Kopiert und an einem sicheren Ort wie einem Passwort Manager aufbewahrt.

Klonen vom Repository geht wie gewohnt

git clone <repository.git>
git clone https://github.com/BohrenAn/GitHub_PowerShellScripts.git

Anschliessend muss man dem Repo den Personal Access Token zuweisen

git remote set-url origin https://<Benutzername>:<PersonalAccessToken>@<gitrepo.git>

Grüsse
Andres Bohren

posted @ Monday, August 23, 2021 8:05 AM | Filed Under [ PowerShell ]

Powered by:
Powered By Subtext Powered By ASP.NET