Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion content/de/administration/protocols/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"webdav",
"ftps",
"sftp",
"swift",
"[MCP-Server](/de/developer/mcp)"
]
}
}
108 changes: 108 additions & 0 deletions content/de/administration/protocols/swift.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---
title: "OpenStack-Swift-API"
description: "Erstellen Sie RustFS mit der optionalen Swift-API und binden Sie die OpenStack-Keystone-Authentifizierung an."
---

RustFS kann auf demselben HTTP-Endpunkt wie die S3-API eine mit OpenStack Swift kompatible API bereitstellen. Diese Anleitung zeigt, wie Sie das optionale Feature `swift` erstellen, die Keystone-Tokenvalidierung konfigurieren und grundlegende Konto-, Container- und Objektoperationen prüfen.

:::warning[Kompatibilitätsumfang]

Die Swift-Unterstützung ist optional und deckt nicht jedes Verhalten von OpenStack Swift ab. `HEAD`-Anfragen auf Kontoebene und Listenformate außer JSON sind nicht implementiert. Prüfen Sie Ihren Client-Workflow, bevor Sie die API produktiv einsetzen.

:::

## Zuordnung von Swift zu RustFS

Swift-Anfragen verwenden den Pfad `/v1/AUTH_<project-id>/...` am S3-API-Endpunkt von RustFS:

| Swift-Ressource | Anfragepfad | RustFS-Zuordnung |
| --- | --- | --- |
| Konto | `/v1/AUTH_<project-id>` | Das authentifizierte Keystone-Projekt |
| Container | `/v1/AUTH_<project-id>/<container>` | Ein projektisolierter RustFS-Bucket |
| Objekt | `/v1/AUTH_<project-id>/<container>/<object>` | Ein Objekt im zugeordneten Bucket |

Die Projekt-ID in der URL muss mit der Projekt-ID im validierten Keystone-Token übereinstimmen. RustFS akzeptiert das Token in `X-Auth-Token` oder `X-Storage-Token`.

Die bestätigten Kernoperationen sind:

| Bereich | Operationen |
| --- | --- |
| Konto | Container auflisten, Kontometadaten aktualisieren |
| Container | Erstellen, auflisten, untersuchen, Metadaten aktualisieren, löschen |
| Objekt | Hochladen, herunterladen, Bereich herunterladen, untersuchen, Metadaten aktualisieren, kopieren, löschen |

## Mit Swift-Unterstützung erstellen

Swift gehört nicht zum standardmäßigen RustFS-Featuresatz. Erstellen Sie das Feature ausdrücklich aus dem Repository `rustfs/rustfs`:

```bash
cargo build --release --features swift
```

Das erzeugte Binary stellt Swift-Pfade an der konfigurierten S3-API-Adresse bereit. Es gibt keinen separaten Swift-Listener und keinen Swift-spezifischen Port.

## Keystone konfigurieren

Aktivieren Sie Keystone und legen Sie vor dem Start von RustFS den Authentifizierungsendpunkt fest:

```bash
export RUSTFS_KEYSTONE_ENABLE=true
export RUSTFS_KEYSTONE_AUTH_URL=https://keystone.example.com
export RUSTFS_KEYSTONE_VERSION=v3
export RUSTFS_KEYSTONE_VERIFY_SSL=true
```

| Variable | Zweck | Standardwert |
| --- | --- | --- |
| `RUSTFS_KEYSTONE_ENABLE` | Aktiviert die Keystone-Tokenvalidierung. | `false` |
| `RUSTFS_KEYSTONE_AUTH_URL` | Legt den Keystone-Authentifizierungsendpunkt fest; bei aktiviertem Keystone erforderlich. | Nicht gesetzt |
| `RUSTFS_KEYSTONE_VERSION` | Wählt die Keystone-API-Version. | `v3` |
| `RUSTFS_KEYSTONE_VERIFY_SSL` | Prüft das TLS-Zertifikat von Keystone. | `true` |
| `RUSTFS_KEYSTONE_CACHE_SIZE` | Legt die maximale Anzahl der Token-Cache-Einträge fest. | `10000` |
| `RUSTFS_KEYSTONE_CACHE_TTL` | Legt die Lebensdauer des Token-Caches in Sekunden fest. | `300` |
| `RUSTFS_KEYSTONE_TIMEOUT` | Legt das Zeitlimit für Keystone-Anfragen in Sekunden fest. | `30` |

