Rejestracje aplikacji w Azure (App Registrations) napędzają interfejsy API, automatyzację, potoki CI/CD, zadania w tle i integracje — a wiele z nich nadal opiera się na sekretach klienta.
Oto niewygodna prawda:
❌ Brak natywnych alertów
❌ Brak pulpitów nawigacyjnych
❌ Brak powiadomień o wygaśnięciu
Gdy sekret klienta wygaśnie, aplikacja przestaje działać po cichu — a zespoły zwykle odkrywają to dopiero po awarii.
Dlaczego to realne ryzyko operacyjne
Sekrety klienta:
- Zawsze mają daty wygaśnięcia
- Często są tworzone jednorazowo i zapominane
- Wygasają po cichu
Typowe skutki:
- Interfejsy API zwracają błędy uwierzytelniania
- Zadania w tle przestają działać
- Potoki automatyzacji przestają działać
- Procesy biznesowe zawodzą bez ostrzeżenia
Ponieważ Azure domyślnie nie wysyła alertów, staje się to powracającym problemem operacyjnym.
Dlaczego Azure nie wysyła alertów
Azure Monitor i Entra ID obecnie nie udostępniają:
- Natywnych alertów dotyczących wygasania sekretów rejestracji aplikacji
- Metryk, które można by podłączyć bezpośrednio do Azure Monitor
Portal Azure pokazuje daty wygaśnięcia — ale:
- Wymaga ręcznego sprawdzania
- Nie skaluje się na wiele dzierżaw (tenantów)
- Nikogo nie powiadamia
Jeśli chcesz proaktywnego monitorowania, musisz zbudować je samodzielnie.
Jak wygląda właściwe rozwiązanie
Niezawodne rozwiązanie monitorujące powinno:
- Bezpiecznie uwierzytelniać się (tylko aplikacja, w oparciu o certyfikat)
- Odpytywać wszystkie rejestracje aplikacji
- Oceniać wszystkie sekrety każdej aplikacji
- Klasyfikować je jako:
- Wygasłe
- Wkrótce wygasające (np. ≤30 dni)
- Prawidłowe
- Generować jeden przejrzysty zbiorczy alert
- Zawierać informacje umożliwiające działanie
Przegląd rozwiązania
Zalecane podejście wykorzystuje:
- Microsoft Graph PowerShell SDK (Azure AD Graph jest wycofywany)
- Uwierzytelnianie tylko aplikacji (w oparciu o certyfikat)
- PowerShell do automatyzacji i przenośności
- E-mail / Teams / logowanie do alertowania
Poniżej znajduje się oczyszczony przykład głównej logiki.
Szablon skryptu (przykład)
⚠️ To jest szablon — zastąp symbole zastępcze wartościami dla swojego środowiska.
#Requires -Modules Az.Accounts, Microsoft.Graph.Authentication, Microsoft.Graph.Applications
$WarningDays = 30
# Uwierzytelnienie w Microsoft Graph (tylko aplikacja, w oparciu o certyfikat)
Connect-MgGraph `
-TenantId "<TENANT-ID>" `
-ClientId "<APP-ID>" `
-CertificateThumbprint "<CERT-THUMBPRINT>"
$ExpiredSecrets = @()
$ExpiringSoon = @()
# Pobranie wszystkich rejestracji aplikacji z sekretami
$apps = Get-MgApplication -All -Property displayName,appId,passwordCredentials
foreach ($app in $apps) {
foreach ($cred in $app.PasswordCredentials) {
if (-not $cred.EndDateTime) { continue }
$end = [datetimeoffset]$cred.EndDateTime
$now = [datetimeoffset]::UtcNow
$days = ($end - $now).Days
if ($days -lt 0) {
$ExpiredSecrets += [pscustomobject]@{
Application = $app.DisplayName
AppId = $app.AppId
KeyId = $cred.KeyId
ExpiredDays = [math]::Abs($days)
EndDateUtc = $end.UtcDateTime
}
}
elseif ($days -le $WarningDays) {
$ExpiringSoon += [pscustomobject]@{
Application = $app.DisplayName
AppId = $app.AppId
KeyId = $cred.KeyId
DaysLeft = $days
EndDateUtc = $end.UtcDateTime
}
}
}
}
# Stąd możesz:
# - wysłać e-mail w formacie HTML
# - opublikować wiadomość w Teams / Slack
# - zapisać dane w Log Analytics
# - wyeksportować plik CSV na potrzeby audytu
Najlepsze praktyki alertowania
Z doświadczeń z rzeczywistych środowisk najlepiej sprawdzają się:
- Jeden zbiorczy alert na jedno uruchomienie (unikaj szumu)
- 30-dniowe okno ostrzegawcze
- Jasne przypisanie odpowiedzialności (nazwa aplikacji + AppId)
- Wynik umożliwiający działanie (co dokładnie trzeba odnowić)
Zalecenia dotyczące bezpieczeństwa
✔ Preferuj uwierzytelnianie oparte na certyfikatach
✔ Nigdy nie przechowuj sekretów w kodzie
✔ Usuwaj stare sekrety po rotacji
✔ Uruchamiaj kontrole codziennie lub co tydzień
✔ Traktuj rotację sekretów jako standardowe zadanie operacyjne
Najważniejszy wniosek
Wygaśnięcie sekretu klienta jest pewne, a nie przypadkiem granicznym.
Azure dostarcza elementy składowe — nie monitorowanie.
Łącząc:
- Microsoft Graph
- PowerShell
- Prostą logikę alertowania
możesz wyeliminować jedną z najczęstszych i najłatwiejszych do uniknięcia awarii w Azure i zamienić ją w przewidywalny, zarządzalny proces.