Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
Secrets Not Included: Pipeline Security image

Secrets Not Included: Pipeline Security

S1 E9 · Secrets Not Included
Avatar
64 Plays10 days ago

Pipeline Security klingt trocken. Ist es aber nicht.

Denn genau hier entscheidet sich, ob deine CI/CD nur schnell ist — oder auch wirklich sicher.

In der neuen Folge von Secrets Not Included sprechen Daniel und Ole über die Sicherheitsprobleme, die in Pipelines ständig unterschätzt werden:

langlebige Secrets, zu große Rechte, unsaubere Tests, fehlende Signaturen, SBOMs und Deployments, bei denen niemand mehr genau sagen kann, was eigentlich wirklich in Produktion gelandet ist.

Es geht um eine klare Frage:

Wie baust du Pipelines so, dass sie liefern — ohne dabei selbst zum Risiko zu werden?

Wir sprechen darüber,
warum Secrets nicht in Pipelines gehören,
warum kurzlebige Tokens der bessere Weg sind,
warum Tests gegen echte Umgebungen anders gedacht werden müssen
und warum SBOM, Signierung und Runtime statt Bauchgefühl heute kein Luxus mehr sind.

Keine Buzzwords.
Keine Sicherheitsfolklore.

Sondern die unbequemen Punkte, die in echten Setups relevant werden.

Neue Folge von Secrets Not Included — mit Daniel und Ole.

---

Ole ist Gründer der Moselwal Digitalagentur und Beschäftigt sich mit Hyperautomatisierurng (auch mit KI), Sicherheit und CMS.

Daniel ist Geschäftsführer der xebro GmbH und sein Schwerpunkt liegt auf PHP, Symfony, E Commerce, DevOps und AWS.

Recommended
Transcript

Einführung in die Pipeline-Sicherheit in CI/CD

00:00:01
Kai Ole Hartwig
Willkommen zu einer neuen Folge der neunten Folge Secrets Not Included in dieser Woche wieder mit Daniel und Ole und wir möchten uns heute mal über Pipeline Security austauschen, was so in CI-CD abgeht und was man dort eigentlich beachten sollte, damit diese Pipelines auch mal sicher sind.
00:00:26
Kai Ole Hartwig
Daniel, magst du loslegen?
00:00:30
Daniel Langemann
Ich glaube, das ist eher deine Stärke, das Thema.
00:00:34
Daniel Langemann
Aber wir können anfangen mit dem allseits nervigen Thema Security, also Secrets in Pipelines.
00:00:45
Daniel Langemann
Das, was eigentlich so den Entwicklern meistens auf den Füßen liegt, ist,
00:00:50
Daniel Langemann
wenn man eine Pipeline gebaut hat oder deployen möchte, möchte man Tests ausführen.
00:00:55
Daniel Langemann
Oft gibt es auch Testsysteme, die Secrets brauchen oder es gibt andere Services, die getestet werden, wogegen getestet wird.
00:01:03
Kai Ole Hartwig
Mhm.
00:01:04
Daniel Langemann
Und damit das funktioniert, braucht man dafür Secrets in der Pipeline.
00:01:10
Daniel Langemann
Und wie diese da reinkommen und
00:01:13
Daniel Langemann
wie diese genutzt werden und welche Rechte auch in der Pipeline da vorherrschen, damit man Systeme und Tests ausführen kann.
00:01:20
Daniel Langemann
Das ist, glaube ich, ein sehr nerviges Thema.
00:01:22
Daniel Langemann
Also, weil die Entwicklung und Ops da immer...
00:01:28
Daniel Langemann
konträr gegeneinander überstehen.
00:01:30
Daniel Langemann
Die einen wollen natürlich möglichst alles testen und brauchen alle Credentials und Zugriff auf alle Systeme.

Herausforderungen und Verwaltung von Geheimnissen

00:01:37
Daniel Langemann
Und OBS versucht natürlich so den Blast Radius so möglichst klein zu halten, damit möglichst wenig Zugriffe irgendwie oder Credentials auch in der Pipeline irgendwo rumfliegen.
00:01:49
Daniel Langemann
Weil meistens ist das ja auch dann
00:01:50
Kai Ole Hartwig
Ähm, ehrlicherweise bin ich ja der radikalen Meinung, ähm, die Credentials für Test, Port, whatever, brauchst du nicht wissen.
00:02:05
Kai Ole Hartwig
Also, weder du als Entwickler, noch als Ops, noch als Pipeline oder CI-System.
00:02:05
Daniel Langemann
Mhm.
00:02:12
Kai Ole Hartwig
Ähm,
00:02:14
Kai Ole Hartwig
Warum behaupte ich das?
00:02:16
Kai Ole Hartwig
Es ist vielleicht die spannendste Frage.
00:02:19
Kai Ole Hartwig
Also erstmal langlebige Secrets irgendwo rumfliegen lassen ist immer eine total beschissene Idee.
00:02:27
Kai Ole Hartwig
Und ich bin auch der Meinung und der Überzeugung, wenn die Pipeline sich irgendwo anmelden muss, muss sie das mit einem eigenen Job spezifischen Token machen.
00:02:37
Kai Ole Hartwig
GitLab CI hat das zum Beispiel gelöst.
00:02:40
Kai Ole Hartwig
Da bekommst du ein Token-
00:02:43
Kai Ole Hartwig
der für diesen Job gerade gültig ist und danach nicht mehr gültig ist.
00:02:46
Kai Ole Hartwig
Damit kannst du dich an allen wichtigen Dingen anmelden.
00:02:49
Kai Ole Hartwig
Bei Registry, also sowohl für die Images als auch bei den Package Registries.
00:02:54
Kai Ole Hartwig
Sprich, du kannst Images ziehen, bauen, pushen.
00:02:58
Kai Ole Hartwig
Du kannst Pakete ziehen, bauen, pushen.

Sicherheits- und Testpraktiken im CI/CD-Prozess