Wir empfehlen, die TLS-Prüfung aktiviert zu lassen. Wenn Keystone ein übergebenes Token ablehnt, gibt RustFS `401 Unauthorized` zurück und verwendet für diese Anfrage keine lokalen Anmeldedaten als Rückfall.

## API prüfen

Beziehen Sie ein bereichsgebundenes Token und eine Projekt-ID von Keystone und setzen Sie anschließend diese Shell-Variablen:

```bash
export SWIFT_TOKEN='<your-keystone-token>'
export SWIFT_ACCOUNT='AUTH_<your-project-id>'
export SWIFT_URL="http://localhost:9000/v1/${SWIFT_ACCOUNT}"
```

Listen Sie die für das Projekt sichtbaren Container auf:

```bash
curl --fail-with-body \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}"
```

Erstellen Sie `my-bucket`, laden Sie `hello.txt` hoch und laden Sie das Objekt wieder herunter:

```bash
curl --fail-with-body --request PUT \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}/my-bucket"

curl --fail-with-body --request PUT \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
--upload-file /path/to/hello.txt \
"${SWIFT_URL}/my-bucket/hello.txt"

curl --fail-with-body \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}/my-bucket/hello.txt"
```

Eine Anfrage an ein `AUTH_<project-id>`-Konto, das nicht zum Token-Projekt passt, erhält `403 Forbidden`.

## Nächste Schritte

- [S3-Kompatibilitätsmatrix prüfen](/de/reference/s3-compatibility)
- [RustFS-Anmeldedaten verwalten](/de/operations/credentials)
- [TLS für RustFS konfigurieren](/de/integration/tls-configured)
3 changes: 2 additions & 1 deletion content/de/reference/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"defaultOpen": false,
"pages": [
"environment-variables",
"cli"
"cli",
"s3-compatibility"
]
}
66 changes: 66 additions & 0 deletions content/de/reference/s3-compatibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
title: "S3-Kompatibilitätsmatrix"
description: "Prüfen Sie das getestete und bewusst ausgeschlossene Amazon-S3-Verhalten im aktuellen RustFS-Kompatibilitäts-Gate."
---

RustFS implementiert eine getestete Teilmenge der Amazon-S3-API. Diese Matrix fasst die ausführbaren Ceph-s3tests-Listen im Repository `rustfs/rustfs` zusammen; sie erhebt keinen Anspruch auf vollständige Abdeckung aller standardmäßigen oder anbieterspezifischen S3-Verhaltensweisen.

