Daten kübelweise mit S3 ablegen

Einführung in MinIO und den MinIO-Client

MinIO ist eine freie Implementierung des Amazon Simple Storage Services (kurz: S3), womit sich Dateien als Objekte “kübelweise”, d.h. in sogenannten Buckets, ablegen lassen. Weitere Hierarchiestufen gibt es nicht; auch die Berechtigungen lassen sich nur auf Stufe Bucket festlegen.

In diesem Artikel soll gezeigt werden, wie sich MinIO in Betrieb nehmen und mit dem MinIO-Client mc ansprechen lässt. Hierzu soll wie bereits im spiped-Artikel das Herr der Ringe-Universum zur Veranschaulichung dienen ‒ und Debian 12 “Bookworm” als Betriebssystem. So hat sich Gondor bereiterklärt, das Hosting zu übernehmen. Und so wird MinIO installiert und konfiguriert:

faramir@gondor:~$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
faramir@gondor:~$ chmod +x minio
faramir@gondor:~$ cat >> ~/.bashrc
export MINIO_ROOT_USER=aragorn
export MINIO_ROOT_PASSWORD=arwen
[Ctrl]-[D]
faramir@gondor:~$ . ~/.bashrc
faramir@gondor:~$ mkdir ~/minio-data

Benutzername und Passwort werden als Umgebungsvariablen gespeichert. Es wird auch ein Datenverzeichnis für MinIO angelegt. Nun kann der Server bereits gestartet werden:

faramir@gondor:~$ ./minio server minio-data/

Unter http://localhost:9000 liesse sich nun ein Web-Interface aufrufen, worauf doch an dieser Stelle verzichtet wird. Stattdessen soll mc, der MinIO-Client für die Kommandozeile, zum Einsatz kommen. Auch dieser muss heruntergeladen und ausführbar gemacht werden:

faramir@gondor:~$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
faramir@gondor:~$ chmod +x mc

Nun soll für mc ein Alias für die lokale MinIO-Instanz eingerichtet werden, welches die Zugriffe erleichtern wird:

faramir@gondor:~$ ./mc alias set local http://localhost:9000 aragorn arwen
Added `local` successfully.

Unter diesem Alias erfolgt nun der Zugriff auf MinIO ohne weitere Authentifizierung. Als erstes soll nun ein Bucket erstellt werden, der zeitgeistgemäss mit „innovationen“ betitelt wird, wozu der Befehl mc mb (MinIO Client, make bucket) zum Einsatz kommt:

faramir@gondor:~$ ./mc mb local/innovationen
Bucket created successfully `local/innovationen`.

Bei der Belagerung Gondors war u.a. eine Vorrichtung im Einsatz, die der lokale Chronist unter dem Titel „Frittierwagen“ als Stich abgelegt hat. Dieses Artefakt soll in dem entsprechenden Kübel abgelegt werden:

faramir@gondor:~$ ./mc cp frittierwagen.png local/innovationen/
faramir@gondor:~$ ./mc ls local/innovationen/
[2022-12-21 21:14:13 CET] 1.9MiB STANDARD frittierwagen.png

Das hat funktioniert. Doch kann man auch vonseiten Rohans auf diese technische Errungenschaft zugreifen? Dazu müsste dort auch mc eingerichtet werden. Oder einfach eine Alternative wie s3cmd, womit man auch auf die Amazon-Variante von S3 zugreifen kann, falls man dereinst doch noch mit Mordor Geschäfte machen möchte:

eomer@rohan:~$ sudo apt install -y s3cmd
eomer@rohan:~$ cat > ~/.s3cfg
host_base = gondor:9000
host_bucket = gondor:9000
use_https = False
access_key = aragorn
secret_key = arwen
[Ctrl]-[D]
eomer@rohan:~$ s3cmd ls s3://innovationen
2022-12-21 20:14      1965381  s3://innovationen/frittierwagen.png

Der access_key entspricht dem MinIO-Benutzernamen; der secret_key dem MinIO-Passwort. (Bei MinIO ist man von den S3-typischen Bezeichnungen weggekommen.)

Der Zugriff auf den Bucket im entfernten Gondor funktioniert. So schickt man schnell ein paar Feriengrüsse dorthin:

eomer@rohan:~$ s3cmd put ansichtskarte.png s3://innovationen

In Gondor freut man sich darüber und sichert die Datei gleich lokal zur Betrachtung:

faramir@gondor:~$ ./mc ls local/innovationen
[2022-12-21 21:41:27 CET] 1.9MiB STANDARD ansichtskarte.png
[2022-12-21 21:14:13 CET] 1.9MiB STANDARD frittierwagen.png
faramir@gondor:~$ ./mc cp local/innovationen/ansichtskarte.png .

Noch schöner wäre es allerdings, wenn man nicht die mc-Befehle für den Zugriff verwenden müsste, sondern die Standard-Unix-Werkzeuge dafür verwenden könnte. Auch das geht wunderbar mit einem FUSE für S3, das unter dem Debian-Paket s3fs zur Verfügung steht:

faramir@gondor:~$ sudo apt install -y s3fs
faramir@gondor:~$ cat > ~/.passwd-s3fs
aragorn:arwen
[Ctrl]-[D]
faramir@gondor:~$ chmod 600 ~/.passwd-s3fs
faramir@gondor:~$ mkdir ~/innovationen
faramir@gondor:~$ s3fs innovationen ~/innovationen -o use_path_request_style,url=http://localhost:9000
faramir@gondor:~$ ls ~/innovationen/
ansichtskarte.png  frittierwagen.png
faramir@gondor:~$ du -h ~/innovationen/*
1.9M    /home/faramir/innovationen/ansichtskarte.png
1.9M    /home/faramir/innovationen/frittierwagen.png

Im Gegensatz zu s3cmd legt s3fs Wert darauf, dass die Konfigurationsdatei eingeschränkte Zugriffsrechte hat. Es wird ein einzelner Bucket in ein lokales Verzeichnis gemounted. Der Mount kann mittels umount wieder entfernt werden:

faramir@gondor:~$ umount ~/innovationen

Das wäre eine kurze Tour durch den Simple Storage Service mit der freien Implementierung MinIO und den Hilfsprogrammen s3cmd und s3fs gewesen. Die grafische Benutzeroberfläche von MinIO ist auch sehr komfortabel. Auf Zusatzfunktionen wie Berechtigungen, Tags, Spiegelung usw. soll an dieser Stelle nicht eingegangen werden.