Zugangsdaten aus dem Code fernhalten - Ein praktischer Leitfaden zu 1Password und Vault
Das Problem: Fest codierte Zugangsdaten Jeder Entwickler hat diese Versuchung schon erlebt: Sie müssen schnell etwas testen, also codieren Sie einen

Wie Claude Sonnet 4.5 und GitHub Copilot uns durch das Labyrinth von Custom-Backstage-Integrationen geholfen haben
Spotifys Backstage-Plattform verspricht eine schöne Vision: ein einheitliches Developer-Portal, in dem Teams Services entdecken, Ressourcen aus Templates erstellen und ihre gesamte Infrastruktur über ein einziges Interface verwalten können. Die Dokumentation ist umfassend, die Community lebendig und die Screenshots sehen fantastisch aus.
Dann versuchst du es tatsächlich für deinen spezifischen Use Case zu implementieren.
Plötzlich steckst du tief in YAML-Konfigurationen, debuggst GitHub-Action-Parameter, kämpfst mit ArgoCD-Sync-Policies und fragst dich, warum deine Crossplane-Ressourcen nicht erstellt werden. Der "einfach dem Quickstart folgen"-Ansatz funktioniert perfekt... bis er es nicht mehr tut. Und wenn er es nicht tut, bist du auf dich allein gestellt, setzt Stack-Overflow-Posts, GitHub-Issues und Dokumentation zusammen, die davon ausgeht, dass du schon weißt, was du tust.
Hier wird es mühsam.
Nicht weil Backstage schlecht designed ist – ganz im Gegenteil. Es ist unglaublich flexibel und mächtig. Aber diese Flexibilität bedeutet, dass fertige Lösungen selten genau zu deinem Use Case passen. Du musst verstehen:
Und ehrlich gesagt? Manchmal möchte man einfach nur die Sache bauen, ohne Experte für jede Technologie im eigenen Stack zu werden.
Das hat sich geändert, als wir KI in den Entwicklungsprozess einbrachten:
Traditionelle Entwicklung läuft oft so ab:
KI-gestützte Entwicklung ändert den Workflow:
Der Hauptunterschied? Man verbringt weniger Zeit mit Suchen und mehr Zeit mit Validieren. Die KI wird zu einem kompetenten Pair-Programmer, der sich alles über dein Projekt merkt.
Lass mich erzählen, was passiert ist, als wir versuchten, Backstage mit Crossplane und ArgoCD zu integrieren. Das war kein Tutorial-Szenario – das war echte Arbeit mit echten Frustrationen.
Die Anfrage: "Lass Backstage-Templates Crossplane-Ressourcen erstellen und lokal speichern."
Einfach genug, oder? Ein Template erstellen, etwas YAML generieren, auf Disk speichern. Klassischer Backstage-Scaffolder-Use-Case.
Die Realität: Backstages Scaffolder läuft in einem sandboxed temporären Verzeichnis. Deine Dateien existieren etwa 3 Sekunden, bevor sie gelöscht werden. Die Dokumentation erwähnt das nebenbei, aber man realisiert die Implikationen erst, nachdem man eine Stunde damit verbracht hat, sich zu fragen, warum die Dateien verschwinden.
Traditioneller Ansatz:
KI-gestützter Ansatz:
User: "Die Dateien werden erstellt, verschwinden aber. Warum?"
KI: "Backstages Scaffolder nutzt temporäre Verzeichnisse, die nach der Ausführung aufgeräumt werden. Für Persistenz hast du drei Optionen:
Bei deinem Crossplane-Use-Case ermöglicht Option 1 GitOps-Patterns mit ArgoCD. Möchtest du das erkunden?"
Boom. Wir sind von einem toten Ansatz zu einer richtigen GitOps-Architektur in einem einzigen Austausch geschwenkt. Kein Googeln, kein Zusammensetzen von Stack-Overflow-Antworten, kein Durchlesen von 50-seitigen Design-Docs.
Jetzt mussten wir Dateien in ein bestehendes GitHub-Repository pushen. Wie schwer kann das sein?
Die Realität: Backstage hat DREI verschiedene GitHub-bezogene Actions:
publish:github - Erstellt nur NEUE Repositoriesgithub:repo:push - Pusht zu bestehenden Repos (aber mit Einschränkungen)publish:github:pull-request - Erstellt Pull RequestsJede hat unterschiedliche Parameter. Dokumentation existiert, ist aber verstreut. Beispiele sind oft veraltet.
Was tatsächlich passierte:
Versuch 1: publish:github verwendet
1steps:
2 - id: publish
3 action: publish:github
4 input:
5 repoUrl: github.com?owner=me&repo=my-existing-repo
Ergebnis: Fehler: "Repository already exists" Verlorene Zeit: 15 Minuten
Versuch 2: Zu github:repo:push mit force-Parameter gewechselt
1steps:
2 - id: push
3 action: github:repo:push
4 input:
5 force: true # In einem GitHub-Issue gefunden
Ergebnis: Fehler: "force is not a valid parameter" Verlorene Zeit: 20 Minuten
Versuch 3: Dokumentation recherchiert, korrekte Action gefunden
1steps:
2 - id: pr
3 action: publish:github:pull-request
4 input:
5 repoUrl: github.com?owner=me&repo=my-repo
6 branchName: add-resource
Ergebnis: Es funktionierte! Aber erst nachdem das offizielle Backstage-GitHub-Repo geprüft wurde Verlorene Zeit: Weitere 20 Minuten
Insgesamt verschwendete Zeit: Fast eine Stunde Trial-and-Error
Was hätte passieren sollen:
User: "Ich muss Dateien in ein bestehendes GitHub-Repository pushen."
KI: Durchsucht Backstage-Dokumentation "Für bestehende Repositories nutze publish:github:pull-request. Das erstellt einen PR, was besser für GitOps-Workflows ist. Hier ist die Konfiguration:
[exakte YAML-Konfiguration]
Die publish:github-Action erstellt nur NEUE Repos, und github:repo:push benötigt Fast-Forward-Merges, was für deinen Use Case nicht funktioniert."
Hier glänzt KI: Sie kann schnell Dokumentation parsen, Kontext verstehen und die spezifische Lösung für dein exaktes Szenario liefern.
Unsere Templates generierten zwei Dateien:
xnamespace.yaml - Die eigentliche Crossplane-Ressourcecatalog-info.yaml - Backstages Catalog-EintragWir pushten beide zu GitHub. ArgoCD überwachte das Repo und synchronisierte Änderungen zu Kubernetes.
Das Problem: ArgoCD versuchte, catalog-info.yaml auf Kubernetes anzuwenden. Kubernetes sagte "Was ist dieses backstage.io/Component-Ding?" und lehnte es ab.
Traditionelles Debugging:
Verlorene Zeit: 30-40 Minuten
KI-gestütztes Debugging:
User: "ArgoCD schlägt fehl mit 'could not find backstage.io/Resource'"
KI: "Das ist eine Backstage-Catalog-Entity, keine Kubernetes-Ressource. ArgoCD versucht, sie auf deinen Cluster anzuwenden. Du musst catalog-info.yaml-Dateien vom ArgoCD-Sync ausschließen:
source:
directory:
exclude: 'catalog-info.yaml'
Das sagt ArgoCD, alles AUSSER Backstage-Catalog-Einträge zu synchronisieren."
Zeit gespart: Problem und Lösung sofort verstanden.
Das hat die Arbeit mit KI grundlegend anders gemacht:
Wir arbeiteten mit:
Das sind SECHS verschiedene Technologien, jede mit eigenem Mental-Modell, Terminologie und Fallstricken.
Traditioneller Ansatz: Du musst konstant den Kontext wechseln:
KI-gestützt: Das Modell behält den Kontext über ALLE diese Systeme:
User: "Der GitHub-Push funktionierte, aber ArgoCD synchronisiert nicht."
KI: "Lass mich prüfen:
Du musst ein Secret im argocd-Namespace mit dem Label 'argocd.argoproj.io/secret-type=repository' erstellen, das deinen Token enthält."
Die KI wechselt nicht den Kontext - sie sieht das gesamte System.
Als wir schließlich fragten "Was ist mit Zertifikaten und RBAC für frische Cluster?", erkannte die KI sofort:
Es ging nicht darum, Backstage speziell zu kennen - es ging um das Verständnis von Patterns:
Das kann man nicht googeln. Es steht in keinem einzelnen Dokument. Es ist die akkumulierte Weisheit, mit diesen Patterns gearbeitet zu haben.
Am Ende unserer Session erstellten wir ein Automatisierungsskript. Zunächst:
Aber dann die Frage: "Was ist mit frischen Cluster-Anforderungen?"
Traditioneller Ansatz: Du würdest deployen, Fehler antreffen, dann debuggen:
$ ./setup.sh
[cluster created]
[crossplane installed]
[resources applied]
[tests run]
ERROR: Crossplane provider can't create namespace
[20 Minuten Debugging]
Ah, RBAC-Permissions!
KI-gestützter Ansatz:
KI: "Für frische Cluster benötigen wir:
Lass mich Funktionen hinzufügen, die das automatisch handhaben."
Die KI antizipierte Probleme basierend auf dem Verständnis der Systemarchitektur, nicht nur der unmittelbaren Anforderungen.
Nach Abschluss des Projekts bat ich die KI, zu reflektieren, was gut lief und was nicht. Die Ergebnisse waren... überraschend aufschlussreich.
Adaptive Problemlösung: Als lokale Speicherung scheiterte, schwenkten wir zu GitOps, ohne Momentum zu verlieren. Das ist, wo KI glänzt - sie ist nicht emotional in die erste Lösung investiert.
Umfassende Dokumentation: Wir erstellten 6 detaillierte Guides, während wir Probleme lösten. Die KI dokumentierte nicht nur "wie", sondern "warum", erfasste Kontext, während er frisch war.
Finale Automatisierung: Das Setup-Skript war exzellent - Handling dynamischer Service-Accounts, klares Feedback, Berücksichtigung frischer Cluster-Szenarien.
Mehrere Template-Iterationen (8+ Versionen): Wir bearbeiteten Templates 8-mal, probierten verschiedene GitHub-Actions aus. Wir hätten verfügbare Actions recherchieren sollen, BEVOR wir mit der Implementierung begannen.
Verzögerte RBAC-Konfiguration: Wir dachten nicht an frische Cluster-Anforderungen, bis explizit gefragt. Hätten "Clean-Slate"-Szenarien von Anfang an berücksichtigen sollen.
Unvollständige Anforderungserhebung: Starteten mit der Implementierung von "lokaler Speicherung", ohne zu fragen "Warum? Was ist das größere Bild?"
Ziel: Exzellent - komplette GitOps-Plattform mit Automatisierung Reise: Lehrreich, aber ineffizient - hätte direkter sein können Pfad: Zu viele Trial-and-Error-Iterationen
Die Selbstkritik war ehrlich: "Wir hätten dieses Ziel effizienter erreichen können, indem wir früher Dokumentation konsultiert und vorab mehr klärende Fragen gestellt hätten."
Selbst mit KI-Unterstützung ist der Bau von custom Backstage-Integrationen immer noch mühsam. Aber es ist auf eine andere Weise mühsam:
Ohne KI: Mühsam, weil man konstant:
Mit KI: Mühsam, weil man:
Letzteres ist viel produktivere Mühsal. Man verbringt Zeit mit High-Level-Entscheidungen, nicht mit Low-Level-Implementierungs-Details.
Wenn du KI-gestützte Entwicklung ausprobieren möchtest, hier sind praktische Muster, die funktioniert haben:
Sage nicht: "Erstelle ein Backstage-Template, das Dateien lokal speichert"
Sage lieber: "Ich möchte, dass Backstage-Nutzer Crossplane-Ressourcen erstellen können. Die Ressourcen sollen versionskontrolliert, automatisch auf den Cluster angewendet und in einer UI sichtbar sein. Was ist der beste Ansatz?"
Das lädt die KI ein, Architektur vorzuschlagen, anstatt nur deine möglicherweise fehlerhafte Idee zu implementieren.
Akzeptiere nicht: "Versuche den force-Parameter"
Frage stattdessen: "Kannst du mir in der offiziellen Dokumentation zeigen, wo dieser Parameter definiert ist?"
Lass die KI Quellen zitieren. Das fängt Annahmen früh ab.
Nimm nicht an: Die aktuelle Umgebung wird immer existieren
Frage stattdessen: "Wenn ich alles lösche und von vorne anfange, was wird gebraucht? Was ist mit Zertifikaten, RBAC, Secrets?"
Das fängt versteckte Abhängigkeiten ab.
Nicht einfach: "Bring es zum Laufen"
Sage stattdessen: "Erstelle eine Test-Checkliste, bevor du implementierst. Was könnte bei jedem Schritt schiefgehen?"
Das fördert proaktives Problemlösen.
Akzeptiere nicht einfach: Die erste Implementierung
Frage stattdessen: "Was sind alternative Ansätze? Was sind die Trade-offs?"
Das hilft dir, informierte Entscheidungen zu treffen.
Unser finales Ergebnis war ein 573-zeiliges Bash-Skript, das:
Traditioneller Ansatz: Das würde Tage dauern:
KI-gestützter Ansatz: Erstellt in einer Anfrage:
User: "Erstelle ein Setup-Skript, das alles automatisiert, was wir manuell gemacht haben, inklusive Handling frischer Cluster, dynamischer Service-Accounts und klarem User-Feedback."
KI: [Generiert 573-zeiliges Skript mit:
War es perfekt? Nein - wir verfeinerten es basierend auf der RBAC-Diskussion. Aber es war 95% korrekt bei der ersten Generierung, und wir konnten an der Spezifikation iterieren ("füge RBAC-Konfiguration hinzu") statt am Code.
Backstage ist nicht einzigartig darin, "mühsam zu sein, wenn fertige Lösungen nicht passen." Das beschreibt den größten Teil des Platform Engineering:
Jedes Platform-Tool verspricht "einfaches Setup" und liefert "einfach für den Happy-Path."
KI eliminiert diese Komplexität nicht. Aber sie verändert, wie man damit umgeht:
Statt ein Experte in 6 verschiedenen Technologien zu werden, wird man ein Experte darin, zu beschreiben, was man braucht und zu validieren, was man bekommt.
Statt stundenlang Dokumentation zu lesen, hat man Konversationen über Trade-offs und Ansätze.
Statt 30 Minuten zu debuggen, erklärt man den Fehler und bekommt potenzielle Lösungen in 30 Sekunden.
Der Bau unserer Backstage + Crossplane + ArgoCD-Plattform dauerte etwa 6 Stunden Hin-und-Her mit Claude Sonnet 4.5. Es beinhaltete:
Ohne KI? Ich schätze, das hätte 2-3 Tage Arbeit gebraucht, möglicherweise mehr. Und die Dokumentation wäre ein nachträglicher Einfall gewesen.
War es perfekt? Nein - wir hätten effizienter sein können, indem wir:
War es wertvoll? Absolut. Wir sind von null zu einer tatsächlich funktionierenden, automatisierten GitOps-Plattform an einem einzigen Tag gekommen, mit umfassender Dokumentation und einem tiefen Verständnis davon, wie alles funktioniert.
Das ist die Kraft der KI-gestützten Entwicklung: Verbringe deine Zeit mit Validieren und Entscheiden, nicht mit Suchen und Debuggen.
Wenn du diesen Workflow erleben möchtest:
Und denk daran: KI ist ein Kollaborateur, kein Zauberstab. Du musst immer noch:
Aber du verbringst deine Zeit mit hochwertige Aktivitäten (Architektur, Anforderungen, Validierung) statt mit geringwertigen Aktivitäten (Syntax-Debugging, Dokumentations-Suche, Beispiel-Kopieren).
Das ist ein Trade-off, den ich jedes Mal eingehen würde.
Wenn wir auf unsere Erfahrung zurückblicken, wurde uns etwas Wichtiges klar: Wir hätten wirklich spezifikations-getriebene Entwicklung verfolgen sollen.
Unser Workflow sah so aus:
Das ist besser als traditionelle Entwicklung, aber es ist immer noch reaktiv. Wir haben immer noch Trial-and-Error gemacht, nur schneller.
Echte spezifikations-getriebene Entwicklung wäre:
Hier sind konkrete Dinge, die wir anders hätten machen sollen:
Was wir gemacht haben: Gefragt "Wie pushe ich in ein bestehendes GitHub-Repo?" und ausprobiert, was die KI zuerst vorgeschlagen hat.
Was wir hätten tun sollen:
"Bevor du irgendetwas vorschlägst, durchsuche die offizielle Backstage-Dokumentation nach GitHub-Integrations-Actions. Liste alle verfügbaren Actions mit ihren vorgesehenen Anwendungsfällen auf und empfehle dann die beste Lösung."
Das erzwingt Verifikation vor der Implementierung. Kein Raten, kein Trial-and-Error.
Was wir gemacht haben: Angefangen mit "mach Templates, die Dateien lokal speichern" und geschwenkt, als es nicht funktionierte.
Was wir hätten tun sollen:
"Ich möchte Kubernetes-Ressourcen durch Backstage erstellen. Sie müssen:
Erstelle ein Design-Dokument, das:
NUR NACHDEM ich das Design genehmigt habe, solltest du Code generieren."
Was wir gemacht haben: Features gebaut, dann gemerkt, dass wir RBAC brauchen, dann nachgerüstet.
Was wir hätten tun sollen:
"Bevor du irgendeinen Code für das Automatisierungs-Skript schreibst, erstelle einen Testplan, der Folgendes abdeckt:
Zitiere für jeden Punkt die offizielle Dokumentations-Anforderung."
Was wir gemacht haben: Direkt am Code iteriert. YAML geändert, Parameter angepasst, vor Ort debuggt.
Was wir hätten tun sollen: Eine Spezifikationsdatei pflegen, die aktualisiert wird, dann Implementierungen regenerieren:
1# spec.md
2
3## GitHub-Integrations-Anforderungen
4- Action: publish:github:pull-request (laut Backstage-Docs v1.2.3)
5- Ziel: Bestehendes Repository
6- Branch-Strategie: Feature-Branches
7- Quelle: Link zur offiziellen Dokumentation
8
9## Wenn sich Anforderungen ändern:
101. Diese Spezifikation aktualisieren
112. KI bitten, Implementierung basierend auf aktualisierter Spezifikation zu regenerieren
123. Niemals generierten Code direkt bearbeiten
Was wir gemacht haben: Eine Konversation gehabt, die sich organisch entwickelt hat. Schwer zu reproduzieren.
Was wir hätten tun sollen:
Projektstruktur:
├── specs/
│ ├── v1-initial-requirements.md
│ ├── v2-added-gitops.md
│ ├── v3-added-rbac.md
├── implementations/
│ ├── template-v1.yaml (generiert aus Spezifikation v1)
│ ├── template-v2.yaml (generiert aus Spezifikation v2)
│ ├── template-v3.yaml (generiert aus Spezifikation v3)
└── validation/
└── test-results-v3.md
Das macht die Evolution nachvollziehbar und reproduzierbar.
KI-gestützt (was wir gemacht haben):
Spezifikations-getrieben (was wir hätten tun sollen):
Nutze KI-gestützt wenn:
Nutze Spezifikations-getrieben wenn:
Wir haben enorm viel Zeit im Vergleich zur traditionellen Entwicklung gespart. Aber wir hätten noch mehr sparen und etwas Wartbareres bauen können, indem wir:
Durch die Einführung wirklich spezifikations-getriebener Entwicklung können wir KI-gestützte Workflows von "schnellerem Trial-and-Error" zu "präzisem, reproduzierbarem Engineering" erheben. Das ist die Zukunft des Platform Engineering, und wir freuen uns darauf, unseren Ansatz weiter zu verfeinern.
Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.
Hier kontaktieren