Der folgende Stand wurde am 9. August 2026 gegen den RustFS-Commit [`1e6f5f1e`](https://github.com/rustfs/rustfs/commit/1e6f5f1e35f188f28844a7f81361ccca4d5d0c7b) geprüft.

## Statuslegende

| Status | Bedeutung |
| --- | --- |
| ✅ Getestet | Vom standardmäßigen oder vom Lebenszyklus-Kompatibilitäts-Gate abgedeckt |
| ❌ Geplant | Als noch nicht implementiertes Standardverhalten erfasst |
| ⊘ Ausgeschlossen | Anbieterspezifisch, bewusst nicht unterstützt oder außerhalb des Standard-Gates |

## Ausführbare Testlisten

| Liste | Fälle | Aufgabe |
| --- | ---: | --- |
| [Implementierte Tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/implemented_tests.txt) | 455 | Standardfälle, die im Standard-Gate bestehen müssen |
| [Lebenszyklus-Verhaltenstests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/lifecycle_behavior_tests.txt) | 5 | Ablauf-Fälle im separaten Lebenszyklus-Gate |
| [Nicht implementierte Tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/unimplemented_tests.txt) | 17 | Standardverhalten, das weiterhin geplant ist |
| [Ausgeschlossene Tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/excluded_tests.txt) | 270 | Fälle, die das RustFS-Kompatibilitäts-Gate nicht blockieren |

Die Zählung ignoriert Leerzeilen und Kommentare. Tests wechseln bei Änderungen zwischen den Listen; die verlinkten Dateien enthalten den neuesten Stand.

## Bucket-Operationen

| Funktion | Status | Umfang |
| --- | --- | --- |
| Buckets erstellen, löschen, auflisten und untersuchen | ✅ Getestet | Übliche Bucket-Lebenszyklusoperationen |
| Bucket-Tags | ✅ Getestet | Tags setzen, abrufen und löschen |
| Bucket-Richtlinien | ✅ Getestet | Richtlinien setzen, abrufen und löschen |
| Blockierung öffentlichen Zugriffs | ✅ Getestet | Konfiguration setzen, abrufen und löschen |
| Ausgewählte Versionierungs-, Object-Lock-, CORS- und Lebenszyklusverhalten | ✅ Getestet | Nur Fälle aus den implementierten Listen |
| Bucket-Zugriffsprotokollierung | ❌ Geplant | In der nicht implementierten Liste erfasst |
| Bucket-Eigentümersteuerung | ❌ Geplant | In der nicht implementierten Liste erfasst |
| ACL-Autorisierung | ⊘ Ausgeschlossen | Bewusst nicht unterstütztes Produktverhalten |

## Objektoperationen

| Funktion | Status | Umfang |
| --- | --- | --- |
| Objekte hochladen, abrufen, kopieren, untersuchen und löschen | ✅ Getestet | Übliche Objektoperationen |
| Listenverhalten für Präfix, Trennzeichen, Marker und `max-keys` | ✅ Getestet | `ListObjects` und `ListObjectsV2` |
| Bereichs- und bedingte Lesezugriffe | ✅ Getestet | Ausgewählte HTTP-Range- und Vorbedingungsfälle |
| Benutzermetadaten und Objekt-Tags | ✅ Getestet | Roundtrips für Metadaten und Tags |
| Vorsignierte GET- und PUT-URLs | ✅ Getestet | Ausgewählte Signatur- und Anfragefälle |
| SSE-C und ausgewähltes SSE-KMS-Verhalten | ✅ Getestet | Nur Roundtrips von durch RustFS verwalteten Objekten |
| Prüfsummen bei POST-Object-Formularuploads | ❌ Geplant | In der nicht implementierten Liste erfasst |

Verschlüsselte Objektformate sind zwischen RustFS und anderen S3-Implementierungen nicht portabel. Ein bestandener Verschlüsselungstest bedeutet, dass RustFS von RustFS verschlüsselte Objekte lesen kann; er garantiert nicht, dass RustFS direkt kopierte verschlüsselte Objekte einer anderen Implementierung lesen kann.

## Mehrteilige Uploads

| Funktion | Status | Umfang |
| --- | --- | --- |
| Erstellen, Teile hochladen, abschließen und abbrechen | ✅ Getestet | Kernablauf eines mehrteiligen Uploads |
| Ausgewähltes Multipart-Kopier-, Prüfsummen- und Objektattributverhalten | ✅ Getestet | Fälle aus der implementierten Liste |
| Auflistung mehrteiliger Uploads und Grenzfälle beim Teileabruf | ⊘ Ausgeschlossen | Nicht Teil des Standard-Kompatibilitäts-Gates |

## Verbindliche Quellen

Die [S3-Kompatibilitätsmatrix](https://github.com/rustfs/rustfs/blob/main/docs/architecture/s3-compatibility-matrix.md) im Repository erläutert das Gate und seine Aktualisierungsregel. Die ausführbaren Dateien unter [`scripts/s3-tests`](https://github.com/rustfs/rustfs/tree/main/scripts/s3-tests) bestimmen das aktuelle Ergebnis. Wenn sich eine Funktion ändert, müssen Testlisten und beide veröffentlichten Matrizen gemeinsam aktualisiert werden.
3 changes: 2 additions & 1 deletion content/en/administration/protocols/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"webdav",
"ftps",
"sftp",
"swift",
"[MCP Server](/en/developer/mcp)"
]
}
}
108 changes: 108 additions & 0 deletions content/en/administration/protocols/swift.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---
title: "OpenStack Swift"
description: "Build RustFS with the optional Swift API and connect it to OpenStack Keystone authentication."
---

RustFS can expose an OpenStack Swift-compatible API on the same HTTP endpoint as its S3 API. Use this guide to build the optional `swift` feature, configure Keystone token validation, and verify basic account, container, and object operations.

:::warning[Compatibility scope]

