x

Menü

Chef Automate - Erste Schritte

Erste Schritte mit Chef Automate anhand eines Beispiels, wie man nodes auf eine Unternehmens-konforme Konfiguration prüft

veröffentlicht in: infrastructure-as-code Datum: 14.05.2020
Martin Buchleitner, Senior IT-Consultant

Über den Autor

Martin Buchleitner ist ein Senior IT-Berater für Infralovers und für Commandemy. Twitter github LinkedIn

Alle Artikel von diesem Autor sehen

Was ist Chef Automate 2

Chef Automate stellt eine Plattform zur Verfügung, die es Entwicklern wie auch den Teams, die für Betrieb und Sicherheit zuständig sind, eine einheitliche Sicht auf die Applications und Infrastruktur Landschaft in einem Unternehmen zu bekommen. Chef Automate bietet hierzu auch die Möglichkeit multiple Datenzenren sowie auch Cloud Provider in diese Sicht einzubeziehen und so ein ganzheitliches Bild zu vermitteln.

Chef Automate bietet so zentral die Darstellung aber auch Analytik für Infrastruktur Automatisierung, die durch weitere Chef Technologien unterstützt wird. Chef Habitat wird hier für Paketierung und Automatisierung der Applikationen, Chef Infra für das Konfigurations Management verwendet und Chef Inspec findet Anwendung für die Sicherheits und Konformitäts Automatisierung. So ist Chef Automate messbar in der Lage die Geschwindigkeit von Software Auslieferungen als auch Effizienz zu unterstützen und dabei das Riskio zu minimieren.

Erste Schritte

Für die ersten Schritte wird im folgenden Vagrant verwendet um eine lokale Test-Installation von Chef Automate zu erstellen. Dies bedarf im Hintergrund einer Virtualisierung wie Virtualbox oder VMWare Fusion. Am einfachsten ist es hier einfach Virtualbox zu verwenden, da diese simpel zu installieren und zudem mit keinerlei Kosten verbunden ist. In diesen ersten Schritten werden auch nur die Kompatibilitätssicherung und Visualisierung beleuchtet.

Setup einer Chef Automate Test-Instanz

Um die Installation zu starten bedarf es nur dieser Vagrantdatei, die mit dem Namen Vagrantfile abgespeichert werden muss.

$tokenscript = <<-SCRIPT
cat > data-collector-token.toml <<EOF
[auth_n.v1.sys.service]
a1_data_collector_token = "KGN0YhXlXhQwhFxTnXLTPhfObKs="
EOF
./chef-automate config patch data-collector-token.toml
SCRIPT

$mlsascript = <<-SCRIPT
  if [ "$RESPONSE" == "YES" ]
  then
    ARGS='--accept-terms-and-mlsa'
  else
    echo 'You must say YES to continue'
    exit 1
  fi
  sudo ./chef-automate deploy $ARGS
SCRIPT

class MLSA
    def to_s
        print "I agree to the Terms of Service and the Master License and Services Agreement (YES/NO): \n"
        STDIN.gets.chomp
    end
end

Vagrant.configure(2) do |config|
  config.vm.provider "virtualbox" do |v|
    v.memory = 4096
    v.cpus = 4
  end

  config.vm.box = "bento/ubuntu-20.04"
  config.vm.synced_folder ".", "/opt/a2-testing", create: true
  config.vm.hostname = 'automate.192.168.33.199.xip.io'
  config.vm.network 'private_network', ip: '192.168.33.199'
  config.vm.provision "shell", inline: "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y unzip"
  config.vm.provision "shell", inline: "sysctl -w vm.max_map_count=262144"
  config.vm.provision "shell", inline: "sysctl -w vm.dirty_expire_centisecs=20000"
  config.vm.provision "shell", inline: "echo 192.168.33.199 automate.192.168.33.199.xip.io | sudo tee -a /etc/hosts"
  config.vm.provision "shell", inline: "curl -s https://packages.chef.io/files/current/automate/latest/chef-automate_linux_amd64.zip | gunzip - > chef-automate && chmod +x chef-automate"
  config.vm.provision "shell", env: {"RESPONSE" => MLSA.new}, inline: $mlsascript
  config.vm.provision "shell", inline: $tokenscript
  config.vm.provision "shell", inline: "DEBIAN_FRONTEND=noninteractive apt-get install docker -y"
  config.vm.provision "shell", inline: "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -"
  config.vm.provision "shell", inline: "add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable'"
  config.vm.provision "shell", inline: "apt-get update"
  config.vm.provision "shell", inline: "apt-cache policy docker-ce"
  config.vm.provision "shell", inline: "DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce"
  config.vm.provision "shell", inline: "apt-get clean"
  config.vm.provision "shell", inline: "usermod -a -G docker vagrant"
  config.vm.provision "shell", inline: "echo 'Server is up. Please log in at https://automate.192.168.33.199.xip.io/'"
  config.vm.provision "shell", inline: "echo 'credentials are in the automate-credentials.toml file. log in using vagrant ssh'"

end

Danach muss man in einem Terminal in genau dem oberen Verzeichnis den folgenden Befehl eingeben

vagrant up

Dieser Befehl sollte innerhalb von ein paar Minuten - ein wenig Abhänging von der Geschwindigkeit der Internetverbindung - eine virtuelle Maschine starten, auf der dann Chef Automate installiert ist. Während der Installation kommt jedoch auch eine Abfrage, ob man Terms of Services sowie die Zustimmung von Chef bzw Chef Automate annimmt. Damit wir nicht mit Hostnamen und DNS Fehlerquellen entstehen lassen, bedienen wir uns einfach dem Service xip.io. Hiermit kann man nun einfach per Browser auf folgenden URL zugreifen https://automate.192.168.33.199.xip.io Beim ersten Zugriff wird man hier noch eine Warnung bekommen, dass die Verbindung nicht sicher ist, da es sich hier um kein offiziell gültiges SSL Zertifikat handelt.

