AdministrationPrise en charge des protocoles

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 :

DomaineFlux pris en charge
CompartimentsCréer, supprimer, répertorier, inspecter et récupérer l’emplacement
ObjetsPut, get, head, copie, suppression, suppression multiple, lectures par plage, requêtes conditionnelles et métadonnées utilisateur
ListageListObjects, ListObjectsV2, préfixes, délimiteurs, marqueurs et pagination
Objets volumineuxCréer, charger, copier, répertorier, finaliser et interrompre les chargements partitionnés
Gestion des donnéesGestion 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èsIdentifiants et politiques IAM, politiques de compartiment, blocage de l’accès public et URL présignées GET/PUT
IntégrationCORS, 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.

VariableRôleValeur par défaut
RUSTFS_ADDRESSAdresse d’écoute de l’API S3:9000
RUSTFS_REGIONRégion utilisée pour la signature des requêtes et pour les clients qui tiennent compte de la régionus-east-1
RUSTFS_ACCESS_KEYClé d’accès racinePropre à l’installation
RUSTFS_SECRET_KEYClé secrète racinePropre à l’installation
RUSTFS_SERVER_DOMAINSDomaines séparés par des virgules pour les requêtes en adressage de type hôte virtuelNon définie
RUSTFS_TLS_PATHRépertoire contenant rustfs_cert.pem et rustfs_key.pemNon 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.txt

Configurez 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.txt

Configurez 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 configure

Saisissez 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]: json

Passez 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-buckets

Charger 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.txt

Cré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 3600

Le 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-bucket

Un 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

On this page