Pyark – CyberArk Enterprise Password Vault CLI Tool

Diverse Firmen setzen zur Zeit auf die proprietäre Enterprise Password Vault von CyberArk um sensitive Zugangsdaten, Zertifikate und SSH-Schlüssel sicher zu verwalten. Die Software ermöglicht es über ein Webinterface bspw. Benutzername und Passwort einer Applikation zu hinterlegen.

Sensitive Daten manuell via Webinterface abzulegen ist jedoch in der heutigen Zeit, wo Automation, Provisioning und Configuration Management zu den Grundpfeilern jeder optimierten IT-Infrastruktur gehört, kein gangbarer Weg mehr.

Entsprechend gehören saubere APIs auch zum „state of the art“ jeder grösseren Webapplikation. Denn ohne API lassen sich viele Prozesse überhaupt nicht automatisieren und optimieren.

Auch die Password Vault von CyberArk ermöglicht es gewisse Abläufe via API zu tätigen. Jedoch ist die API qualitativ nicht so weit wie man sich dies gern wünschte und diverse API Endpunkte sind noch nicht verfügbar. Das Verwalten von Accounts funktioniert jedoch soweit schon einwandfrei, womit bspw. Credentials während einer OS-Installation problemlos automatisch im digitalen Tresor abgelegt werden können.

Hierzu haben wir das CLI Tool Pyark geschrieben, welches auf GitHub unter der GPLv3 frei zur Verfügung steht.

Pyark

Pyark ist ein python-basiertes Utility, welches die Interaktion mit der Password Vault API vereinfacht. Das Tool lässt sich leicht in bestehende Prozesse integrieren und nimmt einem mühsame curl-Basteleien ab.

Ein möglicher Anwendungsfall ist das Ablegen des root-Passworts während der automatisierten Installation einer Linux Distribution. Bei Distributionen der Red Hat Familie kann das Script bspw. als Kickstart Post-Task ausgeführt werden um das root-Passwort sicher zu verwahren.

An dieser Stelle fragt man sich ggf. wieso hierzu überhaupt ein weiteres Tool notwendig sei, hierzu gibt es doch curl und Konsorten? Das Problem lässt sich leider nicht mit einem curl-Einzeiler beheben, denn die API ist so aufgebaut, dass zuerst die Authentisierung durchgeführt werden muss. D.h. in einem ersten Schritt wird der Benutzername und das Passwort des Service Accounts an die API gesendet. Authentifiziert CyberArk den Benutzer erfolgreich erhält man im HTTP Header CyberArkLogonResult ein Token zurück. Dieses Token muss für alle folgenden Anfragen verwenden werden. Somit müssen etwaige Fehler oder Authentisierungs-Probleme sauber abgefangen und auch das Token aus dem HTTP Header extrahiert werden, was mit curl nicht ganz trivial ist.

Zur Zeit unterstützt Pyark folgende Funktionen:

  • Accounts auslesen
  • Accounts erstellen
  • Accounts löschen

Dabei ist zu beachten, dass eine aktuelle Version der Password Vault installiert sein muss. Andernfalls besteht die Möglichkeit, dass die entsprechenden API-Endpunkte noch nicht integriert wurden. Hierzu verlangt man am besten vom Hersteller die passende API-Referenz Dokumentation und prüft, ob die Entpunkte vorhanden sind.

Installation

Die Installation ist soweit sehr simpel. Es kann wahlweise das GitHub Repository geklont und setup.py ausgeführt werden oder es wird mit pip install pyark direkt aus dem Internet installiert. Bei Bedarf kann natürlich auch nur das __init__.py kopiert und ausgeführt werden.

Beispiele

Untenstehend drei Beispiele, wie ein Account ausgelesen, erstellt und gelöscht werden kann.

  • Account auslesen:
$ pyark --base https://vault.example.com \
        --apiuser foobar                 \
        --apipassword supersecret42      \
        account get                      \
        --safe MySafe                    \
        --keywords bruce
  • Account erstellen:
$ pyark --base https://vault.example.com \
        --apiuser foobar                 \
        --apipassword supersecret42      \
        account create                   \
        --safe MySafe                    \
        --platformid TestPlatform        \
        --accountname brucewayne         \
        --address batcave.example.com    \
        --username brucew                \
        --password d4rkkn1ght
  • Account löschen:
$ pyark --base https://vault.example.com \
        --apiuser foobar                 \
        --apipassword supersecret42      \
        account delete                   \
        --safe MySafe                    \
        --accountname brucewayne         \
        --keywords bruce