Apr 21, 2022 | OpenStack, Tutorial

S3-Object-Storage anlegen und nutzen

von

In Zeiten der Hochverfügbarkeit und mehreren Webservern muss irgendwie die Grätsche zwischen der zentralen Datenhaltung, Datensicherheit und schnellen Zugriffszeiten geschafft werden. Genau dafür nutzen immer mehr Anwender nun Technologien, die mit Schlagwörtern wie S3, Buckets, Objectstorage und Swift locken. Das bieten wir von NETWAYS Web Services auch schon seit einiger Zeit an, aber wie uns aufgefallen ist, scheinbar zu wenig präsent für unsere Kunden dokumentiert. Um etwas Licht ins Dunkel zu bringen, haben wir diesen Artikel erstellt. In diesem erklären wird daher Stück für Stück erklärt:

  • Warum Objectstorage
  • Erzeugen von S3-Credentials via OpenStack-API
  • Konfiguration von s3cmd
  • Anlegen eines neuen Buckets
  • Dateien im Bucket ablegen
  • Bucketinhalte listen
  • Datei aus Bucket herunterladen
  • weitere s3cmd Anwendungsbeispiele
  • Abschließendes

Warum Objectstorage?

Der S3-Object-Storage bietet viele Vorteile gegenüber lokal abgelegter Daten bzw. einem klassischen NFS-Storage, denn ein NFS-Setup besteht oftmals nur aus einem einzigen Server und stellt somit den single point of failure dar. Auch muss der Admin stets Sorge um die Performance des Storages und der bedienenden Webserver tragen. Ein weiterer Vorteil von Object-Storages ist die Größe und Anzahl für die zu speichernden Daten. Denn diese ist bei einem Object-Storage so gesehen unbegrenzt. Der Anbieter des Object-Storage (also im aktuellen Fall NWS) trägt dafür Sorge, dass hier niemals der Platz ausgeht. Bei dem eigenen NFS muss entsprechend die Größe von Anfang an in der Planung berücksichtigen und der Kunde zahlt auf Dauer die eingeplante Reserve mit. Bei einem Object-Storage wird nur das Volumen gezahlt, welches belegt ist. Erwähnenswert ist auch die Entlastung der Webserver, gerade im Hinblick auf lokal abgelegte Daten. Stellt man sich folgende Architektur vor: Die Anwendung wird auf mehreren Webservern betrieben, Bilder und andere Objekte werden im Object Storage aufbewahrt und durch eine intelligente Einbindung direkt an den Websitebesucher ausgeliefert, ohne die eigenen Webserver oder deren Bandbreite zu belasten. Kurzum, man gibt seiner Anwendung zu verstehen nicht konkret dieses Bild auszuliefern, sondern Anwendung gibt wiederum nur den Pfad des gespeicherten Bildes an den Besucher weiter. Das Bild wird letztlich direkt von dem dahinter liegenden Rados-Gateway ausgeliefert und wurde niemals vom App-Server ausgeliefert. Somit kommt es schnell beim Webseitenbesucher an, spart Bandbreite und mindert die Last auf dem eigenen Webserver und ist dennoch zentral gehalten. Übrigens bedient sich der Objectstorage an unserem Ceph, dort sind alle Daten über eine Vielzahl von Systemen verteilt und weisen auch selbstverständlich entsprechende Replica-Sets auf.

Erzeugen von S3-Credentials via OpenStack-API

Um bei NWS einen Object-Storage nutzen zu können, wird ein OpenStack-Account benötigt. Es ist wichtig zu beachten, dass die Credentials für S3 unter Verwendung des OpenStack Project User Accounts erstellt werden sollten. Details zu den Gründen, warum man nicht den eigenen NWS-ID-Benutzer verwenden sollte, findet man hier. Eine Anleitung, wie man den OpenStack Project User aktiviert, findet man in dieser Dokumentation. Nachdem dieser bereit steht, kann es auch schon losgehen. Im OpenStack wird zum Menüpunkt „API Zugriff“ gewechselt und die OpenStack RC Datei heruntergeladen (oben rechts). Dieses soeben heruntergeladene Script wird nun auf der lokalen Maschine gestartet. Dabei wird lediglich das OpenStack-Passwort abgefragt. Aber Achtung, es wird ein OpenStack-Client benötigt. 

source 9231-openstack-4707c-openrc.sh 
Please enter your OpenStack Password for project 9231-openstack-4707c as user 9231-openstack-4707c:

Nun müssen noch die EC2-Credentials für den S3-Zugriff erzeugt werden, hierzu dient das Kommando 

openstack ec2 credentials create

Das Ergebnis liefert eine vergleichbare Ausgabe, wie die Folgende 

