Erkennung von Konfigurations-drift bei spokes¶
Nachdem ein spoke deployt wurde, hindert nichts seine Owner daran, die Baseline-Ressourcen zu ändern. Das ist so gewollt: Es hält die Rollen einfach und den spoke flexibel. Workload-Teams sollen die Baseline-Ressourcen des spoke canvas nicht ändern (Was du bekommst, Einschränkungen). Die pipeline für die spoke-drift-Erkennung zeigt, was trotzdem geändert wurde.
Sie funktioniert wie der wöchentliche drift-Check des hub (Wartungskalender), für jede spoke-Datei: Die pipeline plant jeden spoke und meldet, ob der Plan Ressourcen ändern will. Eine geplante Änderung bedeutet, dass Azure nicht mehr mit dem Code übereinstimmt.
Was sie erkennt
Die Erkennung ist begrenzt. Sie findet, was ein Terraform-Plan findet: eine Abweichung zwischen state und Code in den Baseline-Ressourcen des spoke canvas. Sie prüft nicht, was das Workload-Team zusätzlich zur Baseline im spoke deployt.
Herkunft dieser Seite
Die pipeline stammt aus dem spoke canvas früherer Versionen und ist eine Azure-DevOps-pipeline. Prüfe, ob deine Code-Version sie mitliefert, bevor du sie einrichtest. Die Datei- und Variablennamen unten sind die der Starter-Dateien und können in deiner Plattform abweichen.
Voraussetzungen: wohin die Berichte gehen¶
Die pipeline schreibt ihre Berichte in einen Storage Account. Wähle eine von zwei Optionen.
Option 1: der Storage Account eines spokes (bevorzugt)¶
Ein vollständig deployter spoke hat einen passenden Storage Account. Erstelle einen spoke für das Plattform-Team oder nimm einen bestehenden und
setze eine Gruppe der Personen, die die Berichte brauchen, als ProductTeamGroupNames in seiner spoke-Datei
(Spoke-JSON-Referenz). Dann, nach dem spoke-Deployment:
- Erstelle im Storage Account einen Container, zum Beispiel
driftdetection. - Gib der Gruppe
Readersdes Spokes die Rolle Storage Blob Data Reader auf dem Storage Account, damit sie die Dateien lesen kann. Wenn mehr Personen Zugriff brauchen, erstelle eine Gruppe für sie und gib dieser Gruppe die Rolle. - Prüfe den Netzwerkzugriff des Storage Accounts. Er ist normalerweise auf seinen Private Endpoint beschränkt. Du musst ihn eventuell so anpassen, dass die Leser ihn erreichen können, wofür wiederum eine Policy-Ausnahme nötig sein kann.
Option 2: ein anderer Storage Account¶
Verwende einen normalen Storage Account (kein Data Lake, kein hierarchischer Namespace):
- Erstelle einen Container, zum Beispiel
driftdetection. - Stelle sicher, dass die Deployment-Agents den Storage Account erreichen, direkt oder, besser, über einen Private Endpoint.
- Gib dem Service Principal des spoke-Deployments darauf die Rolle Storage Blob Data Contributor.
Die pipeline erstellen¶
Die pipeline-Datei gehört zum Konfigurations-Repository der spokes (Starter-Name SpokeConfigurationDriftReporter.yaml
im Ordner pipelines).
- Erstelle im Azure-DevOps-Projekt eine neue pipeline aus einer bestehenden YAML-Datei im Konfigurations-Repository, Branch
mainund dem Pfad dieser Datei. Speichere sie, ohne sie auszuführen. - Benenne sie um, zum Beispiel
Spoke Configuration-drift Detection. -
Setze den Agent-Pool in der Datei auf den Pool, den du verwendest:
pool: <agent-pool> -
Erstelle die unten beschriebene Variable Library.
- Führe die pipeline einmal von Hand aus. Azure DevOps fragt nach der Erlaubnis, den Pool und die Library zu verwenden. Ein geplanter Lauf kann das nicht erfragen und schlägt deshalb fehl, bis der erste manuelle Lauf genehmigt ist.
Variable Library¶
Die pipeline liest den Storage Account und den Container aus einer Variable Group. Die Starter-pipeline erwartet den Namen
xms-spoke-driftdetection.
| Key | Wert |
|---|---|
DriftDetectionStorageAccountName |
Der exakte Name des Storage Accounts. Kleinbuchstaben, keine Leerzeichen am Anfang oder Ende. |
DriftDetectionStorageContainerName |
Der Container. Vorschlag: driftdetection. Dieselben Regeln. |
Zeitplan¶
Der Zeitplan steht in der pipeline-Datei:
schedules:
- cron: "<minutes> <hours> <days> <months> <days-of-week>"
| Feld | Bereich |
|---|---|
| minutes | 0 bis 59 |
| hours | 0 bis 23 |
| days | 1 bis 31 |
| months | 1 bis 12 (Namen werden auch akzeptiert) |
| days of week | 0 bis 6, wobei 0 Sonntag ist (Namen werden auch akzeptiert) |
* bedeutet jeder Wert. Azure DevOps wertet die Zeit in UTC aus. Führe sie mindestens wöchentlich aus, passend zum
Wartungskalender.
Einen Bericht abrufen¶
Jeder Lauf speichert den Bericht zweimal im Container:
| Verwendung | Name |
|---|---|
| Historie: ein eindeutiger Name pro Lauf | ConfigurationDriftReport_<yyyy-MM-dd HHmm>.json |
| Automatisierung: immer der neueste Bericht | ConfigurationDriftReport_lastest.json (in der Quelle so geschrieben) |
Um einen zu lesen, öffne den Storage Account im Azure-Portal, dann Storage browser, Blob containers und den Container
driftdetection. Du brauchst die Rolle Storage Blob Data Reader. Automatisierung kann die Datei latest lesen.
Auf einen Bericht reagieren¶
Für jeden spoke im Bericht, der Änderungen zeigt:
- Finde heraus, wer was geändert hat (Azure Activity Log) und warum.
- Wenn die Änderung nötig ist, bring sie in den Code: eine spoke-Änderung.
- Wenn nicht, führe das spoke-Deployment aus, das sie zurücksetzt (Spoke-Deployment).
- Nimm die Anzahl der spokes mit drift in den monatlichen Health Check auf.