00:03:02
Kai Ole Hartwig
Und damit ist ja eigentlich alles geschafft, was du möchtest, was du ja eigentlich in einer CI-CD-Pipeline haben möchtest, ist, wenn wir mal am Anfang anfangen, du pushst das Zeugs dahin
00:03:14
Kai Ole Hartwig
was du gebaut hast oder nein, du pushst nicht in die Pipeline, du pushst in das Repository und die Pipeline wird dadurch getriggert, dass dort hoffentlich auf einem neuen Feature-Branch im Übrigen Neuer Code angekommen ist.
00:03:29
Kai Ole Hartwig
Dann läuft die Pipeline los und fängt mit den Tests an oder der Prüfung, die am schnellsten läuft, ja, Syntaxfehler und so weiter und so fort.
00:03:32
Daniel Langemann
Vielen Dank.
00:03:38
Kai Ole Hartwig
Dafür brauchst du keine Credentials, dafür musst du eigentlich gar nichts wissen, also was sicherheitsrelevant ist.
00:03:46
Kai Ole Hartwig
dann läufst du ja immer weiter zu den länger laufenden Tests und irgendwann kommst du, glaube ich, an die Testart an, die du meinst, nämlich so etwas wie Functional Tests oder End-to-End Tests, die in irgendeiner Art und Weise mehr benötigen als den statischen Code.
00:04:03
Daniel Langemann
oder Smoketests nach dem Deployment, um zu verifizieren, dass das System noch, also grundlegendst läuft.
00:04:03
Kai Ole Hartwig
Und ja, genau.
00:04:09
Daniel Langemann
Und da brauchst du dann oft reale Credentials, leider.
00:04:14
Kai Ole Hartwig
Ja, das kommt jetzt auf die Infrastruktur an, sage ich.
00:04:18
Kai Ole Hartwig
Wenn du möchtest, dass keine dieser Credentials irgendwie in der Pipeline liegen, ich meine, wir haben das früher auch gemacht, wir haben zum Beispiel.endfights mal irgendwann da reingeschrieben oder auch PHP-Dateien da in der CI-Pipeline aus dem, naja, irgendwo hergeholt, vielleicht aus Variablen,
00:04:36
Kai Ole Hartwig
als es das alles noch nicht so gab und so verbrettet war, aus Variablen halt dann in der PHP-Datei geschrieben, später in der Enddatei, dann waren aus dem 1Password-Zili haben wir, glaube ich, auch mal die Credentials holt und dann so da reingeschrieben.
00:04:52
Kai Ole Hartwig
Das ist aber alles keine gute Idee, wenn man das sich überlegt.
00:04:55
Kai Ole Hartwig
Ja,
00:04:58
Kai Ole Hartwig
weil dann hast du zumindest mal irgendwo langlebige Credentials liegen, um an die Credentials zu kommen und das ist alles irgendwie nicht cool.
00:05:08
Kai Ole Hartwig
Weil Credentials selbst für Datenbankzugriff und so gehören in die Runtime, nicht in irgendein Image reingebaut oder so.
00:05:08
Daniel Langemann
Mhm.
00:05:17
Kai Ole Hartwig
Deswegen ist der Prozess, den ich bevorzuge, um die Pipeline sicher zu haben, ist möglich,
00:05:24
Kai Ole Hartwig
Wir laufen alles durch, dass wir wissen an statischen Analysen, okay, der Code würde vermutlich laufen.
00:05:33
Kai Ole Hartwig
Also nach statischen Gesichtspunkten sieht das gut aus.
00:05:36
Kai Ole Hartwig
Dann bauen wir ein Image.
00:05:39
Kai Ole Hartwig
Das taggen wir definitiv als Testing.
00:05:42
Kai Ole Hartwig
Also nicht Produktionsgreif, sondern man sieht, das ist einfach Alphabeta-whatever.
00:05:50
Kai Ole Hartwig
pushen das in die Image-Registry und ziehen uns das auf ein Testsystem dann runter.
00:05:55
Daniel Langemann
Mhm.
00:05:56
Kai Ole Hartwig
Und dann, wenn das da deployed ist,
00:06:01
Kai Ole Hartwig
dann läuft letztendlich eine weitere Pipeline oder die gleiche, wartet, whatever, was auch immer, wie man das jetzt ausmalt, ob man dann aktiv aufs Testsystem pusht quasi oder ob man darauf wartet, dass irgendwie ein Watchtower oder so das zieht.
00:06:17
Kai Ole Hartwig
Jetzt eine Million Varianten gefühlt.
00:06:21
Kai Ole Hartwig
Ähm...
00:06:22
Kai Ole Hartwig
also egal ob jetzt Push oder Pull, dann läuft die Pipeline weiter und führt dann diese Smoke-Tests etc.
00:06:28
Kai Ole Hartwig
durch oder auch Chaos-Tests.
00:06:30
Kai Ole Hartwig
Einfach mal Services wegschießen in so einem Cluster und schauen, was passiert.
00:06:34
Daniel Langemann
Oh ja.
00:06:36
Kai Ole Hartwig
Aber alle Tests, die laufen sollten, laufen dann gegen ein Testsystem, das alles hat, das aber auch
00:06:44
Kai Ole Hartwig
im Idealfall zum Beispiel einen gewissen Datenbankstand deployed bekommen hat, wenn ich da Abhängigkeiten drin habe.
00:06:52
Kai Ole Hartwig
Ich sage jetzt mal, in CMS-Systemen gibt es ja immer wieder den Mix aus der Herausforderung.
00:07:01
Kai Ole Hartwig
Eigentlich wollen wir möglichst aktuell gegen Produktivdaten testen, aber auf der anderen Seite müssen wir auch Funktionen testen.
00:07:11
Kai Ole Hartwig
Heißt, wir testen
00:07:12
Daniel Langemann
Gerade neue Funktionen zum Beispiel, die noch gar nicht auf dem Produktivsystem sind, kannst du so gar nicht testen meistens.
00:07:17
Daniel Langemann
Hm.
00:07:18
Kai Ole Hartwig
Genau, das heißt wir, oder halt auch alte Funktionen, die jetzt nicht mehr auf dem Produktivsystem zum Beispiel sichtbar sind, irgendeine Slider-Funktion, die mal mega wichtig war natürlich zu bauen und
00:07:31
Kai Ole Hartwig
ganz dringend benötigt war.
00:07:32
Kai Ole Hartwig
Aber jetzt, dann war die zwei Wochen online, da hat man fast gesagt, brauchen wir doch gar nicht.
00:07:36
Kai Ole Hartwig
Aber sie muss ja weiter funktionieren.
00:07:38
Kai Ole Hartwig
Also testest du sie ja in den Testfällen weiter.
00:07:41
Kai Ole Hartwig
Außer es gibt die Entscheidung, wir bauen es dann auch wieder aus.
00:07:44
Kai Ole Hartwig
Die fällt ja nicht so häufig.
00:07:46
Kai Ole Hartwig
Also sprich, das ist ja die Herausforderung bei der Art von Tests.
00:07:52
Daniel Langemann
Vielen Dank.
00:07:53
Kai Ole Hartwig
Und heißt, du fährst dann ja letztendlich eine gewisse Datenbank mit gewissen Fictures hoch, gegen die testest du.
00:08:00
Kai Ole Hartwig
Und das ist aus meiner Sicht auf einem Testsystem, das hochgefahren wird für genau diesen Zweck, mit genau diesem Branch und dann halt läuft.
00:08:09
Kai Ole Hartwig
Und das ist nämlich genau der Punkt.
00:08:10
Kai Ole Hartwig
Dann habe ich nämlich in dem Testsystem wieder meinen ganz normalen Mechanismus, wie komme ich an diese Credentials.
00:08:17
Kai Ole Hartwig
und habe in der Pipeline letztendlich nichts damit zu tun, außer dass ich vielleicht der Pipeline mitgebe, hey, da muss jetzt dieser Datenbank-Dump im weitesten Sinne, diese Datenbank-Daten sollen in die Datenbank geschrieben werden.
00:08:32
Daniel Langemann
Also das setzt aber voraus, dass du das Produktivsystem von der Infrastruktur wirklich eins zu eins kopieren kannst.
00:08:39
Daniel Langemann
Also dass du eine Testdatenbank, also im Idealfall sogar vielleicht eine Kopie machen kannst von einer Produktivdatenbank, irgendwie Daten anonymisieren.
00:08:50
Daniel Langemann
Einfach mal so am Rande erwähnt, macht man natürlich eine
00:08:54
Daniel Langemann
Nicht einfach Nutzerdaten von A nach B schieben, so mit Kreditkarteninfos und sowas, aber du hast eine anonymisierte Produktivdatenbank, du kannst andere Systeme kopieren, dann funktioniert sowas super.
00:09:07
Kai Ole Hartwig
Ja,

Testen von Zahlungssystemen und Überwachung in CI/CD