+------------+------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                  |
+------------+------------------------------------------------------------------------------------------------------------------------+
| access     | aceab8b6b85c51f8d3b305aec1af39c2                                                                                       |
| links      | {'self': 'https://cloud.netways.de:5000/v3/users/24c527b4929f10bd6c6ee09af4b30be2/credentials/OS-EC2/aceab8b6b85c51f8d3b305aec1af39c2'} |
| project_id | a40c737aaf3027d87e98f309f9f671d4                                                                                       |
| secret     | e5d312a7627cdf2a87ac4322a6d7716b                                                                                       |
| trust_id   | None                                                                                                                   |
| user_id    | 24c527b4929f10bd6c6ee09af4b30be2                                                                                       |
+------------+------------------------------------------------------------------------------------------------------------------------+

Konfiguration von s3cmd

Für die weitere Verwendung wird nun s3cmd konfiguriert. Dafür ist ein installiertes s3cmd die Voraussetzung. Die Einrichtung startet mittels s3cmd --configure 

Im folgenden Wizard werden die zuvor erstellten Daten eingetragen, dies sieht dann in etwa so aus (relevante Eintragungen in Fettdruck) 

s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to the user manual for a detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: aceab8b6b85c51f8d3b305aec1af39c2
Secret Key: e5d312a7627cdf2a87ac4322a6d7716b
Default Region [US]:

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: rgw1.netways.de

Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: rgw1.netways.de/%(bucket)s

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

New settings:
Access Key: aceab8b6b85c51f8d3b305aec1af39c2
Secret Key: e5d312a7627cdf2a87ac4322a6d7716b
Default Region: US
S3 Endpoint: rgw1.netways.de
DNS-style bucket+hostname:port template for accessing a bucket: rgw1.netways.de/%(bucket)s
Encryption password:
Path to GPG program: None
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] n

Save settings? [y/N] y
Configuration saved to '/Users/gmimietz/.s3cfg'

Damit die S3-Kommandos nun wie gewünscht funktionieren, muss an der soeben erzeugten Config noch eine Kleinigkeit angepasst werden 

vim ~/.s3cfg

Dort wird die Zeile 

signature_v2 = False

angepasst auf 

signature_v2 = True

Nachdem gespeichert ist, kann die Verwendung auch schon beginnen.

Anlegen eines neuen Buckets

Mittels des folgenden Kommandos wird ein neuer Bucket erstellt 

s3cmd mb s3://myfirstbucket

Um die Anlage des Buckets zu überprüfen, wird dieser aufgelistet mittels 

s3cmd ls

Dateien im Bucket ablegen

Zeit, die ersten Dateien hochzuladen. Dafür wird der put Parameter genutzt  

s3cmd put /Users/gmimietz/Downloads/water.liquid s3://myfirstbucket/

Bucketinhalte listen

Um zu sehen, was in dem soeben befüllten Bucket alles liegt, listet der ls-Befehl die Inhalte auf. Dieser wird nun jedoch um den Bucketnamen ergänzt 

s3cmd ls s3://myfirstbucket 
2021-02-02 11:04 402088862 s3://myfirstbucket/water.liquid

Datei aus Bucket herunterladen

Die soeben hochgeladene Datei kann nun mittels get Parameter herunter geladen werden. 

s3cmd get s3://myfirstbucket/water.liquid

weitere s3cmd Anwendungsbeispiele

Nachfolgend einige hilfreiche Kommandos: Ein Objekt von einem Bucket in einen anderen verschieben: 

s3cmd mv s3://myfirstbucket/water.liquid s3://mysecondbucket

