Salt API
Salt per HTTP fernsteuern
API installieren
Konfiguration
Die nachfolgend verwendete PAM-Autentifizierung verlangt, dass der Salt-Master Leserechte für die Dateien/etc/shadow
und /etc/gshadow
besitzt.
Seit Version 3006 wird der Salt-Master nicht mehr mit Root-User ausgeführt.
Auf Debian und Ubuntu fügen Sie den salt
User zur Gruppe shadow
hinzu, um die Leseberechtigung zu erreichen.
usermod -a -G shadow salt
Um die API zu aktivieren, fügen Sie die folgenden Zeilen in eine neue Datei /etc/salt/master.d/api.conf
ein:
Starten Sie nach der Änderung der Konfiguration den Salt-Master und die API neu.
Es können weitreichende Einschränkungen pro User konfiguriert werden, um nicht alle Funktionen und alle Minions über die API verfügbar zu machen. Siehe offizielle Dokumentation.
Dieses einfache Beispiel sollten Sie nicht in den produktiven Betrieb übernehmen. Die API verwendet kein SSL (HTTPS) und der Benutzer hat uneingeschränkte Rechte.
Einen Benutzer anlegen
Zugriffe auf Key-Verwaltung beschränken
API Zugriffe auf Minions und Funktionen beschränken
Testen
Erster Test
Anmelden und API Token holen
Eine Anfrage stellen, z.B. salt '*' test.ping
über die API auslösen.
Als Rückgabeformat kann auch JSON gewählt werden.
API Anfragen können auch ohne Token an den /run
Endpunkt gesendet werden. Benutzername, Password und Authentifizierungsmethode müssen dann im Body enthalten sein.
Ein simples Python-Beispiel
State.apply per API durchführen
Beding durch einen Fehler, erwartet die API arg
immer als Liste. Sie müssen mindestens zwei Argumente arg="X" angeben,
wenn die Funktion mit Argumenten ergänzt werden soll. Geben Sie beispielsweise den Timeout an, obwohl dies nicht zwingend notwendig ist.
Alternativ formatieren Sie arg
als Liste, z. B. -d '["arg=test"]'.
Asynchrone Requests durchführen
Egal, ob Sie einen Salt »Befehl« über die Kommandozeile oder die API durchführen, ja nach Anzahl der adressierten Minions und der verwendeten Module oder States kann der Lauf sehr lange dauern. Wenn Sie eigene Applikationen auf Basis der API entwickeln, müssen HTTP Clients u.U. sehr lange auf eine Antwort warten. Ein asynchrones Ausführen ist oft ratsamer. Die API beendet die HTTP Anfrage sofort und gibt eine Job-ID zurück. Die Jobs laufen dann im Hintergrund. Anschließend kann man periodisch im Job-Cache nachschauen, welcher Minion den Job bereits abgearbeitet hat und mit welchem Ergebnis.
Wenn Sie einen MySQL-Jobcache aktiviert haben, können Sie das Ergebnis eines asynchronen Jobs auch aus der Datenbank lesen.
Pillars per API schreiben
Wenn ein API-User uneingeschränkte @wheel
Rechte hat, kann er die vollständige Kontrolle über das Betriebssystem übernehmen.
Die Funktionen pillar_roots.read
und pillar_roots.write
können auf das komplette Dateisystem zugreifen. Lesend und schreibend!
curl -sS http://salt:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: $(cat /tmp/token)" -d fun=pillar_roots.read -d client=wheel -d path=../../etc/passwd
Einen neuen Minion registrieren
Prüfen, ob für einen Minion schon Zertifikate generiert wurden:
Wenn kein Zertifikat vorhanden, ein neues generieren und downloaden. Der Download besteht aus einem Tar-File, in welchem minion-Key und Minion-Zerifikat enthalten sind.
Beispiel Systeme beim Hochfahren automatisch registrieren
Achten Sie darauf, dass die Salt-API im Netzwerk lauscht und nicht nur auf localhost
.
Passen Sie ggf. die Datei /etc/salt/master.d/api.conf
an und starten Sie die API mit service salt-api restart
neu.
https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html
Last updated