00:09:08
Kai Ole Hartwig
definitiv.
00:09:08
Daniel Langemann
Es gibt aber immer wieder Ausnahmen, die du nicht kopieren kannst.
00:09:11
Daniel Langemann
Also gerade so im E-Commerce-Bereich Payment.
00:09:14
Daniel Langemann
Du kannst, also so reich kannst du nicht sein, dass du automatisiert mit deiner eigenen Kreditkarte oder Tests durchlaufen lässt.
00:09:21
Kai Ole Hartwig
Ja, genau.
00:09:21
Daniel Langemann
Deswegen
00:09:22
Kai Ole Hartwig
Genau, es gibt da Gänzen.
00:09:24
Kai Ole Hartwig
Ich sage nicht, das ist die ideale Welt, damit kannst du alle Testfälle abdecken.
00:09:27
Daniel Langemann
Nein, nein.
00:09:28
Kai Ole Hartwig
Ja.
00:09:29
Daniel Langemann
Also worauf ich hinaus wollte, ist, man kann unterscheiden zwischen lesenden und schreibenden Tests.
00:09:33
Daniel Langemann
Also gerade bei Smoke-Tests sage ich immer, es gibt lesende Tests, die sich einfach durch die Applikation durchklicken und so wie ein Benutzer so ein bisschen streunen, sage ich mal, und einfach so ein paar Klickstrecken nachgehen und erwarten, dass keine Fehlermeldungen da sind oder Überschriften irgendwo auftauchen, Titel und sowas.
00:09:49
Daniel Langemann
Und es gibt schreibende Tests, die sind spezieller,
00:09:53
Daniel Langemann
Also in deinem Setup, so wie du es beschrieben hast, wenn du das kopieren kannst oder einen Großteil kopieren kannst, ist das super, weil dann kannst du auch schreibende Tests machen.
00:10:00
Daniel Langemann
Dann kannst du Nutzer anlegen, du kannst Nutzer löschen, also auch solche Tests machen.
00:10:05
Kai Ole Hartwig
Genau, bis halt auf das, was gegen Drittanbieter Zeugs läuft.
00:10:05
Daniel Langemann
Ja.
00:10:10
Kai Ole Hartwig
Und mit Drittanbieter meine ich manchmal auch das Team, was nebenan am TÜV sitzt.
00:10:16
Kai Ole Hartwig
Also du kannst halt in dieser Art von Testumgebung, die halt aus Security-Sicht für die Pipeline bedeutet, die Pipeline kennt keine Credentials und braucht keine Credentials außer den eigenen Job-Token,
00:10:32
Daniel Langemann
Mhm.
00:10:32
Daniel Langemann
Mhm.
00:10:34
Kai Ole Hartwig
kannst du dann natürlich für deinen Teil der Applikation oder für die Applikation, die du betreust, beliebige Dinge machen.
00:10:42
Kai Ole Hartwig
Wenn du jetzt mit anderen Services reden musst, die anderen Menschen gehören, anderen Teams gehören, dann bist du natürlich in der Situation drin, da ist halt die Grenze, aber da ist ja auch so eine Verantwortungsgrenze.
00:10:55
Kai Ole Hartwig
Also es ist jetzt ja nicht so, dass sich jeden Tag die vereinbarten Schnittstellen verändern.
00:11:03
Kai Ole Hartwig
Zum Glück nicht.
00:11:04
Daniel Langemann
Nicht täglich, aber das reicht einmal.
00:11:04
Kai Ole Hartwig
Hoffentlich nicht.
00:11:05
Daniel Langemann
Aber...
00:11:05
Kai Ole Hartwig
Genau.
00:11:05
Kai Ole Hartwig
Aber das ist ja auch das, wo... Ja.
00:11:06
Kai Ole Hartwig
Ja.
00:11:15
Daniel Langemann
Also das beschriebene Problem löst man ja auch anders.
00:11:17
Daniel Langemann
Also jetzt zum Beispiel das mit dem Payment-Anbieter kannst du anders lösen.
00:11:21
Daniel Langemann
Es gibt extra Monitoring und da baust du zum Beispiel was ein, was das wenn nach einem Deployment, weiß ich nicht, 30 Minuten lang, also je nachdem, wie viel auf dem Shop los ist, zum Beispiel eine Stunde lang keine Bestellung eingeht, dann würde ich sofort einen Alarm auslösen, weil da ist was kaputt.
00:11:36
Daniel Langemann
Das ist so Backup-mäßig,
00:11:39
Daniel Langemann
Also reicht auch oder ist kompensiert aber, dass ich keine schreibenden Tests gegen externe Systeme machen kann.
00:11:45
Daniel Langemann
Also, ja, sorry.
00:11:46
Kai Ole Hartwig
Ja, wir überspringen jetzt auch Punkte in der Pipeline, ehrlicherweise.
00:11:46
Daniel Langemann
Ja.
00:11:50
Kai Ole Hartwig
Du springst jetzt vom Testsystem aufs Produktivsystem.
00:11:55
Kai Ole Hartwig
Wobei, lass uns mal bei unserem Testsystem gerade bleiben und gleich aufs Produktivsystem springen, wenn wir dann doch was Kaputtes deployed haben.
00:12:03
Kai Ole Hartwig
Und
00:12:08
Kai Ole Hartwig
Also was ich wichtig finde, ist halt, wenn, das deckt halt das tägliche Arbeiten ab in diesem Testszenario, ne?
00:12:16
Daniel Langemann
Mhm.
00:12:17
Kai Ole Hartwig
Wenn du, ähm, wenn du natürlich jetzt an Punkte kommst, die einmal vorkommen oder alle x Monate oder alle x Jahre vorkommen können, naja, API-Version und solche Dinge, ja, das passiert ja nicht unangekündigt über Nacht, ähm,
00:12:37
Kai Ole Hartwig
dann musst du halt anders testen, manuell nachtesten oder halt Vorwegstrategien haben.
00:12:48
Kai Ole Hartwig
Ich finde aber, das ist etwas, was man nicht in der Arbeit oder in der Pipeline für jeden Tag haben muss oder abdecken muss.
00:12:56
Daniel Langemann
Also genau, die Tests, also die Grundlage der Tests sind ja eigentlich nur, ich habe als Entwickler keinen Bock von Hand die Sachen durchzuklicken.
00:12:57
Kai Ole Hartwig
Ich finde so...
00:13:05
Daniel Langemann
Also normalerweise oder vor 30 Jahren war es ja gefühlt so, du hast geschrieben, hast durch den Browser geklickt, ja, kein Fehler, passt.
00:13:06
Kai Ole Hartwig
Nicht nur als Entwickler, auch als Gester und Product Owner.
00:13:09
Kai Ole Hartwig
Ja.
00:13:14
Daniel Langemann
Und dann hat man halt immer die wichtigen Sachen vergessen und dann mit den Tests angefangen, die Sachen zu automatisieren und das dann auch viel besser, also jetzt End-to-End-Tests.
00:13:24
Daniel Langemann
Und das Ganze dadurch dann einfach viel besser zu machen, weil das wiederholbar ist und vorhersehbar ist und man kann nichts vergessen.
00:13:33
Daniel Langemann
Das ist ja eigentlich die Grundlage davon, ne?
00:13:35
Kai Ole Hartwig
Genau, und heute kannst du ja noch viel weitergehen.
00:13:38
Kai Ole Hartwig
Also wir hatten ja schon irgendwie gesagt, okay, diese langlebenden Secrets sind ziemlich unpassend heute.
00:13:46
Kai Ole Hartwig
Würde ich also nicht machen.
00:13:48
Kai Ole Hartwig
Selbst wenn man die rotiert, das löst halt einfach nicht das Problem.

Behandeln von Pipelines als Produktionssysteme