Ein Object verschlüsselt im Bucket ablegen (Bedarf einer vordefinierten Passphrase (s3cmd –configure) 

s3cmd put fire.element s3://myfirstbucket -e

Ein sehr wertvolles Kommando ist der Sync, um ein lokales Verzeichnis mit einem Bucket zu synchronisieren (alles unterhalb /important-data wird nach s3://myfirstbucket/backup/ gesynct) 

s3cmd sync /important-data/ s3://myfirstbucket/backup/

Um in gewissen Anwendungsfällen Bandbreiten zu schonen, hilft die –limit-rate Option, diese wird standardmäßig mit bytes angegeben, aber die Option erkennt auch einen k bzw. m Suffix (Kilo-/Megabyte) pro Sekunde 

s3cmd put myfile s3://myfirstbucket --limit-rate=1k

 

 

Abschließendes

Natürlich gibt es noch sehr viel mehr Parameter für den s3cmd, all diese lassen sich mittels –help auflisten. Bei der Verwendung von s3 lassen sich aber auch moderne und elegante Verfahrensweisen gleich mit einbauen, z. B. die Lebensdauer einer Datei mit vorab festgelegtem Löschdatum. Im OpenStack kann man sich auch ansehen, was das Objectstorage so tut, dafür navigiert man über Projekt>Objektspeicher zum entsprechenden Menü. Unserer Objektspeicher funktioniert übrigens auch mit swift – so wird er auch von OpenStack selbst angesprochen. Also ein Mischbetrieb von S3 und swift ist nach Belieben möglich. Aktuell haben wir swift noch nicht weiter dokumentiert, aber unseren freundlichen MyEngineers geben hier gern auf Anfrage Auskunft. Die Preise für unseren Objectstorage und alles andere was wir so bei NWS anbieten, kann man übrigens hier jederzeit nachlesen. 

Erhalte den nächsten Artikel

Mehr Artikel in OpenStack | Tutorial
LUKS verschlüsselter Speicher auf OpenStack

LUKS verschlüsselter Speicher auf OpenStack

Die gewissenhafte Absicherung deiner IT-Landschaft hat in den vergangenen Jahren mehr und mehr an Bedeutung gewonnen. Mit einem stetigen Anstieg an (Nutzer-)daten, die verwaltet, verarbeitet, und gespeichert werden müssen, sollte die Verschlüsselung dieser Daten auf...

Ingress-NGINX mit Cert-Manager absichern

Ingress-NGINX mit Cert-Manager absichern

In einem der ersten Tutorials auf unserer Seite haben wir dir gezeigt, wie du Ingress-NGINX in deinem Cluster installieren und einrichten kannst. Heute gehen wir einen Schritt weiter und schauen uns an, wie du Ingress-NGINX und deine Services mit Hilfe von...

Migration von Servern auf VMware zu OpenStack

Migration von Servern auf VMware zu OpenStack

In diesem Tutorial befassen wir uns mit der Migration von Servern auf VMware zu OpenStack. Nach der kürzlichen Übernahme VMwares durch Broadcom haben in den vergangenen Wochen viele kleinere Cloud Service Provider (CSPs) Mitteilung zur Kündigung ihrer Mitgliedschaft...

Meistere Kubernetes mit Cilium: Traffic Filterung auf L7 Basis

Meistere Kubernetes mit Cilium: Traffic Filterung auf L7 Basis

Mit der neuen Version des Cilium CNI auf unserem Kubernetes-Service erhältst Du die Möglichkeit, den Datenverkehr anhand von L7-Eigenschaften zu filtern. Das ist normalerweise Service-Meshes vorbehalten und kann bei der Sicherheit deiner Dienste sehr hilfreich sein....

Terraform und OpenStack

Terraform und OpenStack

Viele von Euch sind vermutlich bereits mit der Verwendung von Terraform in Kombination mit Azure oder AWS vertraut. Und obwohl dies die am häufigsten verwendeten Plattformen sind, gibt es - oftmals im Bezug auf Datenschutz (DSGVO) - Unwägbarkeiten und somit weiterhin...

Dynamic Inventory – Eine Ansible und OpenStack Lovestory

Dynamic Inventory – Eine Ansible und OpenStack Lovestory

Für diejenigen unter euch, die mit Ansible möglicherweise nicht allzu vertraut sind: Es ist ein großartiges Tool, um in die Welt der Automatisierung einzusteigen und erleichtert euer Leben im Konfigurationsmanagement erheblich.   Die Kennenlernphase In diesem Tutorial...

ReadWriteMany (RWX) mit dem NFS Ganesha Provisioner

ReadWriteMany (RWX) mit dem NFS Ganesha Provisioner

Einführung Du hast die Anforderung, dass Deine Anwendung für eine Lastverteilung über mehrere Nodes skalieren muss, aber Zugriff auf ein gemeines PVC benötigt? Zu diesem Zweck benötigst Du ein PVC welches RWX-fähig ist. Im Rahmen unserer Managed Kubernetes Cluster ist...

Persistente Volumes in Kubernetes vergrößern

Persistente Volumes in Kubernetes vergrößern

Du willst ein PersistentVolume (PV) in Kubernetes vergrößern? In diesem Blogeintrag erfährst du wie das funktioniert. Was PVs sind und wie man diese anlegt wird im Tutorial Persistente Volumes in Kubernetes erstellen erklärt, auf welchem das vorliegende Tutorial...

Wie Du Deine NETWAYS Managed Database startest

Wie Du Deine NETWAYS Managed Database startest

Im ersten Tutorial hat Sebastian bereits erklärt, was es mit Vitess auf sich hat und welche Möglichkeiten es Dir beim Betrieb Deiner Anwendung, im Vergleich zu einer gewöhnlichen Datenbank, bietet. Im folgenden Text möchte ich nun darauf eingehen, wie Du Dir in...