Secret watcher: bewaking van verlopende secrets¶
Een verlopen secret is een veelvoorkomende oorzaak van een falende pipeline of applicatie. De secret watcher is een geplande check die kijkt naar de secrets van de app registrations waar het platform van afhangt, en een alert afgeeft voordat ze verlopen. Deze pagina beschrijft het patroon en wat je moet configureren. De terugkerende taak eromheen staat in de onderhoudskalender.
Wat hij bewaakt¶
| Onderdeel | Voorbeelden |
|---|---|
| Deploymentidentiteiten van het platform | De service principals in mcp.json die de pipelines gebruiken (Operationele verantwoordelijkheden) |
| Service principals van spokes | Eén per spoke (Spoke wijzigen) |
| Andere app registrations van het platformteam | Alles wat in de mapping hieronder staat |
De check leest de client secrets (password credentials) van elke genoemde app registration. In de hier beschreven versie leest hij geen certificaten of federated credentials. Federated credentials hebben geen secret dat kan verlopen, en dat is één reden om ze te verkiezen (Secrets van app registrations).
Hoe het werkt¶
flowchart LR
s["Schedule<br/>(weekly)"] --> p["Pipeline loops<br/>over tenants"]
p --> sc["Script"]
sc -- "read-only Graph access" --> e["Entra ID<br/>app registrations"]
sc -- "alert" --> o["On-call / incident tool"]
- Een pipeline draait volgens een schedule. In het voorbeeld draait hij wekelijks, op maandagochtend.
- De pipeline loopt over alle tenants in scope en draait het script één keer per tenant.
- Het script meldt zich in die tenant aan bij Microsoft Graph als reader service principal (client credentials).
- Het zoekt de app registrations op die voor de tenant in een mappingbestand staan, en leest hun secrets.
- Voor elk secret berekent het de resterende tijd en stuurt het een alert naar de on-call tool als het secret bijna verloopt.
Drempels in het voorbeeld¶
| Resterende tijd | Ernst van de alert | Bericht |
|---|---|---|
| 30 dagen of meer | Geen | |
| Minder dan 30 dagen | Info | Het secret verloopt binnen 30 dagen |
| Minder dan 3 dagen | Critical | Urgent: het secret verloopt over <days, hours> |
| Al verlopen | Critical | Urgent: het secret is al verlopen |
Kies je eigen drempels. Ze moeten de owner genoeg tijd geven om te roteren, inclusief de tijd om goedkeuring aan te vragen en de pipeline te draaien. Een wekelijkse check met een eerste waarschuwing op 30 dagen geeft ongeveer vier kansen om in te grijpen.
Wat je nodig hebt¶
| Onderdeel | Opmerkingen |
|---|---|
| Een reader service principal per tenant | Recht om app registrations te lezen (de Microsoft Graph application permission Application.Read.All). Geef hem niet meer dan dat |
| Een mappingbestand | Per tenant: de tenant-ID, een naam en de lijst van app-ID's (client-ID's) die bewaakt worden. Voorbeeld hieronder |
| Een veilige opslag voor de credentials | Bijvoorbeeld een pipeline variable group of een key vault. De pipeline leest per tenant de client-ID, het secret en de tenant-ID |
| Een integration key van de on-call tool | De alert wordt als event naar de tool gestuurd (zie Monitoring uitrollen) |
| Een pipeline met een schedule | Loopt over de tenants en roept het script aan |
Voorbeeld van het mappingbestand, met placeholders:
{
"customers": [
{
"tenant_id": "<tenant-id>",
"name": "<organisation name>",
"spn_ids": [
"<app-id-1>",
"<app-id-2>"
]
}
]
}
De reader service principal heeft ook een secret
De identiteit die de secrets bewaakt, heeft zelf ook een secret dat verloopt. Zet hem op dezelfde lijst en roteer hem volgens een vast schema. Krijg je geen recht om de app registrations in een tenant te lezen, dan kun je die tenant niet bewaken: zet de secrets van die tenant dan op een handmatige lijst in de maandelijkse healthcheck.
Een tenant toevoegen of wijzigen¶
| Stap | Een tenant toevoegen | Een tenant wijzigen |
|---|---|---|
| 1 | Maak de reader service principal in de tenant en geef hem leestoegang tot app registrations | Werk de entry in het mappingbestand bij (nieuwe of verwijderde app-ID's) |
| 2 | Voeg de entry toe aan het mappingbestand | Controleer of de credentials in de veilige opslag actueel zijn |
| 3 | Sla de credentials van de reader op in de veilige opslag | Controleer of het script de entry nog steeds verwerkt |
| 4 | Voeg de tenant met zijn credentials toe aan de lijst met tenants in de pipeline | Controleer de pipelineparameters |
| 5 | Draai de pipeline één keer en controleer dat de tenant wordt gelezen en dat een testsecret dat bijna verloopt een alert zou geven |
Wanneer er een alert binnenkomt¶
- Zoek de owner van de app registration. Voor platformidentiteiten is dat het platformteam. Voor een applicatieregistratie die bij een workload hoort, is het het workload team (Onderhoudskalender).
- Roteer het secret, of vervang het door een federated credential als de service dat ondersteunt.
- Gebruik voor een deploymentidentiteit van het platform de rotatieprocedure van het platform (de
update-spnpipeline slaat een nieuw secret op in de hub Key Vault, zie Pipelines en workflows). - Leg de rotatie vast in het wijzigingsrecord en controleer de volgende run van de pipeline die het secret gebruikt.
- Verwijder registraties die niemand beheert na een aankondigingsperiode.
Beperkingen¶
- Hij bewaakt alleen de app registrations in het mappingbestand. Een nieuwe app registration is onzichtbaar tot iemand hem toevoegt.
- Hij leest alleen client secrets, geen certificaten (bijvoorbeeld Application Gateway-certificaten in Key Vault).
- Het is een check, geen rotatie. Iemand moet nog steeds op de alert reageren.