S3
Configurez et utilisez l’API compatible avec S3 de RustFS avec AWS CLI, les SDK AWS et d’autres clients S3.
RustFS expose une API REST compatible avec S3 pour les charges de travail courantes de stockage objet. Elle prend en charge AWS Signature Version 4 (SigV4) et fonctionne avec AWS CLI, les SDK AWS et d’autres clients S3 lorsque vous configurez le point de terminaison RustFS, la région, les identifiants et le mode d’adressage.
Vue d’ensemble
S3 organise les données en compartiments (buckets) et en objets. Avec l’adressage de type chemin (path-style) par défaut, une URL RustFS correspond au stockage comme suit :
http://localhost:9000/my-bucket/path/to/hello.txt
| bucket | |---- object key ----|RustFS couvre le plan de données S3 courant utilisé par les applications, les outils de sauvegarde et les SDK :
| Domaine | Flux pris en charge |
|---|---|
| Compartiments | Créer, supprimer, répertorier, inspecter et récupérer l’emplacement |
| Objets | Put, get, head, copie, suppression, suppression multiple, lectures par plage, requêtes conditionnelles et métadonnées utilisateur |
| Listage | ListObjects, ListObjectsV2, préfixes, délimiteurs, marqueurs et pagination |
| Objets volumineux | Créer, charger, copier, répertorier, finaliser et interrompre les chargements partitionnés |
| Gestion des données | Gestion des versions, règles de cycle de vie, étiquettes de compartiment et d’objet, sommes de contrôle et verrouillage d’objet |
| Contrôle d’accès | Identifiants et politiques IAM, politiques de compartiment, blocage de l’accès public et URL présignées GET/PUT |
| Intégration | CORS, notifications de compartiment, configuration de la réplication et flux de chiffrement côté serveur |
Les clients authentifiés signent les requêtes avec une clé d’accès et une clé secrète. Les requêtes anonymes sont évaluées au regard de la politique de compartiment applicable.
Périmètre de compatibilité
RustFS offre une large compatibilité avec l’API S3 pour les fonctionnalités prises en charge, mais cette API n’est pas identique à chaque API d’AWS S3 ou de MinIO. Consultez les différences de compatibilité connues avant de vous appuyer sur un comportement avancé ou propre à un fournisseur, et validez ce comportement sur la version cible de RustFS.
Configuration
L’API S3 est activée sur l’écouteur principal de RustFS. Aucun réglage de protocole distinct n’est nécessaire.
| Variable | Rôle | Valeur par défaut |
|---|---|---|
RUSTFS_ADDRESS | Adresse d’écoute de l’API S3 | :9000 |
RUSTFS_REGION | Région utilisée pour la signature des requêtes et pour les clients qui tiennent compte de la région | us-east-1 |
RUSTFS_ACCESS_KEY | Clé d’accès racine | Propre à l’installation |
RUSTFS_SECRET_KEY | Clé secrète racine | Propre à l’installation |
RUSTFS_SERVER_DOMAINS | Domaines séparés par des virgules pour les requêtes en adressage de type hôte virtuel | Non définie |
RUSTFS_TLS_PATH | Répertoire contenant rustfs_cert.pem et rustfs_key.pem | Non définie |
Pour les applications, utilisez des utilisateurs IAM ou des comptes de service plutôt que les identifiants racine, et n’accordez que les actions S3 requises.
Adressage de type chemin
L’adressage de type chemin est le mode par défaut et n’exige aucune configuration DNS. Le nom du compartiment est le premier composant du chemin de la requête :
http://localhost:9000/my-bucket/hello.txtConfigurez les clients avec :
- Point de terminaison :
http://localhost:9000 - Région :
us-east-1 - Clé d’accès :
<your-access-key> - Clé secrète :
<your-secret-key> - Mode d’adressage : path-style
Certains clients utilisent par défaut des requêtes en adressage de type hôte virtuel. Activez leur option d’adressage de type chemin, par exemple force_path_style=true dans la configuration du SDK AWS ou s3_use_path_style = true dans Terraform.
Adressage de type hôte virtuel
L’adressage de type hôte virtuel place le nom du compartiment dans le nom d’hôte. Définissez RUSTFS_SERVER_DOMAINS avec chaque domaine de base que RustFS doit reconnaître :
export RUSTFS_SERVER_DOMAINS="s3.example.com"Le même objet est alors adressé ainsi :
https://my-bucket.s3.example.com/hello.txtConfigurez un DNS générique, par exemple *.s3.example.com, pour qu’il pointe vers le point de terminaison RustFS. Pour HTTPS, le certificat doit aussi couvrir les noms d’hôte des compartiments. Les noms de compartiment qui contiennent des points peuvent exiger des noms de certificat explicites, car un caractère générique à un seul niveau ne couvre pas plusieurs niveaux.
Configurez le domaine du serveur
N’envoyez pas de requêtes en adressage de type hôte virtuel tant que RUSTFS_SERVER_DOMAINS n’est pas configuré. Sans cette configuration, RustFS traite les requêtes comme de l’adressage de type chemin et ne peut pas déduire le compartiment du nom d’hôte.
TLS et accès réseau
En production, définissez RUSTFS_TLS_PATH sur un répertoire qui contient rustfs_cert.pem et rustfs_key.pem, puis utilisez un point de terminaison https://. Assurez-vous que les clients font confiance à l’autorité de certification émettrice.
Autorisez le port configuré de l’API S3 dans les pare-feu de l’hôte et les répartiteurs de charge. La valeur par défaut est le port TCP 9000 ; cet écouteur transporte aussi le trafic d’administration et le trafic inter-nœuds de RustFS. Ne l’exposez donc pas de façon anonyme sans les contrôles réseau et IAM appropriés.
Utilisation
Les exemples suivants utilisent AWS CLI avec le point de terminaison local canonique. Installez et configurez l’AWS CLI avant de continuer.
Configurer AWS CLI
aws configureSaisissez ces valeurs lorsque vous y êtes invité :
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]: jsonPassez le point de terminaison RustFS à chaque commande. Le point de terminaison personnalisé maintient ces exemples sur RustFS plutôt que sur AWS S3.
export RUSTFS_ENDPOINT="http://localhost:9000"Créer et répertorier des compartiments
aws --endpoint-url "$RUSTFS_ENDPOINT" s3api create-bucket \
--bucket my-bucket
aws --endpoint-url "$RUSTFS_ENDPOINT" s3api list-bucketsCharger et répertorier des objets
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/AWS CLI utilise automatiquement le chargement partitionné lorsque sa configuration de transfert le sélectionne pour un objet volumineux. RustFS prend en charge les flux standard de création, de chargement de partie, de finalisation, de listage et d’interruption d’un chargement partitionné.
Télécharger et inspecter un objet
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.txtCréer une URL présignée
Générez une URL limitée dans le temps qui permet de télécharger un objet sans exposer les identifiants :
aws --endpoint-url "$RUSTFS_ENDPOINT" s3 presign \
s3://my-bucket/path/to/hello.txt \
--expires-in 3600Le nom d’hôte, le schéma, le port, la région et le chemin d’objet utilisés par le destinataire doivent correspondre aux valeurs utilisées pour signer l’URL. Utilisez le point de terminaison accessible depuis l’extérieur lorsque vous générez des URL pour une autre machine.
Supprimer des objets et des compartiments
aws --endpoint-url "$RUSTFS_ENDPOINT" s3 rm \
s3://my-bucket/path/to/hello.txt
aws --endpoint-url "$RUSTFS_ENDPOINT" s3api delete-bucket \
--bucket my-bucketUn compartiment S3 doit être vide pour pouvoir être supprimé.
Différences de compatibilité connues
Les tests de compatibilité actuels de RustFS couvrent les flux courants décrits ci-dessus. Les domaines suivants ne sont pas équivalents à AWS S3 ni à MinIO :
- La journalisation des accès aux compartiments et les contrôles de propriété des compartiments sont prévus, et non aboutis.
- L’autorisation par ACL est volontairement non prise en charge. Les en-têtes d’ACL prédéfinies ont une compatibilité partielle, tandis que les politiques d’octroi XML renvoient
NotImplemented. Préférez IAM et les politiques de compartiment. - Les chargements par formulaire POST Object sont implémentés, mais le traitement des sommes de contrôle de ce flux n’est pas abouti.
- Certains cas limites de listage des chargements partitionnés et de recherche de parties se trouvent en dehors du contrôle de compatibilité par défaut.
- S3 Select n’accepte actuellement que les données d’entrée non compressées.
- Les formes de source de copie Access Point et Outposts ne sont pas implémentées.
- Les API d’administration MinIO constituent une surface de compatibilité distincte et ne doivent pas être déduites de la prise en charge du plan de données S3.
Le comportement du client peut aussi différer lorsqu’un outil suppose des services propres à AWS, des classes de stockage, des contrôles de propriété de compte ou une découverte de point de terminaison. Définissez toujours explicitement le point de terminaison RustFS et testez les opérations exactes qu’utilise votre application.
Étapes suivantes
- Suivez l’exemple AWS CLI complet.
- Choisissez un SDK S3 pour l’intégration dans une application.
- Configurez les identifiants et les politiques d’accès.
- Activez TLS avant d’exposer le point de terminaison en dehors d’un réseau de confiance.