00:13:52
Kai Ole Hartwig
Sowas wie OpenID Connect funktioniert halt auch ohne Probleme in der Pipeline mit Token.
00:13:57
Daniel Langemann
Hmm.
00:13:58
Daniel Langemann
Hmm.
00:13:58
Kai Ole Hartwig
Das sollte man sich immer überlegen, dass...
00:14:02
Kai Ole Hartwig
Im Prinzip eine Pipeline, wenn man den Credentials gibt, muss man die behandeln wie ein Produktivsystem.
00:14:11
Kai Ole Hartwig
In dem Moment, wo die Pipeline Zugriff auf Secrets bekommt, aus welchen Gründen auch immer,
00:14:18
Kai Ole Hartwig
musst du damit hantieren, als wäre das ein Produktivsystem.
00:14:22
Kai Ole Hartwig
Das heißt auch, du musst dann zum Beispiel in den Logs, die ja geschrieben werden und ausgegeben werden, dafür sorgen, dass da deine Secrets schon gar nicht mehr auftauchen.
00:14:29
Kai Ole Hartwig
Das ist halt sonst ein Megaproblem, wenn du jetzt sagst, ja, hier mein API-Key, den brauche ich aber, den schreibe ich mir jetzt irgendwo rein und dann steht er in jedem Log drin.
00:14:41
Kai Ole Hartwig
So.
00:14:42
Daniel Langemann
Also kleine Anekdote wieder zu dem Thema.
00:14:49
Daniel Langemann
Wenn du Entwickler bist oder wie es nicht sein sollte, du bist Entwickler, bist gerade was am Debuggen und brauchst Infos zu Umgebungsvariablen, machst natürlich einen Dump da drauf, weil du denkst, das ist eine ganz normale Config, du willst wissen, ob die Applikation gerade im Testmodus läuft und dieser Dump wird dann ausgegeben und da sind dann Credentials drin, weil auch die Container
00:15:12
Daniel Langemann
dann die Credentials in Umgebungsvariablen haben, ist das ganz schlecht.
00:15:15
Daniel Langemann
Mhm.
00:15:16
Kai Ole Hartwig
Ja, das ist nämlich auch genau der nächste Punkt.
00:15:18
Kai Ole Hartwig
Wenn du die Credentials so in den Container reinpackst, reinpackst, also reinpackst und da fixierst drin, dann sind sie halt letztendlich über die Registry immer abrufbar.
00:15:33
Kai Ole Hartwig
Dann kannst du halt sagen, na ja, komm, wurde ja netterweise mit reingeschrieben, so dann sind sie halt nicht mehr geheim.
00:15:42
Daniel Langemann
Hack mir ist doch verboten.
00:15:43
Daniel Langemann
Ja.
00:15:43
Kai Ole Hartwig
Ja, jetzt kann man natürlich sagen, ja, das ist alles unser internes Netz, das ist alles sicher und alles toll bis zu dem Zeitpunkt, bis dann halt mal irgendjemand Zugriff drauf hatte, den man jetzt nicht mehr mag.
00:16:02
Kai Ole Hartwig
Oder, oder, oder.
00:16:03
Kai Ole Hartwig
Es gibt ja immer wieder den Fall, wo man sich überlegt, jetzt sollten wir doch nochmal die ganzen Secrets rotieren aus Gründen.
00:16:14
Kai Ole Hartwig
Das sind ja völlig unterschiedliche Gründe.
00:16:17
Kai Ole Hartwig
Aber wenn du halt die Secrets gar nicht in den Züge von einem bestimmten Personenkreis hast, dann kannst du halt die Notwendigkeit krass minimieren.
00:16:26
Kai Ole Hartwig
Ähm...
00:16:29
Kai Ole Hartwig
Und das ist ja so, ich habe das auch häufig genug gesehen und wir haben das früher ja genauso gemacht in den Pipelines.
00:16:35
Kai Ole Hartwig
Das ist ja einfach der Erfahrungswert.
00:16:37
Kai Ole Hartwig
Das ist jetzt ja gar nicht so ein, ja, ihr dürft aber nicht.
00:16:40
Kai Ole Hartwig
Und ich mache das alles besser.
00:16:42
Kai Ole Hartwig
Ich habe nie solche Dinge gemacht, sondern das ist ja wirklich eine Entwicklung.
00:16:46
Kai Ole Hartwig
Das ist auch genauso, wie wir heute halt zum Beispiel noch hingehen und mit eigenen Policies prüfen, ob zum Beispiel gewisse Standards eingehalten sind, ja, ob bestimmte Benahmungen, ähm,
00:17:00
Kai Ole Hartwig
da sind in.end-Files, ja, auch wir nutzen an bestimmten Stellen.end-Files, die enthalten nur keine Credentials, ja, die enthalten halt so etwas wie, hey, die App läuft nicht in Debug, sondern sie ist auf produktiv gestellt, ja.
00:17:13
Daniel Langemann
Ganz normale Config, genau.
00:17:15
Kai Ole Hartwig
Genau, so.
00:17:15
Daniel Langemann
Also keine Secrets, sondern Konfiguration der Applikation, ja.
00:17:19
Kai Ole Hartwig
oder dass ein bestimmtes Feature jetzt eingeschaltet ist und solche Dinge.
00:17:24
Kai Ole Hartwig
Das schreiben wir ja auch in.env-Files und die prüfen wir oder wir prüfen auch unsere Compose-Templates.
00:17:31
Kai Ole Hartwig
Wir haben ja keine Compose-Dateien mehr in den Repositories drin, sondern wir haben ein Template und unser Makefile sorgt dafür, dass wir die richtigen Templates einbinden und nutzen anhand der Services, die wir brauchen, anhand der PHP-Pakete, die wir eingebunden haben.
00:17:52
Kai Ole Hartwig
Da prüfen wir halt auch mit Policies, ob das alles so stimmt, ja, ob zum Beispiel niemand irgendwie versucht, ein MySQL-Passwort so da reinzusneaken, sondern dass die immer über die Runtime kommen.
00:18:05
Daniel Langemann
Also nicht versehentlich mal Sachen mit committed werden oder so, ja.
00:18:05
Kai Ole Hartwig
Und
00:18:08
Daniel Langemann
Hm.
00:18:08
Kai Ole Hartwig
Ja, genau.
00:18:10
Kai Ole Hartwig
Manchmal bist du ja in diesem Debuggen drin, änderst Sachen, um einfach mal voranzukommen.
00:18:17
Kai Ole Hartwig
Und umgehst bewusst die Mechanismen, die eigentlich da sind.
00:18:22
Kai Ole Hartwig
Und damit das aber nicht weiter wandert.
00:18:26
Kai Ole Hartwig
Also dann ist es schon committed, dann ist es schon im Repository gelandet.
00:18:29
Kai Ole Hartwig
Das ist doof.
00:18:33
Daniel Langemann
Den kann man noch wegschießen, ja.
00:18:33
Kai Ole Hartwig
Aber dann ist es immerhin nur auf einem Feature-Branch.
00:18:41
Kai Ole Hartwig
Den kann man wegschießen und dann sind es ja auch nur Dev-Credentials.
00:18:46
Kai Ole Hartwig
Dev-Credentials sind auch etwas, die kennen wir nicht, die generieren wir bei den Starts immer wieder neu.
00:18:52
Kai Ole Hartwig
Also so nach dem Motto, I don't care, welche, wie das Passwort für den Wall-Key ist oder für die Datenbank auch, also im
00:19:01
Kai Ole Hartwig
im lokalen System, ja, beim Starten wird die E gebaut und reingekopiert die Daten, leg halt einen User an mit dem Passwort, was jetzt gerade für diese Umgebung richtig ist.
00:19:12
Daniel Langemann
Mhm.
00:19:14
Kai Ole Hartwig
Funktioniert übrigens hervorragend.
00:19:15
Kai Ole Hartwig
Ja, so, ist jetzt auch kein echtes Problem, so DevCredentials, aber dann ist es halt auch egal, ob sie da sind oder nicht da sind, wir brauchen sie nicht im Repo, sie werden automatisch generiert und
00:19:29
Kai Ole Hartwig
irgendwie ist es echt angenehm, ja, du musst nicht dran denken, irgendwas anlegen zu müssen, dass deine Entwicklungsumgebung läuft.
00:19:37
Kai Ole Hartwig
Wir waren aber in der Pipeline irgendwo und ich bin gedanklich falsch abgeboken.
00:19:41
Daniel Langemann
im entferntesten Sinn ist das ja noch Pipeline.
00:19:43
Daniel Langemann
Also aus dem Depp-System heraus
00:19:44
Kai Ole Hartwig
Ja, das ist der Schritt vor der Pipeline, genau.
00:19:46
Kai Ole Hartwig
Ah, genau, ich war bei den Policies.
00:19:48
Kai Ole Hartwig
Policies habe ich auch letztendlich im letzten Jahr erst so richtig angefangen zu benutzen.
00:19:56
Kai Ole Hartwig
Und mittlerweile liebe ich es, weil wir einfach diese Prüfschritte drin haben.
00:20:04
Kai Ole Hartwig
Entspricht das alles auch unserem Standard?
00:20:08
Kai Ole Hartwig
Haben wir nicht...
00:20:08
Daniel Langemann
Mit welchen Tools definierst du diese Policies denn?
00:20:10
Daniel Langemann
Also gibt es sowas wie, sagen wir mal, PHP-Stan oder CS-Fixer oder sowas, dass man sagen kann, ich konfiguriere mir solche Policies mit irgendeinem Tool zusammen und das lasse ich durch das Projekt durchlaufen oder?
00:20:22
Kai Ole Hartwig
Ja, also natürlich nicht mit CS-Fixer, sondern es gibt eigene losgelöste Tools.
00:20:25
Daniel Langemann
Nein, aber...
00:20:29
Kai Ole Hartwig
Lass mich die auch gerne kurz in unserem Setup nachschauen.
00:20:34
Kai Ole Hartwig
Ja, Namen sind ja Schall und Rauch für mich.
00:20:37
Kai Ole Hartwig
Und du fragst mich direkt nach Tool-Namen, Dani.
00:20:39
Kai Ole Hartwig
Das ist hervorragend.
00:20:43
Kai Ole Hartwig
Warte mal, ich muss mal mein geliebtes PHP-Storm an dieser Stelle kurz aufmachen.
00:20:52
Kai Ole Hartwig
meine große Schwäche sind ja Namen.
00:20:56
Daniel Langemann
Gerade weil man es niederschreibt, muss man sich das eh nicht merken.
00:20:59
Kai Ole Hartwig
Ja, genau, das ist so dieses reingeschrieben, das steht ja auch in unseren Tools.
00:21:11
Daniel Langemann
Ich sage immer, mein Kontext.
00:21:12
Kai Ole Hartwig
Und die Dateiendung ist Rego.
00:21:14
Daniel Langemann
Riko.
00:21:14
Kai Ole Hartwig
Das ist gut.
00:21:15
Kai Ole Hartwig
Warte mal.
00:21:16
Kai Ole Hartwig
Ja.
00:21:17
Daniel Langemann
Ja, also können wir eine andere Folge mal drüber machen, wo wir wirklich spezifischer drauf eingehen, weil das würde mich echt interessieren, wie man das definiert und was man da genau machen kann.
00:21:21
Kai Ole Hartwig
Ja, vielleicht
00:21:28
Daniel Langemann
Aber generell finde ich es gut zu sagen, es gibt Sachen, die zum Beispiel nach Secrets oder nach Credentials suchen, nach Variablen, die einfach darauf hindeuten, dass Secrets im Code sind, denke ich mal.
00:21:41
Kai Ole Hartwig
Genau, nach klassischen Patterns, so was, wenn irgendwo bestimmte Worte dran stehen, dann finden wir es doof.
00:21:43
Daniel Langemann
Ja, genau.
00:21:43
Daniel Langemann
Ja.
00:21:48
Kai Ole Hartwig
So was wie API oder Key.
00:21:54
Kai Ole Hartwig
So, das ist so das erste Ding, was dann gefleckt wird, wenn du das in der.env-Datei oder in einer.env-Datei findest, dann mach mal erst mal hier dicht und sag, nee, sorry.
00:22:10
Kai Ole Hartwig
so.
00:22:16
Kai Ole Hartwig
Tool.
00:22:19
Kai Ole Hartwig
Wäre ja was.
00:22:19
Daniel Langemann
Ich finde eine extra Folge dafür gut.
00:22:22
Kai Ole Hartwig
Ja.
00:22:25
Kai Ole Hartwig
So, was uns aber auch dazu führt...

