Das Problem

Im Rahmen des Betriebs ist die Datensicherung ein wichtiger Aspekt. In den meisten Fällen werden die im Azure AD gespeicherten Bitlocker Wiederherstellungs Schlüssel nicht durch eine Datensicherung erfasst. Neben diesem Grund kann es außerdem erforderlich sein die Schlüssel in der Vorbereitung auf die Migration in einen neuen M365 Tenant zu sichern.

Der Lösungsweg

Das Abrufen der Widerherstellungsschlüssel ist über das Microsoft Graph API möglich. Der einfachste Weg zur Verwendung des Graph API ist das Powershell SDK für die Graph API. Bei der Verbindung ist es wichtig die korrekten Scopes zu verwenden, damit das bei der Anmeldung erzeugte Token auch die richtigen Berechtigungen enthält. Benötigt wird speziell der Scope BitlockerKey.Read.All um die Recovery Keys abrufen zu können.

1
2
Import-Module Microsoft.Graph.Identity.SignIns
Connect-MgGraph -Scopes BitlockerKey.Read.All

Dem für die Anmeldung verwendete Nutzerkonto muss eine der folgenden Rollen zugewiesen sein. Ist keine dieser Rollen zugewiesen kann der angemeldete Nutzer nur die Schlüssel seiner eigenen Geräte abrufen.

  • Cloud device administrator
  • Helpdesk administrator
  • Intune service administrator
  • Security administrator
  • Security reader
  • Global reader

Die Liste aller Bitlocker Schlüssel kann mit dem folgenden Kommando abgerufen werden:

1
Get-MgInformationProtectionBitlockerRecoveryKey -All -Property Key

Allerdings sind die eingentlichen Schlüssel in dem Ergebnis der Liste nicht enthalten:

1
2
3
4
5
6
 Id                                   Key
--                                   ---
4cfedf91-d3eb-44a3-9672-554ca2003762    
304b831a-f382-4ce5-9693-f44a6fc6303b    
2420254e-138a-49f3-b6bc-c141d0723f6f    
46cbf220-632c-4a99-b614-e64027fe39da    

Das Abrufen aller Bitlocker Recovery Keys ist mit einem Kommando also nicht möglich, da dieser keine Werte für den eigentlichen Schlüssel zurückliefert. Der Abruf eines einzelnen Schlüssels mit ist jedoch ohne Probleme möglich.
1
Get-MgInformationProtectionBitlockerRecoveryKey  -BitlockerRecoveryKeyId 4cfedf91-d3eb-44a3-9672-554ca2003762 -Property Key | fl

Ein möglicher Ansatz das Problem zu umgehen ist, das Abrufen aller Schlüssel in einer Schleife durchzuführen und die Ergebnisse anschließend in einer Datei zur späteren Verwendung zu speichern. Dieser Vorgang kann für ca. 2.000 Schlüssel in etwa 15 Minuten dauern.

Das Skript

Das nachfolgende Skript ruft alle vorhandenen Bitlocker Keys ab und speichert diese anschließend in einer JSON-Datei. Hier ist darauf zu achten diese Datei sehr sorgsam zu behandeln, da alle Keys darin enthalten sind!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Import-Module Microsoft.Graph.Identity.SignIns
Connect-MgGraph -Scopes BitlockerKey.Read.All
$bitlockerkeys = Get-MgInformationProtectionBitlockerRecoveryKey -All
$keys = New-Object System.Collections.ArrayList
foreach ($key in $bitlockerkeys)
{
    Write-Output "Processing key $($key.id)..."
    $key_value = Get-MgInformationProtectionBitlockerRecoveryKey  -BitlockerRecoveryKeyId $key.Id -Property Key
    $keys.Add($key_value)
}
$keys | ConvertTo-Json | Out-File -FilePath <pfad>\bitlocker.json

Erforderliche API permissions: https://learn.microsoft.com/en-us/graph/api/bitlockerrecoverykey-get?view=graph-rest-1.0&tabs=http#permissions Powershell Command - Get-MgInformationProtectionBitlockerRecoveryKey: https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.signins/get-mginformationprotectionbitlockerrecoverykey?view=graph-powershell-1.0