Um sich in der Installation anmelden zu können, muss man erst noch die initialen Administrator Zugangsdaten auslesen. Bei einer realen Installation sollte man diese dann auch sogleich ändern und entsprechend in einem sicheren Ort dokumentieren.

$ vagrant ssh
$ sudo cat automate-credentials.toml
url = "https://automate.192.168.33.199.xip.io"
username = "admin"
password = "3b52f84b09507413397b4b9381ec25be"

Bei dem folgenden Dialog über die Lizenz kann man mit der Trial License durchwegs für 60 Tage dann Chef Automate austesten.

Lizenz Dialog

Konformitätsscan

Bei Chef bedeutet der Begriff node jegliches System, das mit Chef verwaltet wird. Chef Automate erlaubt es uns nun den Status dieser nodes zu monitoren und zu visualisieren. Zum Beispiel kann man hier also Chef Inspec benutzen um die nodes auf Konformität zu scannen und das Ergebnis in Chef Automate visualisieren.

Aktuell findet man nach der Installation unter Infrastructure - Client runs sowie unter Compliance - Reports noch jeweils leere Berichtsseiten vor.

Chef Infra runs

Chef Compliance Reports

Dies wollen wir aber nun ändern und einfach ganz simple Profile anwenden um Ergebnisse zu generieren. Wir werden hierzu Docker verwenden, wo 2 vorgefertige Images ablaufen werden. Die folgenden Befehle lassen sich entweder auf der lokalen Maschine oder der virtuellen Chef Automate ausführen. Um das in Chef Automate zu machen, loggen wir uns in die VM mittels folgendem Befehl ein

vagrant ssh

Anschließend kann man das folgende Docker Image ausführen:

docker run learnchef/compliance-loader-fail

Die Ausgaben des Containers lassen wir hier nun erstmal beiseite und widmen uns jedoch dem, was in Chef Automate nun passiert ist. Chef Infra generiert einige Log Meldungen und danach scannt Chef InSpec die node gegen ein paar simple Konformitätsprofile und speichert das Ergebnis in Chef Automate ab.

In Chef Automate finden wir nun in Compliance - Reports das Ergebnis unseres aktuellen Scans.

Compliance reports

Wenn wir nun die Ansicht von der Übersicht auf die 1 Nodes umschalten, finden wir die aktuelle node gelistet

Compliance failed report

Wir finden hier nun die Zusammenfassung des Konformitätsscans mit all seinen Tests. Wenn wir nun auf den fehlerhaften Test package-02: Do not install Telnet Server gehen und auf der rechten Seite auf den + Knopf drücken, kommen wir zur folgenden Ansicht

Compliance failed detail view

Dieser Test kommt mit dem Docker Image innerhalb des Profils mit. Das Profil umfasst mehrere Tests die im weiteren controls genannt werden und in Chef Inspec geschrieben sind. Da Chef Inspec test legedlich Code sind und die Regeln eindeutig, können sie von jedem im Team verstanden werden und auch automatisiert getestet werden. Um dies zu verdeutlichen kann man hier nun auch auf den Source Knopf drücken und bekommt den Code dargestellt:

Compliance Test Source

controls lassen sich mit profiles in Pakete gruppieren und so für eine gewisse Menge an nodes ( zB Webserver, Datenbankserver, … ) wieder verwenden und es können so spezifische profiles für die jeweilige Menge gestaltet werden. profiles lassen sich in Chef Automate bzw Chef Infra Server, welcher dank Chef Habitat in einem Deploymentschritt installiert werden kann, speichern, verwalten und verteilen.

Änderungen zu Chef Automate 1

Mit Ende 2019 erreichte Chef Automate 1 das Ende seines Lebenszyklus und wird somit auch nicht länger unterstützt. Die aktuelle Chef Automate 2 Implementierung unterscheidet sich architektonisch und technisch zur Vorgängerversion.

  • Chef Manage Chef Automate 2 kann nicht wie Automate 1 als SAML Authentifizierungsproxy agieren
  • FIPS Chef Automate 2 unterstützt nicht den FIPS Modus
  • Disaster Recovery Chef Automate 2 kann aktuell nur mit einem Cold-Standby verwendet werden. Aktives Clustering wird nicht unterstützt
  • Kibana Dashboards Chef Automate 2 enthält keine Kibana Installation
  • SAML Konfigurations-Migration Chef Automate 2 unterstützt eine SAML Integration, aber dessen Konfiguration ist nicht kompatibel mit der Integration von Chef Automate 1. Nach einem Upgrade muss diese Konfiguration erst wieder erstellt weden.

Sollten diese Features in der aktuellen Chef Automate 1 aktiv sein, man die Migration aber dennoch durchführen will, muss man die Migration mit folgenden Flags starten:

  • –skip-fips-check
  • –skip-disaster-recovery-check
  • –skip-saml-check

Externer Elasticsearch Cluster

Sollte das aktuelle Chef Automate 1 bereits einen externen Elasticsearch Cluster verwenden, so bedarf es eines manuellen Eingriffs auf diesen Cluster. Hierfür sollte man den Customer Support kontaktieren, damit dieser die Schritte prüft und dann umsetzt.