Sicherheit und Zuverlässigkeit in CI/CD-Jobs

00:22:31
Kai Ole Hartwig
ich muss jetzt aufpassen, dass ich persönlich gedanklich nicht so sehr springe heute, dass man heute halt auch hingehen kann, wunderbarerweise,
00:22:43
Kai Ole Hartwig
und CI, CD-Components, wie sie GitLab hat, jetzt bin ich natürlich wieder sehr tool-lastig und sage, okay, in GitLab ist das so, aber das Prinzip funktioniert, glaube ich, überall, dass man diese einzelnen Jobs, die man hat, mit Tests versieht und schaut, dass die auch getestet sind und eine eigene Release-Pipeline haben.
00:23:05
Kai Ole Hartwig
Also unsere Jobs bauen sich zum Beispiel, Pipelines bauen sich aus festen Komponenten,
00:23:10
Kai Ole Hartwig
auf und bevor wir eine neue Version releasen, davon durchlaufen die auch Tests und werden dann automatisch released.
00:23:11
Daniel Langemann
Also die Pipeline selber.
00:23:19
Kai Ole Hartwig
Also, ja, die Pipelines selber.
00:23:24
Kai Ole Hartwig
Auf die dann wieder die gleichen Sicherheitsregeln im Übrigen gelten.
00:23:27
Kai Ole Hartwig
Ja, auch da schauen wir, gibt es Secrets da drin?
00:23:32
Kai Ole Hartwig
Verlieren wir irgendwas?
00:23:34
Kai Ole Hartwig
Ist da was Auffälligges?
00:23:35
Kai Ole Hartwig
Und die Hauptfrage, funktionieren die?
00:23:37
Kai Ole Hartwig
Stell dir vor, wir pushen jetzt eine neue Version für das Bauen von Images.
00:23:49
Kai Ole Hartwig
Und uns geht dabei die S-Bomb-Generation verloren.
00:23:53
Daniel Langemann
Mhm.
00:23:53
Kai Ole Hartwig
Das wäre halt für uns irgendwie dumm.
00:23:57
Kai Ole Hartwig
oder ungünstig, sagen wir mal, weil dann natürlich weitere Schritte irgendwie nicht funktionieren und durchlaufen.
00:24:05
Kai Ole Hartwig
Oder die Signierung von Images geht kaputt oder von Paketen.
00:24:10
Kai Ole Hartwig
Das können wir halt dadurch, dass wir vorher die Pipeline prüfen, vor dem Release, also den Job prüfen mit Tests und dann erst releasen, können wir das halt sicherstellen, dass die einzelnen Jobs immer
00:24:26
Kai Ole Hartwig
funktional bleiben, immer so funktionell wie wir es definiert haben.
00:24:30
Kai Ole Hartwig
Und bei uns ist es halt auch noch so, sobald wir eine neue Version von so einer CI-CD-Component erstellt haben, geht halt Renovate hin und updatet alle Abhängigkeiten in den anderen Repositories.
00:24:47
Kai Ole Hartwig
Renovate ist ein Tool, womit du Dependency-Updates automatisieren kannst.
00:24:52
Daniel Langemann
Oh.
00:24:53
Kai Ole Hartwig
Sprich, er prüft regelmäßig
00:24:56
Kai Ole Hartwig
nicht nur interne, sondern auch externe Abhängigkeiten, gibt es hier eine neue Version.
00:25:01
Kai Ole Hartwig
Und in unserem Fall ist es so konfiguriert in bestimmten Grenzen natürlich.
00:25:08
Kai Ole Hartwig
Wenn es eine neue Version gibt, geh hin, CD macht zum Beispiel das Composer Update.
00:25:18
Kai Ole Hartwig
machen Merch-Requests dafür auf, also ein neuer Feature-Brand oder eine neue Branche, Merch-Requests aufmachen, dann läuft die Pipeline durch und wenn die Pipeline erfolgreich ist, dann mercht der auch selbstständig und lässt das zum Teil bis aufs Produktivsystem durchbauen.
00:25:32
Daniel Langemann
Hm, geil.
00:25:34
Kai Ole Hartwig
So, bedeutet aber auch an der Stelle wieder, wir haben automatische Tests, die halt vollautomatisch durchlaufen können.
00:25:43
Kai Ole Hartwig
Und ich habe ja eben schon sowas anklingen lassen wie S-Bomb und Signierung.
00:25:49
Kai Ole Hartwig
Das sind auch aus meiner Sicht heute zwei enorm wichtige Baustellen in so einer Pipeline drin und in dem Ganzen, was wir eigentlich mit der Pipeline auch an Sicherheit erreichen wollen.
00:26:00
Kai Ole Hartwig
Wir möchten am Tagesende
00:26:04
Kai Ole Hartwig
dass das Ergebnis, was wir rausbringen, dem entspricht, was wir getestet haben und wir aber auch jederzeit wissen, was es enthalten, wurde das tatsächlich von uns rausgegeben und ist das auch heute noch sicher.
00:26:07
Daniel Langemann
Mhm.
00:26:07
Daniel Langemann
Mhm.
00:26:20
Kai Ole Hartwig
Also, stellen wir mal vor, uns fällt Renovate aus und das macht keine automatischen Updates.
00:26:26
Kai Ole Hartwig
Kann ja passieren.
00:26:27
Kai Ole Hartwig
Ähm...
00:26:30
Kai Ole Hartwig
Oder irgendwo der Prozess hängt oder whatever.
00:26:35
Kai Ole Hartwig
Die S-Bomb, die generiert werden kann, das ist ja so eine lange JSON-Datei, die kann ja kein Mensch lesen.
00:26:37
Daniel Langemann
Was ist das genau?
00:26:45
Kai Ole Hartwig
Die enthält aber und wurde hoffentlich zur Build-Zeit gebaut.
00:26:49
Kai Ole Hartwig
Also nicht erst irgendwann später mal noch nachgezogen oder so, sondern in dem Moment, wo man alles zusammenbaut, erstellt man diese S-Bomb.
00:26:57
Kai Ole Hartwig
und enthält alle eingesetzten Pakete, Software, whatever, die halt in so einem Image und in deiner Applikation enthalten sind.
00:27:08
Kai Ole Hartwig
Und das mit der jeweilig verwendeten Version.
00:27:13
Kai Ole Hartwig
Sprich, wir wissen eigentlich zu dem Zeitpunkt dann, welche Pakete sind enthalten und welche sind nicht mehr sicher.
00:27:22
Daniel Langemann
Mhm.
00:27:22
Kai Ole Hartwig
Und dieses...
00:27:24
Kai Ole Hartwig
Das ist ja in dem Moment, wo ich das baue, nur eine Momentaufnahme.
00:27:27
Kai Ole Hartwig
Was ich dann machen muss mit dieser Information, ist aber auch, einen Pipeline-Job zu haben oder ein Tool oder whatever.

