Was liegt näher, als immer wiederkehrende Aufgaben mit Skripten zu automatisieren. Das reduziert den Arbeitsaufwand wie auch die Fehleranfälligkeit. In der ... (mehr)

Man in the Middle hilft beim Debugging

Ist mitmproxy gestartet, bietet er einen Betriebsmodus, in dem er selbst als Webserver auftritt, um Informationen sowie die Zertifikate auszuliefern. Dazu müssen Sie ihn beispielsweise im Webbrowser als Proxy einstellen und dann die Adresse "http://mitm.it" aufrufen. Nun könnten Sie die Zertifikate im Browser installieren, was in unserem Fall aber nichts nützt, weil wir den Proxy ja mit Boto verwenden möchten.

Trotzdem können Sie hier die Zertifikate "herunterladen". Dann legen Sie sie im passenden Verzeichnis ab, unter Ubuntu etwa in "/usr/local/share/ca-certificates/", und führen anschließend »sudo update-ca-certificates --verbose« aus. Funktioniert alles, sehen Sie eine Meldung wie "I already trust 149, your new list has 150". Um sicherzugehen, dass das Zertifikat in der Keychain gelandet ist, verwenden Sie beispielsweise den folgenden Aufruf:

$ awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

Haben Sie dem System die Zertifikate des mitmproxy untergeschoben, können Sie den Proxy von Boto3-Skripts aus verwenden, indem Sie ihn bei der Konfiguration eines Clients als Parameter übergeben, etwa so:

ec2 = boto3.resource('ec2', config=Config(proxies={'https': 'localhost:8080'}))

Außerdem müssen Sie dem Python-Skript noch mitteilen, dass es die Zertifikatsliste verwenden soll, die das mitmproxy-Zertifikat enthält. Dies geschieht über eine Umgebungsvariable, die Sie in einem Python-Skript so setzen:

os.environ['REQUESTS_CA_BUNDLE'] = os.path.join('/etc/ssl/certs/', 'ca-certificates.crt')

Nun können Sie sich im mitmproxy-Fenster die Requests und die Antworten von Amazon ansehen (Bild 1).

Bild 1: Mit dem mitmproxy und passenden Zertifikaten lassen sich auch verschlüsselte Anfragen an AWS untersuchen.

An dieser Stelle noch ein Wort zu den in Boto3 verwendeten Client- und Resourceklassen: Vermutlich aus historischen Gründen sind manche Funktionen als Methoden der Clientklasse, andere aber als Methoden der jeweiligen Resource-Klasse implementiert (etwa oben die S3-Resource). Die Clientfunktionen sind eher low-level, während die Resourcen komfortablere Funktionen zum Umgang mit AWS bieten. Als Beispiel sei EC2 genannt, bei dem die Resource verschiedene Methoden zum Erzeugen von Instanzen, Netzwerken, Volumes und so weiter bietet. Zum Beenden einer Instanz müssen Sie aber den EC2-Client und dessen Methode "terminate_instances" verwenden.

Im Zweifelsfall müssen Sie in der Dokumentation nachsehen und die entsprechende Klasse instanziieren, die die gewünschte Funktion bietet. Die Konstruktoren beider Klassen erlauben es, eine AWS-Region als Parameter anzugeben, um eine andere als die konfigurierte Default-Region zu verwenden:

ec2client = boto3.client('ec2', region_name='us-east-1')

Verarbeitung von JSON

Die von AWS zurückgelieferten Werte sind verschachtelte Python-Dictionaries, die nicht immer sehr gut zu überblicken sind. Eine Alternative dazu, sie in Python näher aufzuschlüsseln, ist, sie in eine JSON-Datenstruktur zu wandeln und dann mit dem Tool "jq" weiterzuverarbeiten. Ein JSON-Modul, das Sie mit »import json« importieren, liefert Python bereits mit. Mit einem einzigen Aufruf wandeln Sie ein Dictionary in JSON um:

j = json.dumps(groups)

Mit der "dumps"-Methode liefert das Modul einen String zurück. Alternativ verwenden Sie "dump", dem Sie einen Filedeskriptor übergeben, zum Beispiel die Standardausgabe Stdout:

json.dump(groups, sys.stdout)
Bild 2: Mit Hilfe von JQ lässt sich die JSON-Ausgabe von Boto3 besser formatieren und farblich unterlegen.
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023