AdministrationProtokollunterstützung

S3

Konfigurieren und verwenden Sie die S3-kompatible API von RustFS mit der AWS CLI, AWS-SDKs und anderen S3-Clients.

RustFS stellt eine S3-kompatible REST-API für gängige Objektspeicher-Workloads bereit. Sie unterstützt AWS Signature Version 4 (SigV4) und arbeitet mit der AWS CLI, AWS-SDKs und anderen S3-Clients, wenn Sie den RustFS-Endpunkt, die Region, die Zugangsdaten und den Adressierungsstil konfigurieren.

Überblick

S3 organisiert Daten in Buckets und Objekten. Mit der standardmäßigen pfadbasierten Adressierung (Path-Style) bildet eine RustFS-URL den Speicher so ab:

http://localhost:9000/my-bucket/path/to/hello.txt
                      | bucket | |---- object key ----|

RustFS deckt die gängige S3-Datenebene ab, die Anwendungen, Sicherungswerkzeuge und SDKs verwenden:

BereichUnterstützte Abläufe
BucketsErstellen, löschen, auflisten, Metadaten abrufen (Head) und den Standort abrufen
ObjekteSchreiben, lesen, Metadaten abrufen, kopieren, löschen, mehrfach löschen, Bereichslesevorgänge, bedingte Anfragen und Benutzermetadaten
AuflistenListObjects, ListObjectsV2, Präfixe, Trennzeichen, Marker und Seitenaufteilung
Große ObjekteMehrteilige Uploads erstellen, hochladen, kopieren, auflisten, abschließen und abbrechen
DatenverwaltungVersionierung, Lebenszyklusregeln, Bucket- und Objekt-Tags, Prüfsummen und Object Lock
ZugriffskontrolleIAM-Zugangsdaten und -Richtlinien, Bucket-Richtlinien, Public Access Block (Sperre für öffentlichen Zugriff) und vorsignierte GET- und PUT-URLs
IntegrationCORS, Bucket-Benachrichtigungen, Replikationskonfiguration und Abläufe der serverseitigen Verschlüsselung

Authentifizierte Clients signieren Anfragen mit einem Zugriffsschlüssel und einem geheimen Zugriffsschlüssel. Anonyme Anfragen werden gegen die zutreffende Bucket-Richtlinie geprüft.

Kompatibilitätsumfang

RustFS bietet für unterstützte Funktionen eine breite Kompatibilität mit der S3-API, ist aber nicht mit jeder AWS-S3- oder MinIO-API identisch. Lesen Sie Bekannte Kompatibilitätsunterschiede, bevor Sie sich auf erweitertes oder herstellerspezifisches Verhalten verlassen, und prüfen Sie es gegen Ihre Zielversion von RustFS.

Konfiguration

Die S3-API ist auf dem Haupt-Listener von RustFS aktiviert. Sie benötigt keinen separaten Protokollschalter.

VariableZweckStandard
RUSTFS_ADDRESSBind-Adresse der S3-API:9000
RUSTFS_REGIONRegion für die Anfragesignatur und Clients, die die Region berücksichtigenus-east-1
RUSTFS_ACCESS_KEYRoot-ZugriffsschlüsselInstallationsabhängig
RUSTFS_SECRET_KEYGeheimer Root-ZugriffsschlüsselInstallationsabhängig
RUSTFS_SERVER_DOMAINSDurch Kommas getrennte Domains für Anfragen mit Adressierung im Virtual-Hosted-StilNicht gesetzt
RUSTFS_TLS_PATHVerzeichnis mit rustfs_cert.pem und rustfs_key.pemNicht gesetzt

Verwenden Sie für Anwendungen IAM-Benutzer oder Dienstkonten anstelle der Root-Anmeldedaten und gewähren Sie nur die erforderlichen S3-Aktionen.

Pfadbasierte Adressierung

Die pfadbasierte Adressierung ist der Standard und erfordert keine DNS-Konfiguration. Der Bucket-Name ist die erste Komponente des Anfragepfads:

http://localhost:9000/my-bucket/hello.txt

Konfigurieren Sie Clients mit:

  • Endpunkt: http://localhost:9000
  • Region: us-east-1
  • Zugriffsschlüssel: <your-access-key>
  • Geheimer Zugriffsschlüssel: <your-secret-key>
  • Adressierungsstil: pfadbasierte Adressierung

Einige Clients verwenden standardmäßig die Adressierung im Virtual-Hosted-Stil. Aktivieren Sie ihre Option für pfadbasierte Adressierung, etwa force_path_style=true in der AWS-SDK-Konfiguration oder s3_use_path_style = true in Terraform.

Adressierung im Virtual-Hosted-Stil

Die Adressierung im Virtual-Hosted-Stil setzt den Bucket-Namen in den Hostnamen. Setzen Sie RUSTFS_SERVER_DOMAINS auf jede Basisdomain, die RustFS erkennen soll:

export RUSTFS_SERVER_DOMAINS="s3.example.com"

Dasselbe Objekt wird dann so adressiert:

https://my-bucket.s3.example.com/hello.txt

Konfigurieren Sie Wildcard-DNS, etwa *.s3.example.com, sodass es auf den RustFS-Endpunkt aufgelöst wird. Für HTTPS muss das Zertifikat auch die Bucket-Hostnamen abdecken. Bucket-Namen mit Punkten können ausdrückliche Zertifikatsnamen erfordern, weil ein Wildcard mit einem Label nicht mehrere Labels umfasst.

Serverdomain konfigurieren

Senden Sie keine Anfragen mit Adressierung im Virtual-Hosted-Stil, solange RUSTFS_SERVER_DOMAINS nicht konfiguriert ist. Andernfalls behandelt RustFS die Anfragen als pfadbasierte Adressierung und kann den Bucket nicht aus dem Hostnamen ableiten.