Verwendung von S-Bomb und Cosign für Integritätsprüfung

00:27:35
Kai Ole Hartwig
Irgendein Prozess, der dafür sorgt, dass dieses Bild-Artefakt, was es ja ist, die S-Bomb,
00:27:45
Kai Ole Hartwig
mit der Version verbunden ist und dann immer wieder periodisch geprüft wird, sind für die eingesetzten Versionen neue Sicherheitslücken bekannt geworden.
00:27:54
Kai Ole Hartwig
Dass ich zu jedem Zeitpunkt weiß, welche Lücken habe ich denn und muss ich jetzt handeln?
00:28:02
Daniel Langemann
Sind neue dazugekommen, ja.
00:28:04
Kai Ole Hartwig
Ist da etwas Kritisches drin, wo ich jetzt sofort was machen muss?
00:28:08
Kai Ole Hartwig
Also ich meine, in unserem Prozess würde hoffentlich Renovate, wie gesagt, schon dafür gesorgt haben, dass die neue Version eingespielt ist und alles cool ist.
00:28:18
Kai Ole Hartwig
Aber wie gesagt, es kann halt auch immer sein, dass Renovate so eine neue Version nicht bekommt, dass dann Breaking Change ist, dass irgendwas kaputt gegangen ist, wir etwas umkonfigurieren müssen und die Pipeline nicht automatisch durchläuft.
00:28:29
Kai Ole Hartwig
Also sprich, du brauchst eine Form von Monitoring und Alerting auf die eingesetzten Pakete, damit du mitbekommst, oh, ich muss jetzt aber handeln.
00:28:44
Kai Ole Hartwig
Und das macht dann nicht deine Pipeline sicherer an der Stelle, sondern deine Applikation, aber gehört ja auch irgendwie in diesen Pipeline-Prozess rein.
00:28:56
Kai Ole Hartwig
Jetzt waren wir schon auf dem Testsystem, wir haben irgendwie adressiert, okay, wir wissen, was ist da drin, was wir dann noch machen, was das Ergebnis sicherer macht, gar nicht die Pipeline, ist mit Cosign hingehen und
00:29:28
Daniel Langemann
Vielen Dank.
00:29:29
Kai Ole Hartwig
uns.
00:29:32
Kai Ole Hartwig
Überprüfbar und im Prinzip sichtbar, was auch bedeutet, wenn wir uns ein Image ziehen,
00:29:42
Kai Ole Hartwig
dann prüfen wir auch die Signatur.
00:29:43
Kai Ole Hartwig
Wenn die Signatur ungültig ist, dann sehen wir die nicht mehr.
00:29:45
Daniel Langemann
Ja, also das mit den Images und den Signaturen kenne ich.
00:29:48
Kai Ole Hartwig
Hm?
00:29:52
Daniel Langemann
Also ich kenne zum Beispiel den Ansatz ein bisschen anders, dass der Gedanke ist, man baut die Applikation fertig in einem Container.
00:29:59
Daniel Langemann
Also es bezieht sich auch wirklich nur auf Docker, also entweder ECS oder hier Kubernetes oder so.
00:30:06
Kai Ole Hartwig
Ja, ist ja...
00:30:07
Daniel Langemann
baust deine Applikation im Container fertig, signierst das Ganze und das ist sozusagen dein Bildartefakt und das Ding kannst du dann durchdeployen und hast sozusagen die Unveränderlichkeit.
00:30:17
Daniel Langemann
Also ich glaube, das ist ähnlich wie mit dem S-Bomb so ein bisschen.
00:30:18
Kai Ole Hartwig
Ja, genau.
00:30:22
Daniel Langemann
Also diese Unveränderlichkeit zumindest festgestellt, dass in Prod die gleiche Konstellation von Abhängigkeiten genutzt wird wie im Testsystem.
00:30:32
Daniel Langemann
Aber was
00:30:34
Kai Ole Hartwig
Also die S-Bomb beschreibt ja, was du drin hast und das Signieren sorgt ja nur dafür, was heißt sorgt nur dafür, sagt halt, okay,
00:30:42
Kai Ole Hartwig
hier, die haben es rausgebracht und wenn du halt statt einer Versionsnummer zumindest bei Container-Images hingehst und die Digits nimmst oder wie auch immer man das ausspricht, also den Char-Wert, dann sorgst du ja dafür, dass du wirklich die Version nimmst, die du haben möchtest.
00:30:43
Daniel Langemann
Ja.
00:31:08
Kai Ole Hartwig
Das ist zum Beispiel auch etwas, was wir machen.
00:31:10
Kai Ole Hartwig
Wir nutzen diesen
00:31:11
Kai Ole Hartwig
unfassbar langen String, den Hashwert, zum Identifizieren, welche Version wollen wir dann ausspielen.
00:31:19
Kai Ole Hartwig
Oder welche Version wird da genutzt?
00:31:20
Kai Ole Hartwig
Da steht zwar vor, dann unsere semantische Versionssummer, aber letztendlich beziehen wir uns immer darauf, welcher Hash es ist.
00:31:31
Daniel Langemann
Ja, macht es dann auch.
00:31:32
Daniel Langemann
Also der Hash ist dann der Comet-Hash oder aus dem signierten Container?
00:31:35
Daniel Langemann
Sorry.
00:31:38
Kai Ole Hartwig
Boah, du stellst hier eine Frage.
00:31:40
Daniel Langemann
Also ich frage deswegen, weil, also ich nutze gerne den Comet-Hash, weil in der Pipeline dann recht einfach auch Rollbacks machbar sind, dass du sagen kannst, guck mal, ich triggere, also produktiv hat nicht funktioniert, ist irgendwas gefailt, ich kann die Pipeline davor nochmal triggern und dann wird der Container
00:31:42
Kai Ole Hartwig
Das ist...
00:31:59
Daniel Langemann
Also wenn der Container Hash gleich dem Comet Hash ist, dann hast du ja eine recht einfache Versionierung drin und kannst sagen, das ist das Artefakt.
00:32:07
Kai Ole Hartwig
Du nimmst quasi den Commit-Hash als Versionsnummer.
00:32:13
Kai Ole Hartwig
Ja, wir nehmen da semantische Versionsnummern.
00:32:15
Kai Ole Hartwig
Also, sprich...
00:32:16
Daniel Langemann
Sieht schöner aus, aber dann musst du da hin und her rechnen und dafür war ich zu faul.
00:32:21
Kai Ole Hartwig
Ja, wir setzen aber halt an jedes Paket, das wir bauen, also auch an die Gesamt-CMS-Applikationen, also an das Gesamt-CMS-Paket mit allen Extensions und so weiter, setzen wir die semantische Versionsnummer.
00:32:30
Daniel Langemann
Mhm.
00:32:36
Kai Ole Hartwig
Da legen wir die fest und übergeben die an die Container-Pipeline, die den Container baut.
00:32:43
Kai Ole Hartwig
Und der Commit-Hash ist auch so ein Ding.
00:32:47
Kai Ole Hartwig
Also im Prinzip ist es ein Git-Tag, den wir da weitergeben, der die Versionsnummer macht, aber die Digits, also dieser Hash, der das in Absolut für Docker oder oder Kubernetes oder, oder, oder identifiziert, das ist nochmal ein Ding, was halt bei dem Bild von dem Image entsteht.
00:33:07
Daniel Langemann
sehr mathematisch gleich.
00:33:08
Kai Ole Hartwig
der leitet sich jetzt nicht irgendwie ab aus der Versionsnummer oder aus irgendetwas, was du selber dranhängst, sondern das ist nochmal ein anderer Heft, der, ich weiß leider nicht, wie der berechnet wird, aber der halt ganz eindeutig jetzt dieses eine Image identifiziert und der auch nicht veränderlich ist.
00:33:30
Kai Ole Hartwig
Weil du könntest ja zum Beispiel einfach ein Container-Image löschen,
00:33:35
Kai Ole Hartwig
und den gleichen Tag nochmal vergeben.
00:33:38
Kai Ole Hartwig
Also egal, ob das ein Commit ist oder eine semantische Versionsnummer, du könntest halt sagen, okay, bau mir halt Latest nochmal neu.
00:33:45
Kai Ole Hartwig
Und Latest ist ja so ein Ding, was zum Beispiel ja total häufig ver... Ja, genau.
00:33:48
Daniel Langemann
Niemand benutzt Latest.
00:33:52
Kai Ole Hartwig
Aber was ja einfach gar keinen Bezug zur Realität hat, das ändert sich ja, was Latest ist.
00:34:00
Daniel Langemann
Ja, also du kannst in dem Repository einstellen, dass Tags, also in dem Container Repository, dass Tags nicht wiederverwendbar sind.
00:34:08
Kai Ole Hartwig
Ja, musst du halt machen.
00:34:09
Daniel Langemann
Also das habe ich jetzt natürlich nicht gesagt, aber davon gehe ich aus, weil ansonsten hast du ganz viele Probleme, wenn Tags nicht wieder, wenn Tags wiederverwendet werden oder wiederverwendbar sind.
00:34:09
Kai Ole Hartwig
Ja.
00:34:09
Kai Ole Hartwig
Ja.
00:34:20
Daniel Langemann
Also hier die üblichen Pod, Dev und Staging Tags, wo die Container immer neu gepusht werden.
00:34:26
Daniel Langemann
Aber da hast du andere Probleme dann.
00:34:27
Daniel Langemann
Richtig.
00:34:28
Kai Ole Hartwig
Habe ich nicht, weil haben wir ja gesetzt.
00:34:30
Kai Ole Hartwig
Ja.
00:34:34
Kai Ole Hartwig
Aber sowas wie Latest ist halt so ein Standardding.
00:34:38
Kai Ole Hartwig
Jeder schreibt irgendwie Latest und jeder schreibt irgendwie Def.
00:34:42
Kai Ole Hartwig
Und da entstehen natürlich, wenn du das so machst, hast du natürlich irgendwann Probleme.
00:34:49
Kai Ole Hartwig
Es ist auch total toll, immer Latest zu ziehen.
00:34:52
Kai Ole Hartwig
Das gibt Sicherheit, dass man weiß, was drin ist.
00:34:55
Daniel Langemann
Ja, es ist natürlich einfacher, ein Skript zu schreiben, also in meinem Kontext jetzt mit AWS oder so, ist es einfacher ein Skript zu schreiben, was einfach sagt, ne, baue oder deploy diesen Task nochmal neu und die Version soll latest sein.
00:35:09
Daniel Langemann
Easy festgeschrieben, weil ansonsten musst du ja bei jedem Deployment rausfinden, was die Version ist, die deployed wurde und auch den AWS-Task anpassen.
00:35:18
Daniel Langemann
Also du musst so ein bisschen mehr machen und ich kann nicht schon verstehen, dass dann