Swift support is optional and does not cover every OpenStack Swift behavior. Account `HEAD` requests and non-JSON listing formats are not implemented. Validate your client workflow before using the API in production.

:::

## How Swift maps to RustFS

Swift requests use `/v1/AUTH_<project-id>/...` on the RustFS S3 API endpoint:

| Swift resource | Request path | RustFS mapping |
| --- | --- | --- |
| Account | `/v1/AUTH_<project-id>` | The authenticated Keystone project |
| Container | `/v1/AUTH_<project-id>/<container>` | A project-isolated RustFS bucket |
| Object | `/v1/AUTH_<project-id>/<container>/<object>` | An object in the mapped bucket |

The project ID in the URL must match the project ID in the validated Keystone token. RustFS accepts the token in either `X-Auth-Token` or `X-Storage-Token`.

The confirmed core operations are:

| Scope | Operations |
| --- | --- |
| Account | List containers, update account metadata |
| Container | Create, list, inspect, update metadata, delete |
| Object | Upload, download, range download, inspect, update metadata, copy, delete |

## Build with Swift support

The default RustFS feature set does not include Swift. Build it explicitly from the `rustfs/rustfs` repository:

```bash
cargo build --release --features swift
```

The resulting binary serves Swift paths on the configured S3 API address. There is no separate Swift listener or Swift-specific port.

## Configure Keystone

Enable Keystone and set its authentication endpoint before starting RustFS:

```bash
export RUSTFS_KEYSTONE_ENABLE=true
export RUSTFS_KEYSTONE_AUTH_URL=https://keystone.example.com
export RUSTFS_KEYSTONE_VERSION=v3
export RUSTFS_KEYSTONE_VERIFY_SSL=true
```

| Variable | Purpose | Default |
| --- | --- | --- |
| `RUSTFS_KEYSTONE_ENABLE` | Enables Keystone token validation. | `false` |
| `RUSTFS_KEYSTONE_AUTH_URL` | Sets the Keystone authentication endpoint. Required when Keystone is enabled. | Not set |
| `RUSTFS_KEYSTONE_VERSION` | Selects the Keystone API version. | `v3` |
| `RUSTFS_KEYSTONE_VERIFY_SSL` | Verifies the Keystone TLS certificate. | `true` |
| `RUSTFS_KEYSTONE_CACHE_SIZE` | Sets the maximum token-cache entry count. | `10000` |
| `RUSTFS_KEYSTONE_CACHE_TTL` | Sets the token-cache lifetime in seconds. | `300` |
| `RUSTFS_KEYSTONE_TIMEOUT` | Sets the Keystone request timeout in seconds. | `30` |

We recommend keeping TLS verification enabled. RustFS returns `401 Unauthorized` when Keystone rejects a supplied token; it does not fall back to local credentials for that request.

## Verify the API

Obtain a scoped token and project ID from Keystone, then set these shell variables:

```bash
export SWIFT_TOKEN='<your-keystone-token>'
export SWIFT_ACCOUNT='AUTH_<your-project-id>'
export SWIFT_URL="http://localhost:9000/v1/${SWIFT_ACCOUNT}"
```

List the containers visible to the project:

```bash
curl --fail-with-body \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}"
```

Create `my-bucket`, upload `hello.txt`, and download it:

```bash
curl --fail-with-body --request PUT \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}/my-bucket"

curl --fail-with-body --request PUT \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
--upload-file /path/to/hello.txt \
"${SWIFT_URL}/my-bucket/hello.txt"

curl --fail-with-body \
--header "X-Auth-Token: ${SWIFT_TOKEN}" \
"${SWIFT_URL}/my-bucket/hello.txt"
```

A request to an `AUTH_<project-id>` account that does not match the token project returns `403 Forbidden`.

## Next steps

- [Review the S3 compatibility matrix](/en/reference/s3-compatibility)
- [Manage RustFS credentials](/en/operations/credentials)
- [Configure TLS for RustFS](/en/integration/tls-configured)
3 changes: 2 additions & 1 deletion content/en/reference/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"defaultOpen": false,
"pages": [
"environment-variables",
"cli"
"cli",
"s3-compatibility"
]
}
66 changes: 66 additions & 0 deletions content/en/reference/s3-compatibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
title: "S3 Compatibility Matrix"
description: "Review the tested and intentionally excluded Amazon S3 behavior in the current RustFS compatibility gate."
---