TLS und Netzwerkzugriff

Setzen Sie in der Produktion RUSTFS_TLS_PATH auf ein Verzeichnis mit rustfs_cert.pem und rustfs_key.pem und verwenden Sie anschließend einen Endpunkt mit https://. Stellen Sie sicher, dass Clients der ausstellenden Zertifizierungsstelle vertrauen.

Lassen Sie den konfigurierten S3-API-Port durch Host-Firewalls und Load Balancer zu. Der Standard ist TCP-Port 9000. Dieser Listener überträgt auch administrativen Verkehr und Verkehr zwischen den Knoten von RustFS. Machen Sie ihn deshalb nicht anonym erreichbar, ohne passende Netzwerk- und IAM-Kontrollen.

Verwendung

Die folgenden Beispiele verwenden die AWS CLI mit dem kanonischen lokalen Endpunkt. Installieren und konfigurieren Sie die AWS CLI, bevor Sie fortfahren.

AWS CLI konfigurieren

aws configure

Geben Sie diese Werte ein, wenn Sie dazu aufgefordert werden:

AWS Access Key ID [None]: <your-access-key>
AWS Secret Access Key [None]: <your-secret-key>
Default region name [None]: us-east-1
Default output format [None]: json

Übergeben Sie den RustFS-Endpunkt an jeden Befehl. Der benutzerdefinierte Endpunkt richtet diese Beispiele auf RustFS aus.

export RUSTFS_ENDPOINT="http://localhost:9000"

Buckets erstellen und auflisten

aws --endpoint-url "$RUSTFS_ENDPOINT" s3api create-bucket \
	--bucket my-bucket

aws --endpoint-url "$RUSTFS_ENDPOINT" s3api list-buckets

Objekte hochladen und auflisten

printf 'Hello from RustFS\n' > hello.txt

aws --endpoint-url "$RUSTFS_ENDPOINT" s3 cp \
	hello.txt s3://my-bucket/path/to/hello.txt

aws --endpoint-url "$RUSTFS_ENDPOINT" s3 ls \
	s3://my-bucket/path/to/

Die AWS CLI verwendet automatisch einen mehrteiligen Upload, wenn ihre Übertragungskonfiguration ihn für ein großes Objekt auswählt. RustFS unterstützt die Standardabläufe zum Erstellen, Hochladen von Teilen, Abschließen, Auflisten und Abbrechen mehrteiliger Uploads.

Objekt herunterladen und Metadaten abrufen

aws --endpoint-url "$RUSTFS_ENDPOINT" s3 cp \
	s3://my-bucket/path/to/hello.txt ./downloaded-hello.txt

aws --endpoint-url "$RUSTFS_ENDPOINT" s3api head-object \
	--bucket my-bucket \
	--key path/to/hello.txt

Vorsignierte URL erstellen

Erzeugen Sie eine zeitlich begrenzte URL, mit der ein Objekt heruntergeladen werden kann, ohne Zugangsdaten offenzulegen:

aws --endpoint-url "$RUSTFS_ENDPOINT" s3 presign \
	s3://my-bucket/path/to/hello.txt \
	--expires-in 3600

Hostname, Schema, Port, Region und Objektpfad, die der Empfänger verwendet, müssen mit den Werten übereinstimmen, mit denen die URL signiert wurde. Verwenden Sie den von außen erreichbaren Endpunkt, wenn Sie URLs für einen anderen Rechner erzeugen.

Objekte und Buckets löschen

aws --endpoint-url "$RUSTFS_ENDPOINT" s3 rm \
	s3://my-bucket/path/to/hello.txt

aws --endpoint-url "$RUSTFS_ENDPOINT" s3api delete-bucket \
	--bucket my-bucket

Ein S3-Bucket muss leer sein, bevor er gelöscht werden kann.

Bekannte Kompatibilitätsunterschiede

Die aktuellen Kompatibilitätstests von RustFS decken die oben beschriebenen gängigen Abläufe ab. Die folgenden Bereiche sind nicht gleichwertig mit AWS S3 oder MinIO:

  • Zugriffsprotokollierung für Buckets und Steuerungen der Bucket-Eigentümerschaft sind geplant und noch nicht abgeschlossen.
  • Die ACL-Autorisierung wird absichtlich nicht unterstützt. Vordefinierte ACL-Header (Canned ACLs) sind teilweise kompatibel, während XML-Grant-Richtlinien NotImplemented zurückgeben. Bevorzugen Sie IAM- und Bucket-Richtlinien.
  • Formular-Uploads mit POST Object sind implementiert, die Prüfsummenbehandlung für diesen Ablauf ist jedoch nicht abgeschlossen.
  • Einige Randfälle beim Auflisten mehrteiliger Uploads und beim Nachschlagen von Teilen liegen außerhalb der standardmäßigen Kompatibilitätsprüfung (Compatibility Gate).
  • S3 Select akzeptiert derzeit nur unkomprimierte Eingaben.
  • Copy-Source-Formen von Access Point und Outposts sind nicht implementiert.
  • Administrative MinIO-APIs sind eine eigene Kompatibilitätsfläche und lassen sich nicht aus der Unterstützung der S3-Datenebene ableiten.

Das Client-Verhalten kann zusätzlich abweichen, wenn ein Werkzeug AWS-spezifische Dienste, Speicherklassen, Steuerungen der Kontoeigentümerschaft oder eine Endpunkt-Erkennung voraussetzt. Setzen Sie den RustFS-Endpunkt immer ausdrücklich und testen Sie genau die Operationen, die Ihre Anwendung verwendet.

Nächste Schritte

On this page