KI für DevOps-Engineers – Teil 1: Die Grundlagen von DevOps-KI
DevOps ist ein entscheidender Erfolgsfaktor in der Softwareentwicklung, und wir sind definitiv alle auf die eine oder andere Weise auf KI gestoßen. Eine
Dies ist der zweite Post in einer Serie über IT-Compliance mit Mondoo. In diesem Beitrag geht es darum, wie Sie Ihre eigenen benutzerdefinierten Policies zu Mondoo hinzufügen können.
Lesen Sie unbedingt den vorherigen Post bevor Sie diesen hier lesen. Er wird Sie mit Mondoo und der Infrastruktur vertraut machen, für die wir eine Policy schreiben werden.
Um dies zu veranschaulichen, werden wir eine Policy schreiben, die nach Attributen der zuvor installierten NodeJS-App sucht.
Hier sind die wichtigen Fakten zu dieser App:
/etc/nginx/sites-available/default
konfiguriert./home/adminuser/myapp/index.js
Wenn die App ausgeführt wird, gibt sie einfach eine Begrüßungsnachricht zurück:
1$ curl <IP-ADDRESS-OF-YOUR-VM>
2Hello World from host mondoo-demo-webserver-non-compliant!
Policies, zu Deutsch "Richtlinien", sind die Spezifikationen, die cnspec verwendet, wenn ein System gescannt wird. Stellen Sie sich eine Policy als eine Checkliste vor, auf die sich cnspec stützt, um sicherzustellen, dass ein System konform ist. In Mondoo und cnspec werden diese Sammlungen von Compliance-Anforderungen als gut lesbarer Code ausgedrückt. Ein Beispiel für eine Policy könnte sein: "Port 22 sollte immer offen sein".
Mehr zum Thema Policies gibt es hier.
Um die Regeln unserer Policy auszudrücken, müssen wir sie in einer Sprache verfassen, die Mondoo verstehen kann. Diese Sprache wird Mondoo Query Language oder kurz mql genannt.
So würde eine Abfrage für das SSH-Port-Beispiel aussehen:
1ports.listening.any( port == 22 )
Sie können jede Abfrage lokal testen, indem Sie die Shell cnspec verwenden:
1$ cnspec shell local
2cnspec> ports.listening.any( port == 22 )
3[ok] value: true
Um diese Abfragen nutzen zu können, müssen wir sie in eine Policy-Datei einfügen.
Das Schreiben von benutzerdefinierten Policies für Mondoo ist recht einfach. Alle Informationen werden in einer YAML-Datei gespeichert. Wir nennen eine Datei, die Policies sammelt, in Mondoo ein "Policy Bundle". Sobald die Datei geschrieben ist, können wir sie auf Mondoo hochladen und sie bei jedem Scan unserer Assets automatisch überprüfen lassen.
Ich habe eine benutzerdefinierte Policy für diesen Blogbeitrag vorbereitet:
1policies:
2 - uid: webserver
3 name: Webserver Baseline
4 version: 1.0.0
5 authors:
6 - name: Infralovers GmbH
7 email: team@infralovers.com
8 docs:
9 desc: Test suite for Infralovers blog post
10 tags:
11 mondoo.com/category: security
12 mondoo.com/platform: linux,ubuntu,debian
13 groups:
14 - title: SSH
15 filters: |
16 asset.family.contains("linux")
17 checks:
18 - uid: ssh-01
19 title: Ensure SSH port is listening
20 mql: ports.listening.any( port == 22 )
21 - title: Webserver
22 filters: |
23 asset.family.contains("linux")
24 checks:
25 - uid: webserver-01
26 title: Ensure webserver ports are listening
27 mql: |
28 ports.listening.any( port == 80 )
29 ports.listening.any( port == 3000 )
30 - title: Packages
31 filters: |
32 asset.family.contains("linux")
33 checks:
34 - uid: package-01
35 title: Ensure nginx is installed
36 mql: package('nginx').installed == true
37 - uid: package-02
38 title: Ensure nodejs is installed
39 mql: package('nodejs').installed == true
40 - uid: package-03
41 title: Ensure npm is installed
42 mql: package('npm').installed == true
43 - title: Files
44 filters: |
45 asset.family.contains("linux")
46 checks:
47 - uid: file-01
48 title: Ensure nginx config is present
49 mql: file('/etc/nginx/sites-available/default').exists == true
50 - uid: file-02
51 title: Ensure application file is present
52 mql: file('/home/adminuser/myapp/index.js').exists == true
Sie finden diese benutzerdefinierte Policy auch im begleitenden Git-Repository zu dieser Blogbeitragsreihe. Schauen Sie in das Verzeichnis "policies", um diese zu finden.
Lassen Sie uns analysieren, was in dieser Policy vor sich geht: In den ersten Zeilen werden Metadaten für die Policy definiert. Das sind Informationen darüber, wer die Policy geschrieben hat, in welcher Version sie vorliegt usw.
Alles, was nach dem groups-Attribut kommt, ist der Punkt, an dem es interessant wird. Ich habe vier verschiedene Gruppen definiert. Es ist immer sinnvoll, Kontrollen zu verschiedenen Problembereichen in verschiedene Gruppen zu unterteilen. Das erleichtert später die Wartung.
Die erste Gruppe hat den title "SSH". Hier definieren wir alle Überprüfungen, die sich mit dem SSH-Protokoll befassen. Wenn Sie sich das Attribut checks ansehen, können Sie sehen, dass ich eine MQL-Abfrage verwende, um zu überprüfen, ob der SSH-Port Nummer 22 lauscht:
ports.listening.any( port == 22 )
Das filter-Attribut teilt Mondoo mit, auf welchen Assets diese Policy-Gruppe ausgeführt werden soll. Wir haben uns für asset.family.contains("linux")
entschieden. Das bedeutet, dass Mondoo die zugehörigen Policies nur auf Assets ausführt, auf denen ein Linux-Betriebssystem läuft. Wenn Sie keinen Filter definieren, führt Mondoo die Prüfung nicht durch!
Die zweite Gruppe "Webserver" prüft auf die notwendigen lauschenden Webserver-Ports: 80 und 3000.
Die Gruppe drei prüft, ob die erforderlichen Pakete installiert sind, und die vierte Gruppe prüft, ob die Konfigurationsdateien vorhanden sind.
Sobald Sie Ihre Datei gespeichert haben, gehen Sie in Ihr Mondoo Dashboard. Klicken Sie in der Seitenleiste auf Registry. Klicken Sie auf der Seite Registry auf die violette Plus-Schaltfläche in der oberen rechten Ecke:
Ziehen Sie Ihre Policy-Datei per Drag & Drop in das Dialogfeld Upload Policy.
Suchen Sie nach dem Hochladen in der Suchleiste auf der Seite "Policy" nach dem Namen der Policy. Wenn Sie es gefunden haben, bewegen Sie den Mauszeiger darüber und klicken Sie auf das aktiviert-Symbol. Es sieht aus wie ein Balkendiagramm mit einem Pfeil obendrauf.
Jetzt wird Ihre Policy bei jeder Überprüfung Ihrer Assets berücksichtigt, solange das filter-Attribut der Policy-Gruppe damit übereinstimmt.
Um die Dinge zu beschleunigen, können Sie manuell einen Scan für Ihr Asset auslösen:
1$ cnspec scan local
Überprüfen Sie Ihr Asset. Wenn Sie dieser Blog-Post-Serie folgen, sollte sie mondoo-demo-webserver-non-compliant
heißen. Sie sollten sehen, dass Ihre Policy von Mondoo überprüft wurde:
Sie können auch die spezifischen "Checks" überprüfen, um zu sehen, wie sie abgeschnitten haben:
Mondoo wird nicht nur mit vielen vordefinierten Policies geliefert, sondern ermöglicht es uns auch, unsere eigenen hinzuzufügen. Die MQL-Sprache ist sehr leistungsfähig und ermöglicht es uns, Policies für viele verschiedene Problembereiche zu definieren. Im Vergleich zu anderen Policy-as-Code-Tools ist die Syntax meiner Meinung nach leicht verständlich und der Overhead wird auf ein Minimum reduziert.
Wie Sie sehen, können wir Compliance-/Sicherheitsprüfungen oder sogar funktionale Spezifikationen schreiben. Dies wird besonders hilfreich sein, wenn wir anfangen, Policies mit cnspec zu schreiben, um z.B. Terraform-Code zu verifizieren.
Im nächsten Beitrag werde ich nun endlich versuchen, die Compliance-Probleme zu beheben, die ich in diesen Beiträgen entdeckt habe. Ich weiß, das wollte ich ursprünglich in diesem Post machen. Ich wollte jedoch zuerst einige benutzerdefinierte Policies hinzufügen.
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