Zum Jahresende stehe ich in mehreren Tenants regelmäßig vor demselben Problem. Die Abrechnungssaison rückt näher, die Budgets fürs neue Jahr müssen geplant werden, und verwaiste Azure-Ressourcen treiben die Kosten ohne jeden Nutzen in die Höhe. Wer nicht regelmäßig aufräumt, schleppt nach einigen Monaten eine Menge Altlasten mit sich herum. Dazu gehören gestoppte, aber weiterhin bezahlte Managed Disks, ungenutzte öffentliche IP-Adressen, leere Resource Groups, verwaiste Netzwerkschnittstellen und Snapshots, die längst niemand mehr braucht. Ich weiß aus eigener Erfahrung, dass solche „Karteileichen“ dem Finanzteam ein Dorn im Auge sind und obendrein Risiken für Governance und Sicherheit mit sich bringen.

Bestimmte Ressourcentypen bleiben besonders häufig verwaist zurück

In vielen Projekten treffe ich auf dieselben Fälle. Nach dem Löschen einer VM bleiben die Disks liegen, nach einem IP-Wechsel existiert die alte Public IP weiter, und manche App Service Plans laufen ganz ohne Apps. Ebenfalls ein Klassiker sind leere Resource Groups: Die Ressourcen darin wurden entfernt, der Container selbst ist geblieben. Für ein gezieltes Aufräumen sollte man systematisch nach diesen Ressourcenarten suchen:

  • Managed Disks mit diskState == "Unattached"
  • Public IPs ohne Zuordnung
  • Leere Resource Groups
  • Netzwerkschnittstellen (NICs) ohne verbundenes Gerät
  • Snapshots, die nicht mehr genutzt werden
  • App Service Plans ohne zugeordnete Web Apps

Vor allem Managed Disks und Public IPs schlagen sich schnell spürbar in der Monatsrechnung nieder. Wer sie regelmäßig inventarisiert, erlebt bei der Abrechnung keine bösen Überraschungen.

Der Resource Graph Explorer findet Altlasten im gesamten Tenant

Mit dem Resource Graph Explorer steht im Azure-Portal ein leistungsfähiges Werkzeug bereit, um solche Altlasten tenantweit aufzuspüren. Über KQL-Abfragen findet man verwaiste Ressourcen sehr effizient. Alle verwaisten Managed Disks liefert zum Beispiel diese Abfrage (Azure-Portal → Resource Graph Explorer; Rolle: mind. Reader):

Resources
| where type == "microsoft.compute/disks"
| where properties.diskState == "Unattached"
| project name, resourceGroup, location, sku, properties.diskSizeGb

Das Ergebnis listet jede Disk auf, die an keine VM mehr gebunden ist, jeweils mit Name, Resource Group, Standort und Größe. Nach demselben Muster lassen sich mit passenden Filtern auch Public IPs (microsoft.network/publicipaddresses mit leerem ipConfiguration.id) oder NICs ohne VM (microsoft.network/networkinterfaces mit leerem virtualMachine.id) ermitteln. Für den Einstieg eignen sich die Übersicht zu Resource Graph und die fertigen Beispiele in der offiziellen Dokumentation.

Praxistipp: Häufig genutzte Abfragen speichere ich als Favorit oder binde sie in ein Azure Workbook ein. Beim nächsten Frühjahrsputz spart das einiges an Zeit.

Azure Advisor liefert eine erste Liste mit Kostenempfehlungen

Zusätzlich zum Resource Graph lohnt sich immer ein Blick in den Azure Advisor (Azure-Portal → Advisor → Kosten). Er analysiert die Umgebung und schlägt konkrete Optimierungen vor, unter anderem das Entfernen ungenutzter Ressourcen wie verwaister Disks, nicht zugewiesener IPs oder alter Snapshots. Die Kostenempfehlungen (Cost Recommendations) taugen oft gut als Grundlage für eine erste Aufräumrunde. Allerdings erkennt der Advisor nicht jeden Fall automatisch, und in größeren Umgebungen bleibt damit ein Teil des Einsparpotenzials ungenutzt.

Eigentümer-Tags verhindern neue Karteileichen

In Gesprächen mit Kunden komme ich oft auf die Frage zurück, wie man verwaiste Ressourcen dauerhaft vermeidet. Werden Tags für Verantwortlichkeiten (z. B. Owner, Projekt, Kostenstelle) konsequent gepflegt, lassen sich Altlasten viel leichter zuordnen und mit gutem Grund löschen. In vielen Tenants gehört ein solches Tagging inzwischen fest zur Governance der Landing Zone. Welche Vorteile das bringt und wo die Stolperfallen liegen, habe ich im Beitrag zum Aufbau einer Azure Landing Zone mit Verwaltungsgruppen und Policy beschrieben. Wer schon beim Anlegen auf saubere Tags achtet und sie regelmäßig kontrolliert, muss beim Aufräumen kaum noch recherchieren. Für das Reporting im Kostenmanagement sind eindeutige Tags ohnehin Gold wert, weshalb sie auch im Beitrag über Budgets, Tags und Advisor zur Kostenkontrolle in Azure breiten Raum einnehmen.

Ein Löschprozess mit Schonfrist schützt vor Fehllöschungen

Sind die verwaisten Ressourcen gefunden, heißt es trotzdem vorsichtig sein. Nicht jede Disk oder IP, die verwaist aussieht, ist tatsächlich entbehrlich, denn manchmal hängen Prozesse, Backups oder Ausnahmen daran. Bewährt hat sich bei mir ein zweistufiger Löschprozess:

flowchart TD
    Finde["Ressourcen finden"] --> Markiere["Mit Tag 'ToDelete' markieren"]
    Markiere --> Info["Eigentümer informieren"]
    Info --> Frist["7 Tage Frist"]
    Frist --> Loesche["Ressourcen löschen"]

Abbildung: Empfohlener Löschprozess für verwaiste Ressourcen mit Review und Schonfrist.

Zuerst bekommen die betroffenen Ressourcen ein Tag wie ToDelete, danach informiere ich die Verantwortlichen. Erst wenn die vereinbarte Frist (z. B. 7 Tage) abgelaufen ist, wird endgültig gelöscht. Auf diese Weise passieren keine Fehllöschungen, und das Team bleibt eingebunden. Bei kritischen Ressourcen empfiehlt sich außerdem ein Freigabeverfahren.

Aufräumen bleibt in jeder Cloud-Umgebung eine Daueraufgabe

Verwaiste Azure-Ressourcen tauchen nicht einmalig auf, sie gehören zum Alltag jeder Cloud-Organisation. Wer regelmäßig prüft, sauber taggt und Werkzeuge wie Resource Graph Explorer, Advisor und Workbooks einsetzt, hat die Kosten im Griff und sorgt gleichzeitig für mehr Sicherheit und Übersicht in der eigenen Umgebung. Zum Jahreswechsel ist das die beste Grundlage für ein effizientes Cloud-Budget, und dem nächsten Audit kann man deutlich gelassener entgegensehen.