Cel: zapewnić, że klucze odzyskiwania BitLocker trafią do Active Directory Domain Services (AD DS), a szyfrowanie nie uruchomi się, jeśli zapis do AD się nie powiedzie. Dodatkowo — dosłać klucze z już zaszyfrowanych komputerów przez zadanie Harmonogramu (GPP).
Architektura rozwiązania
- Polityki BitLocker w GPO (Computer Configuration)
- Wymuszają zapis recovery key do AD DS i blokują start szyfrowania, gdy escrow się nie uda.
- Zadanie Harmonogramu (Group Policy Preferences)
- Na starcie systemu uruchamia skrypt PowerShell jako SYSTEM, który dosyła (backupuje) istniejące klucze do AD DS.
- Przegląd kluczy w AD
- ADUC z funkcją BitLocker Recovery Password Viewer (RSAT) — karta BitLocker Recovery na obiekcie komputera.
1) Wymuszenie escrow do AD DS (nowe szyfrowania)
W GPO powiązanym z OU komputerów:
Operating System DrivesComputer Configuration → Administrative Templates → Windows Components → BitLocker Drive Encryption → Operating System Drives
- Choose how BitLocker-protected operating system drives can be recovered → Enabled
- ✅ Save BitLocker recovery information to AD DS…
- ✅ Do not enable BitLocker until recovery information is stored to AD DS…
- (opcjonalnie) ✅ Store recovery passwords and key packages
Fixed Data Drives / Removable Data Drives – analogicznie jak wyżej.
TPM:Computer Configuration → Administrative Templates → System → Trusted Platform Module Services
- Turn on TPM backup to Active Directory Domain Services → Enabled
Dzięki temu nowe wdrożenia BitLockera zawsze zapiszą klucze w AD, albo w ogóle nie wystartują.
2) Dosyłka kluczy z już zaszyfrowanych stacji (Harmonogram)
2.1. Skrypt w SYSVOL
Umieść plik PS1 (na bazie Twoich ustaleń) w:\\serwer2022.plcall.local\SYSVOL\plcall.local\scripts\kopiakluczybitlocker.ps1
Proponowana, odporna wersja z logowaniem i obsługą wielu wolumenów:
# kopiakluczybitlocker.ps1
$ErrorActionPreference = 'Stop'
$LogRoot = "$env:ProgramData\BitLockerEscrow"
New-Item -ItemType Directory -Path $LogRoot -Force | Out-Null
$LogFile = Join-Path $LogRoot "escrow-$(Get-Date -Format yyyyMMdd).log"
function Write-Log($msg) {
Add-Content -Path $LogFile -Value "$(Get-Date -Format s) $msg"
}
try {
$vols = Get-BitLockerVolume
foreach ($v in $vols) {
if ($v.ProtectionStatus -ne 'On') { continue }
# Upewnij się, że istnieje RecoveryPassword
$rps = @($v.KeyProtector | Where-Object { $_.KeyProtectorType -eq 'RecoveryPassword' })
if ($rps.Count -eq 0) {
$rp = Add-BitLockerKeyProtector -MountPoint $v.MountPoint -RecoveryPasswordProtector
Write-Log "Dodano RecoveryPassword dla $($v.MountPoint): $($rp.RecoveryPassword)"
$rps = @($rp.KeyProtector)
}
foreach ($kp in $rps) {
try {
Backup-BitLockerKeyProtector -MountPoint $v.MountPoint -KeyProtectorId $kp.KeyProtectorId -ErrorAction Stop
Write-Log "OK: $($v.MountPoint) → $($kp.KeyProtectorId)"
} catch {
Write-Log "ERROR: $($v.MountPoint) → $($kp.KeyProtectorId) : $($_.Exception.Message)"
}
}
}
} catch {
Write-Log "FATAL: $($_.Exception.Message)"
exit 1
}
2.2. Zadanie Harmonogramu przez GPP
W tym samym GPO:Computer Configuration → Preferences → Control Panel Settings → Scheduled Tasks → New → Scheduled Task (Windows 7 or later)
- Name: BitLocker Escrow to AD
- Security options:Run whether user is logged on or not
- ✅ Run with highest privileges
- User:
SYSTEM
- Triggers: At startup (opcjonalnie Delay task: 2 minutes)
- Actions:Start a program
- Program/script:
powershell.exe - Arguments:
-NoProfile -ExecutionPolicy Bypass -File "\\serwer2022.plcall.local\SYSVOL\plcall.local\scripts\kopiakluczybitlocker.ps1"
- Program/script:
- Common → (opcjonalnie) Item-level targeting (wybrane grupy/OU, pilotaż).
Nie musisz zmieniać polityki ExecutionPolicy w domenie — przekazujemy Bypass tylko temu zadaniu.
3) Testy i walidacja
- Na kilku stacjach pilotażowych:
gpupdate /force→ restart. - Po starcie sprawdź log lokalny:
C:\ProgramData\BitLockerEscrow\escrow-YYYYMMDD.log. - W Active Directory Users and Computers włącz View → Advanced Features, otwórz obiekt komputera → karta BitLocker Recovery (powinna pojawić się 48-cyfrowa fraza).
- (Opcja) PowerShell z serwera:
$dn = (Get-ADComputer NAZWA-KOMPUTERA).DistinguishedName Get-ADObject -LDAPFilter "(objectClass=msFVE-RecoveryInformation)" -SearchBase $dn -Properties msFVE-RecoveryPassword | Select-Object msFVE-RecoveryPassword
4) Najczęstsze problemy (checklista)
- Brak karty BitLocker Recovery w ADUC → doinstaluj BitLocker Recovery Password Viewer (RSAT).
- Maszyny nie dosyłają kluczy → sprawdź łączność do DC, replikację, czas systemowy, prawa konta komputera (domyślnie ma).
- Brak RecoveryPassword → skrypt sam doda protektor i wykona backup.
- Konflikt z polityką → upewnij się, że polityki BitLocker są na poziomie Computer i efektywnie obowiązują (RSOP).