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
Hinter mondoo befindet sich das Team, welches bereits maßgebend an InSpec sowie dem DevSec Projekt mitgearbeitet hat. Das Team arbeitet mit einer Passion daran IT Operationen für Menschen lesbar und ausfürbar zu machen.
Mit Mondoo kann man Informationen über die Verwundbarkeit seiner gesamten Infrastruktur erfassen. Mondoo ermöglich es von lokalen Linux Installationen, Servern auf Hardware, Docker Containern und selbst Kubernetes Clustern und Cloud Umgebungen Daten zu erfassen.
Zudem kann mondoo beim Build integriert werden, aber auch in sämtliche Laufzeitumgebunden. So kann mondoo einfach in bereits existierende CI/CD Prozesse integriert werden - so zum Beispiel auch als Teil von HashiCorp Packer oder Terraform, aber auch in sämtliche verfügbaren Instanzen oder Containern ,um die Sicherheit frühest möglich zu erhöhen.
Dieser Blog Post bezieht sich auf die Mondoo Packer Implementierung, die noch nicht packer init
verwendet. Hierzu folgt in Kürze noch ein Folgeartikel.
Wir starten hier in diesem Beispiel mit dem offiziellen Ubuntu Focal 20.04 LTS Image und lassen den mondoo Provisionerungsprozess innerhalb von Packer laufen. Für das initiale Setup ist es am einfachsten dermondoo Quickstart Dokumentation zu folgen, und anschließend auch der mondoo packer Dokumentation.
Wenn dann ein mondoo Agent registriert ist können wir auch mit dem packer Prozess beginnen.
data "amazon-ami" "ubuntu_focal" {
filters = {
name = "ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
region = "us-east-1"
}
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
ami_name = "mondoo-example ${local.timestamp}"
}
source "amazon-ebs" "ubuntu_focal" {
ami_name = "${local.ami_name}"
instance_type = "t2.micro"
region = "us-east-1"
source_ami = "${data.amazon-ami.ubuntu_focal.id}"
ssh_username = "ubuntu"
}
build {
sources = ["source.amazon-ebs.ubuntu_focal"]
provisioner "shell" {
inline = ["ls -al /home/ubuntu"]
}
provisioner "mondoo" {
on_failure = "continue"
}
}
Die Ausgabe des Packer Builds enthält dann die Ausgabe des mondoo Plugins.
packer build aws_ubuntu.pkr.hcl
amazon-ebs.ubuntu_focal: output will be in this color.
==> amazon-ebs.ubuntu_focal: Prevalidating any provided VPC information
==> amazon-ebs.ubuntu_focal: Prevalidating AMI Name: mondoo-example 20210303131641
amazon-ebs.ubuntu_focal: Found Image ID: ami-042e8287309f5df03
...
==> amazon-ebs.ubuntu_focal: Running mondoo (Version: 1.1.0, Build: 96bf459)
==> amazon-ebs.ubuntu_focal: activated continue on detected issues
==> amazon-ebs.ubuntu_focal: Executing Mondoo: [mondoo scan]
amazon-ebs.ubuntu_focal: .-.
amazon-ebs.ubuntu_focal: → loaded configuration from /home/m/.mondoo.yml
amazon-ebs.ubuntu_focal: : :
amazon-ebs.ubuntu_focal: → resolve assets
amazon-ebs.ubuntu_focal: ,-.,-.,-. .--. ,-.,-. .-' : .--. .--.
amazon-ebs.ubuntu_focal: → discover related assets for 1 assets
amazon-ebs.ubuntu_focal: : ,. ,. :' .; :: ,. :' .; :' .; :' .; :
amazon-ebs.ubuntu_focal: → resolved 1 assets
amazon-ebs.ubuntu_focal: :_;:_;:_;`.__.':_;:_;`.__.'`.__.'`.__.'
amazon-ebs.ubuntu_focal:
amazon-ebs.ubuntu_focal: → execute policies
amazon-ebs.ubuntu_focal: → establish connection to asset 34.203.240.185 (baremetal)
amazon-ebs.ubuntu_focal: → verify platform access to 34.203.240.185
amazon-ebs.ubuntu_focal: → gather platform details build= platform=ubuntu release=20.04
amazon-ebs.ubuntu_focal: → synchronize asset name=ip-172-31-24-155
amazon-ebs.ubuntu_focal: → run policies for asset asset=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal: → marketplace> fetched policy bundle from usptream policy=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal: → send all results asset=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal: → generate report asset=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal: → scan complete asset=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal: → render report asset=//assets.api.mondoo.app/spaces/beautiful-matsumoto-174617/assets/1pFSj47di9ALLhJM7QE33zsNrGq
amazon-ebs.ubuntu_focal:
amazon-ebs.ubuntu_focal: ip-172-31-24-155
amazon-ebs.ubuntu_focal: ================
amazon-ebs.ubuntu_focal:
amazon-ebs.ubuntu_focal: +----------------------------+
amazon-ebs.ubuntu_focal: | ___ |
amazon-ebs.ubuntu_focal: | / __| Fair 41/100 |
amazon-ebs.ubuntu_focal: | | (__ 75% complete |
amazon-ebs.ubuntu_focal: | \___| == == |
amazon-ebs.ubuntu_focal: +----------------------------+
amazon-ebs.ubuntu_focal:
amazon-ebs.ubuntu_focal: Url: https://mondoo.app/space/assets/1pFSj47di9ALLhJM7QE33zsNrGq?spaceId=my-test-space
amazon-ebs.ubuntu_focal:
amazon-ebs.ubuntu_focal: Asset Policy 1pFSj47di9ALLhJM7QE33zsNrGq
...
Dieser Bericht wird zugleich auch auf mondoo.app verfügbar gemacht und kann über die UI abgerufen werden. Das Standard Ubuntu AMI hat also den einen oder anderen Verbesserungsbedarf wie wir im Bericht von mondoo sehen können.
Nun wollen wir diese Funktionalität auch innerhalb von Gitlab CI/CD verwenden. Wir können hierzu aus dem Konfigurationsdialog auf mondoo.app den Base64 enkodierten String verwenden:
Mit diesen Daten erstellen wir eine CICD Variable innerhalb von Gitlab. Im before_script
Schritt installieren wir dann die mondoo Applikation und auch den mondoo packer Provisioner:
1stage: packer
2image:
3 name: hashicorp/packer:1.7.0
4 entrypoint:
5 [
6 "/usr/bin/env",
7 "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
8 ]
9variables:
10 MONDOO_CONFIG_PATH: "/tmp/mondoo.json"
11before_script:
12 - apk add --no-cach --quiet jq aws-cli gettext bash curl
13 - echo "$MONDOO_AGENT_ACCOUNT" | base64 -d > "$MONDOO_CONFIG_PATH"
14 - curl -sSL https://mondoo.io/download.sh | bash && mv mondoo /usr/local/bin/
15 - mkdir -p ~/.packer.d/plugins
16 - curl https://releases.mondoo.io/packer-provisioner-mondoo/latest.json | jq -r '.files[] | select (.platform=="linux").filename' | xargs -n 1 curl | tar -xz > ~/.packer.d/plugins/packer-provisioner-mondoo
17 - chmod +x ~/.packer.d/plugins/packer-provisioner-mondoo
18script:
19 - packer build aws_ubuntu.pkr.hcl
Mondoo ist sehr einfach zu verwenden und bietet ein benutzerfreundliches Userinterface, um die einzelnen Konfigurationen und Assets zu visualisieren. Auch das initiale Setup ist unkompliziert und gut dokumentiert. Mit wenigen Klicks kann man sich so ein eigenes Regelset in der UI zusammenstellen, um zum Beispiel Ausnahmen zu konfigurieren, da man root Logins unter Linux ermöglichen will, aber nur ohne Passwort.
Im Moment bestehen noch 2 Dinge, wo es noch Änderungsbedarf gibt:
Es wäre schön Änderungen in der Detektion eines einzelnen Assets über die Zeit zu sehen. So kann man Veränderungen die beim Betriebssystem oder auch der Provisionierung enstehen auch zurückverfolgen.
Im Anwendungsfall von Packer wäre es wünschenswert eine andere Ansicht des Assets zu bekommen. Im Moment wird die jeweilige IP dargestellt, wobei aber bei Packer der Name der Packerdefinition bzw Builds interessant wäre, um auch hier Veränderungen zu sehen. So bekommt man im Moment bei jedem Build ein neues Asset angezeigt und kann nach einer gewissen Zeit aber keine Zuordnung mehr zwischen Asset und Buildlauf treffen.
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