RustFS implements a tested subset of the Amazon S3 API. This matrix summarizes the executable Ceph s3tests lists maintained in `rustfs/rustfs`; it does not claim complete coverage of every standard or vendor-specific S3 behavior.

The snapshot below was verified against RustFS commit [`1e6f5f1e`](https://github.com/rustfs/rustfs/commit/1e6f5f1e35f188f28844a7f81361ccca4d5d0c7b) on August 9, 2026.

## Status legend

| Status | Meaning |
| --- | --- |
| ✅ Tested | Covered by the default or lifecycle compatibility gate |
| ❌ Planned | Standard behavior tracked as not yet implemented |
| ⊘ Excluded | Vendor-specific, intentionally unsupported, or outside the default gate |

## Executable test lists

| List | Cases | Role |
| --- | ---: | --- |
| [Implemented tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/implemented_tests.txt) | 455 | Standard cases expected to pass in the default gate |
| [Lifecycle behavior tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/lifecycle_behavior_tests.txt) | 5 | Expiration cases run in the dedicated lifecycle gate |
| [Unimplemented tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/unimplemented_tests.txt) | 17 | Standard behavior that remains planned |
| [Excluded tests](https://github.com/rustfs/rustfs/blob/main/scripts/s3-tests/excluded_tests.txt) | 270 | Cases that do not block the RustFS compatibility gate |

Counts ignore blank lines and comments. They change as tests move between lists, so use the linked files for the latest result.

## Bucket operations

| Capability | Status | Scope |
| --- | --- | --- |
| Create, delete, list, and inspect buckets | ✅ Tested | Common bucket lifecycle operations |
| Bucket tagging | ✅ Tested | Put, get, and delete tagging |
| Bucket policies | ✅ Tested | Put, get, and delete policies |
| Public access block | ✅ Tested | Put, get, and delete configuration |
| Selected versioning, Object Lock, CORS, and lifecycle behavior | ✅ Tested | Only the cases present in the implemented lists |
| Bucket access logging | ❌ Planned | Tracked in the unimplemented list |
| Bucket ownership controls | ❌ Planned | Tracked in the unimplemented list |
| ACL authorization | ⊘ Excluded | Intentionally unsupported product behavior |

## Object operations

| Capability | Status | Scope |
| --- | --- | --- |
| Put, get, copy, inspect, and delete objects | ✅ Tested | Common object operations |
| Prefix, delimiter, marker, and `max-keys` listing behavior | ✅ Tested | `ListObjects` and `ListObjectsV2` |
| Range and conditional reads | ✅ Tested | Selected HTTP range and precondition cases |
| User metadata and object tagging | ✅ Tested | Metadata and tag round trips |
| Presigned GET and PUT URLs | ✅ Tested | Selected signature and request cases |
| SSE-C and selected SSE-KMS behavior | ✅ Tested | RustFS-managed object round trips only |
| POST Object form checksum handling | ❌ Planned | Tracked in the unimplemented list |

Encrypted object formats are not portable between RustFS and other S3 implementations. A passing encryption test means RustFS can read objects that RustFS encrypted; it does not guarantee that RustFS can read an encrypted object copied directly from another implementation.

## Multipart operations

| Capability | Status | Scope |
| --- | --- | --- |
| Create, upload parts, complete, and abort | ✅ Tested | Core multipart upload workflow |
| Selected multipart copy, checksum, and object-attribute behavior | ✅ Tested | Cases present in the implemented list |
| Multipart upload listing and part-lookup edge cases | ⊘ Excluded | Not part of the default compatibility gate |

## Source of truth

The repository [S3 compatibility matrix](https://github.com/rustfs/rustfs/blob/main/docs/architecture/s3-compatibility-matrix.md) explains the gate and its update rule. The executable files under [`scripts/s3-tests`](https://github.com/rustfs/rustfs/tree/main/scripts/s3-tests) determine the current result. When a feature changes, update the test lists and both published matrices together.
3 changes: 2 additions & 1 deletion content/fr/administration/protocols/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"webdav",
"ftps",
"sftp",
"swift",
"[Serveur MCP](/fr/developer/mcp)"
]
}
}
Loading
Loading