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:
| Bereich | Unterstützte Abläufe |
|---|---|
| Buckets | Erstellen, löschen, auflisten, Metadaten abrufen (Head) und den Standort abrufen |
| Objekte | Schreiben, lesen, Metadaten abrufen, kopieren, löschen, mehrfach löschen, Bereichslesevorgänge, bedingte Anfragen und Benutzermetadaten |
| Auflisten | ListObjects, ListObjectsV2, Präfixe, Trennzeichen, Marker und Seitenaufteilung |
| Große Objekte | Mehrteilige Uploads erstellen, hochladen, kopieren, auflisten, abschließen und abbrechen |
| Datenverwaltung | Versionierung, Lebenszyklusregeln, Bucket- und Objekt-Tags, Prüfsummen und Object Lock |
| Zugriffskontrolle | IAM-Zugangsdaten und -Richtlinien, Bucket-Richtlinien, Public Access Block (Sperre für öffentlichen Zugriff) und vorsignierte GET- und PUT-URLs |
| Integration | CORS, 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.
| Variable | Zweck | Standard |
|---|---|---|
RUSTFS_ADDRESS | Bind-Adresse der S3-API | :9000 |
RUSTFS_REGION | Region für die Anfragesignatur und Clients, die die Region berücksichtigen | us-east-1 |
RUSTFS_ACCESS_KEY | Root-Zugriffsschlüssel | Installationsabhängig |
RUSTFS_SECRET_KEY | Geheimer Root-Zugriffsschlüssel | Installationsabhängig |
RUSTFS_SERVER_DOMAINS | Durch Kommas getrennte Domains für Anfragen mit Adressierung im Virtual-Hosted-Stil | Nicht gesetzt |
RUSTFS_TLS_PATH | Verzeichnis mit rustfs_cert.pem und rustfs_key.pem | Nicht 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.txtKonfigurieren 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.txtKonfigurieren 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 configureGeben 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-bucketsObjekte 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.txtVorsignierte 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 3600Hostname, 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-bucketEin 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
NotImplementedzurü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
- Folgen Sie dem vollständigen Beispiel zur AWS CLI.
- Wählen Sie ein S3-SDK für die Anwendungsintegration.
- Konfigurieren Sie Zugangsdaten und Zugriffsrichtlinien.
- Aktivieren Sie TLS, bevor Sie den Endpunkt außerhalb eines vertrauenswürdigen Netzwerks erreichbar machen.