Entwicklung und Anpassung von Pipelines

00:35:22
Daniel Langemann
es einfacher ist oder dass man dann geneigt ist zu sagen, ich möchte prod, dev oder stage deployen.
00:35:22
Kai Ole Hartwig
Genau.
00:35:23
Kai Ole Hartwig
Kann man so machen.
00:35:27
Daniel Langemann
Das ist ein fester Wert und den muss ich nicht irgendwo herbekommen.
00:35:29
Daniel Langemann
Hm.
00:35:34
Kai Ole Hartwig
kommt halt darauf an, was man an einem weiteren Setup haben möchte.
00:35:37
Kai Ole Hartwig
Ich sage jetzt mal, das ist ja auch so ein gewisser Reifegrad, der sich entwickelt.
00:35:41
Kai Ole Hartwig
Niemand startet damit und sagt jetzt, ich baue jetzt die perfekte Pipeline oder den perfekten Cluster, sondern das ist ja ein Aufbauen und eine Evolution und es verändert sich ja auch mit den Dingen, die
00:35:51
Daniel Langemann
Ja, ja.
00:36:00
Kai Ole Hartwig
man erfüllen will oder erfüllen muss oder der Erfahrung auch haben.
00:36:04
Kai Ole Hartwig
Wenn dir fünfmal oder vielleicht auch zwei-, dreimal nur das System kaputt gegangen ist, dann schreibst du ja hoffentlich irgendwann einen Test dafür, dass das nicht mehr passiert.
00:36:14
Kai Ole Hartwig
So.
00:36:16
Kai Ole Hartwig
Und genauso funktioniert das ja mit Pipelines und diesen ganzen Prozessen.
00:36:20
Kai Ole Hartwig
Es ist ja nicht so, dass auch die Pipelines und die Steps, die wir jetzt gerade hier machen,
00:36:28
Kai Ole Hartwig
dass das über Nacht entstanden ist.
00:36:30
Kai Ole Hartwig
Also ich habe irgendwann mit CI-CD angefangen, als Jenkins noch Hudson hieß.
00:36:37
Daniel Langemann
Oh ja, mhm.
00:36:39
Kai Ole Hartwig
So, und irgendwann saß ich dann auch mal in einer Runde, wo jemand seine Probleme mit der CI-CD-Pipeline berichtet hat und erzählt hat, naja, wir spielen das dann auf den Testserver aus und dann machen wir Composer Update.
00:36:58
Kai Ole Hartwig
Und dann spielen wir das auf den Produktiv-Server auf und da machen wir Composer Update.
00:37:06
Kai Ole Hartwig
Und dann halt so dieses Problem beschrieben hat, was auch ganz logisch ist, wenn man halt weiß, wie das funktioniert, aber ganz logisch war an der Stelle.
00:37:14
Kai Ole Hartwig
dass dann halt die Versionen und gar nicht stimmt und da geht immer so viel kaputt und irgendwie ist dieses automatische Deployment ja überhaupt gar nicht sinnvoll und diese Pipelines, das hilft ja alles nichts.
00:37:26
Kai Ole Hartwig
Früher war alles besser mit FTP so ungefähr, aber das ist halt so ein, man muss sich halt daran gewöhnen, im ersten Schritt dieser Pipeline wird meinetwegen das Composer Update gemacht,
00:37:26
Daniel Langemann
SFTP.
00:37:43
Kai Ole Hartwig
wenn man das automatisch macht, weil man mit Paketen arbeitet, die dann das triggern.
00:37:50
Kai Ole Hartwig
Und danach ist das aber festgelegt und wenn man jetzt nicht diese Bildartefakte mitschleppt, dann macht man immer ein Composer.
00:37:57
Kai Ole Hartwig
Ja, eigentlich ist halt
00:37:58
Daniel Langemann
Ja.
00:38:02
Kai Ole Hartwig
macht man in einer Pipeline, außer man hat so eine automatisierte Update-Pipeline-Geschichte da, idealerweise mit Renovate oder einem anderen Tool, das es macht, Depender-Bot oder so, hast du halt ja nie das Bedürfnis oder solltest du nie das Bedürfnis haben,
00:38:26
Kai Ole Hartwig
einfach Updates zu machen, ja, zu sagen, hier Composer Update und vor allem nicht, wenn du auf dem Server direkt drauf deployst, gar nicht mit Containern arbeitest und da sagst, das ist ein anderer Pipeline-Cheap irgendwie, ne, da brauchst du dir ja den Image-Bild, aber dann, dann
00:38:37
Daniel Langemann
Hmm.
00:38:40
Kai Ole Hartwig
hast du idealerweise ja auch in der Pipeline das PHP-Artefakt quasi zusammengebaut, das du dann rüberkopierst mit AirSync, ohne Git, ohne Tests, ohne, hast du nicht gesehen, ja, dass man auch diese Dinge rauslässt, Testfälle zum Beispiel gehören gar nicht auf ein Produktivsystem am Tagesende.
00:39:03
Kai Ole Hartwig
Also diese PHP-Unit-Testsachen, die ließen bei uns gar nicht mit in das Produktive oder in das Image dann rein.
00:39:11
Kai Ole Hartwig
Selbst in das Test-Image sind sie nicht drin, nachher reingebaut.
00:39:14
Daniel Langemann
Sollten sie auch nicht.
00:39:14
Kai Ole Hartwig
Das sind alles Sachen, die vorher ausgeführt werden und dann wird gefiltert.
00:39:15
Daniel Langemann
Ich meine, das wird sich halt zurückgehen.
00:39:17
Daniel Langemann
Hm.
00:39:22
Kai Ole Hartwig
Und genauso, wenn man halt auf Bare Metal oder V-House oder so rübergeht, ist es ja nicht so, dass auch Composer da leben sollte.
00:39:28
Kai Ole Hartwig
Also Composer sollte da auch als Executive gar nicht existieren.
00:39:32
Kai Ole Hartwig
Aus meiner Sicht, ja, du möchtest da gar kein Composer-Install machen.
00:39:37
Kai Ole Hartwig
Du möchtest eigentlich dein festes Set an PHP-Dateien nehmen und
00:39:43
Kai Ole Hartwig
dort rüberbringen und dann hoffentlich bitte nicht den SSH-Key in der Variable im GitLab haben als protected, sondern sondern bitte über OIDC oder meinetwegen über ein Secret, das man aus einem Vault oder so gezogen hat, sich anmelden kann.
00:40:05
Daniel Langemann
Ja.
00:40:08
Kai Ole Hartwig
weil wenn du auch, also egal wo, in allen, in der Statistik, OWAPS Top 10 ist es so, dass in den nicht-menschlichen Interaktionen langlebende Secrets auf Platz 3 im Moment platziert wurde in den Top 10.
00:40:27
Kai Ole Hartwig
Und ich glaube, dem sollte man
00:40:29
Kai Ole Hartwig
bisschen mehr Aufmerksamkeit schenken und sagen, okay, lasst uns schauen, dass wir die Secrets möglichst rausbekommen und nur mit kurzlebigen Dingen arbeiten zum Identifizieren und auch so Sachen nutzen wie MTLS etc.,
00:40:46
Daniel Langemann
Mhm.
00:40:48
Kai Ole Hartwig
dass wir unsere Prozesse sauber haben, ohne Secrets, ohne Credentials auskommen.
00:40:54
Kai Ole Hartwig
Und dann quasi wie hier unser Podcast unterwegs ist mit Secrets not included, dass man das so ein bisschen zum Motto der Pipelines und Container und Bildartefakte macht, dass die Geheimnisse tatsächlich einfach nur in der Runtime existieren.
00:41:11
Daniel Langemann
Was ich als Fazit aber noch ganz gut fand, das hast du gerade eben kurz angeschnitten, niemand kommt in ein Projekt und baut eine fertige Pipeline bis zum Ende und in alle Richtungen ausgeprägt, sondern das ist
00:41:25
Daniel Langemann
Immer nach Bedarf, je nach Teamgröße, gesetzliche Vorschriften, was auch immer, gibt es ganz viele unterschiedliche Anforderungen.
00:41:33
Daniel Langemann
Und dieses, ich würde jetzt auch von vornher nicht hingehen und direkt alles einbauen, sondern erst mal bauen, automatisieren, dann sagen, was sind die nächsten großen Schmerzen.
00:41:44
Daniel Langemann
Und die können je nach Projekt unterschiedlich sein.
00:41:46
Daniel Langemann
Also es gibt nicht one size fits all.
00:41:49
Daniel Langemann
Und das ist die Pipeline, die macht alles richtig und ihr alle anderen macht alles falsch.
00:41:53
Daniel Langemann
Das gibt es nicht.
00:41:54
Kai Ole Hartwig
Also das Einzige, wo ich dir widerspreche, S-Bone.
00:41:59
Kai Ole Hartwig
Das musst du aus Compliance-Gründen halt haben, genauso wie das Monitoring darauf.
00:42:04
Kai Ole Hartwig
Das sind halt gesetzliche Anforderungen und ansonsten
00:42:11
Kai Ole Hartwig
Pain-Driven Development.
00:42:13
Daniel Langemann
Ja.
00:42:14
Daniel Langemann
Ja.
00:42:14
Kai Ole Hartwig
Oder man hat halt, man sagt halt, okay, wir nehmen ein Set, das macht schon sehr, sehr viel von diesen Dingen, die wir haben wollen und das funktioniert und zieht sich öffentlich aus die ICD-Components für die Sachen rein und baut sich halt das quasi wie mit Lego zusammen.
00:42:35
Kai Ole Hartwig
Ja, mit Klemmbaustein, man darf ja Lego gar nicht sagen.
00:42:39
Kai Ole Hartwig
mit Klemmbausteinen zusammen und ist dann damit schneller.
00:42:47
Kai Ole Hartwig
Man muss das Rad nicht neu erfinden, auch bei Pipelines heute nicht mehr.
00:42:50
Kai Ole Hartwig
Ja, Ja, so.
00:42:51
Daniel Langemann
Das ja stimmt.
00:42:54
Kai Ole Hartwig
Ich glaube, das ist ein gutes Fazit.
00:42:56
Kai Ole Hartwig
Kleinstarten, groß werden, wiederverwenden, S-Bomb erfüllen, weil man das erfüllen muss und gut ist.
00:43:06
Kai Ole Hartwig
Der Rest ist geschenkt.
00:43:07
Kai Ole Hartwig
Und Und vielleicht noch zum Schluss, also man kann ja auch immer erfahrene Leute Fragen anschreiben.
00:43:17
Kai Ole Hartwig
Und es gibt, glaube ich, wenig Menschen, die jetzt sagen, wir finden da keine Lösung, wie man euch da weiterbringt.
00:43:25
Daniel Langemann
Fragen kosten nichts.
00:43:25
Daniel Langemann
Zumindest als Beratung.
00:43:26
Daniel Langemann
Dann ciao.
00:43:29
Kai Ole Hartwig
Ja, die erste Frage kostet nichts ungefähr.
00:43:36
Kai Ole Hartwig
Wunderbar.
00:43:37
Kai Ole Hartwig
Dann, glaube ich, sind wir am Ende unserer wunderbaren Folge diese Woche und sehen uns nächste Woche wieder.
00:43:46
Kai Ole Hartwig
Bis dahin.
00:43:47
Kai Ole Hartwig
Macht's gut.
00:43:48
Kai Ole Hartwig
Tschö.