Object Storage - Récupérer les métadonnées d'un objet avec GetObjectAttributes
Objectif
Ce guide explique comment utiliser l'opération API S31 GetObjectAttributes pour récupérer les attributs de métadonnées des objets de vos buckets OVHcloud Object Storage sans télécharger le corps de l'objet.
Prérequis
- Un projet Public Cloud dans votre compte OVHcloud
- Un utilisateur Object Storage déjà créé
- AWS CLI installé et configuré
En pratique
Pourquoi utiliser GetObjectAttributes ?
L'inspection des métadonnées d'un objet nécessite traditionnellement au moins 2 appels API distincts : HeadObject pour récupérer l'ETag, la taille et la classe de stockage, et ListParts pour énumérer les parties des objets multipart. Chaque appel supplémentaire ajoute de la latence, ce qui devient significatif à grande échelle dans les pipelines de données, les workflows de vérification d'intégrité ou les systèmes d'audit de stockage.
GetObjectAttributes consolide la récupération de tous les attributs en un seul appel API sélectif. Vous demandez exactement les attributs dont vous avez besoin ; le service retourne uniquement ces champs — aucun corps d'objet n'est transféré.
Bénéfices clés :
- Aucun transfert de corps : récupérez uniquement les métadonnées, quelle que soit la taille de l'objet.
- Réponse sélective : recevez uniquement les attributs que vous demandez.
- Tout client compatible S3 : fonctionne avec AWS CLI, n'importe quel SDK S3 et les appels HTTP directs.
Attributs supportés
Vous sélectionnez les attributs à récupérer en les listant dans l'en-tête de requête x-amz-object-attributes (séparés par des espaces pour AWS CLI, par des virgules pour HTTP brut). Les attributs non listés sont absents de la réponse.
| Attribut | Description |
|---|---|
ETag | Identifiant opaque représentant une version spécifique du contenu de l'objet |
Checksum | Valeur de checksum calculée avec l'algorithme stocké avec l'objet lors du téléversement |
ObjectParts | Structure multipart de l'objet : liste des parties avec leur numéro, taille et checksum optionnel |
StorageClass | Classe de stockage de l'objet (STANDARD, STANDARD_IA, GLACIER_IR, DEEP_ARCHIVE, EXPRESS_ONEZONE) |
ObjectSize | Taille totale de l'objet en octets |
L'en-tête de réponse Last-Modified est toujours retourné, quels que soient les attributs demandés.
L'en-tête x-amz-object-attributes est obligatoire. Une requête sans cet en-tête retourne 400 Bad Request. Les noms d'attributs sont sensibles à la casse.
Récupérer les attributs d'un objet
Réponse en cas de succès :
Pour demander tous les attributs à la fois :
Succès : HTTP 200 OK avec un corps XML contenant les attributs demandés.
Attribut Checksum
Lorsque Checksum est demandé, la réponse inclut l'algorithme et la valeur stockés avec l'objet lors du téléversement. Si l'objet a été téléversé sans checksum, l'élément Checksum est absent de la réponse — ce n'est pas une erreur.
Algorithmes de checksum supportés sur OVHcloud Object Storage :
| Algorithme | Élément XML dans la réponse |
|---|---|
| CRC-32 | ChecksumCRC32 |
| CRC-32C | ChecksumCRC32C |
| CRC-64/NVME | ChecksumCRC64NVME |
| SHA-1 | ChecksumSHA1 |
| SHA-256 | ChecksumSHA256 |
Réponse (l'objet a un checksum CRC32) :
Réponse (l'objet n'a pas de checksum) :
Attribut ObjectParts (objets multipart)
Lorsque ObjectParts est demandé sur un objet multipart, la réponse liste toutes les parties avec leur numéro, taille et checksum optionnel. Pour les objets en une seule partie (non-multipart), ObjectParts est retourné comme un élément vide.
Pagination : les résultats sont paginés à 1000 parties par réponse maximum.
Réponse :
Paginer à travers ObjectParts (objets avec plus de 1000 parties)
Lorsqu'un objet possède plus de 1000 parties, IsTruncated vaut true et NextPartNumberMarker indique où reprendre. Utilisez --part-number-marker pour récupérer les pages suivantes.
Objets versionnés
Par défaut, GetObjectAttributes opère sur la version courante de l'objet. Pour récupérer les attributs d'une version spécifique, ajoutez --version-id à la requête.
L'en-tête de réponse x-amz-version-id retourne l'identifiant de version de l'objet récupéré.
Permissions IAM avec versionId : l'utilisation de --version-id requiert les permissions s3:GetObjectVersion et s3:GetObjectVersionAttributes, à la place des permissions par défaut s3:GetObject + s3:GetObjectAttributes.
Objets chiffrés (SSE-C)
Pour les objets chiffrés avec SSE-C (clés fournies par le client), vous devez fournir les trois en-têtes de chiffrement à chaque requête GetObjectAttributes. Le service ne stocke pas la clé.
Les trois en-têtes SSE-C sont obligatoires pour les objets SSE-C. L'omission de l'un d'eux retourne 400 Bad Request. Fournir une clé incorrecte retourne 403 Forbidden.
Pour les objets non chiffrés et SSE-S3, n'incluez pas les en-têtes SSE-C — les inclure retourne 400 Bad Request.
Permissions IAM
| Situation | Permissions requises |
|---|---|
Sans versionId | s3:GetObject + s3:GetObjectAttributes |
Avec versionId | s3:GetObjectVersion + s3:GetObjectVersionAttributes |
Aucune permission supplémentaire n'est requise au-delà des permissions de lecture standard.
Codes d'erreur
| Code HTTP | Code d'erreur | Condition |
|---|---|---|
200 OK | - | Requête réussie |
400 Bad Request | InvalidArgument | x-amz-object-attributes manquant, nom d'attribut invalide, ou combinaison d'en-têtes SSE-C invalide |
403 Forbidden | AccessDenied | Permission IAM manquante, ou clé SSE-C incorrecte |
404 Not Found | NoSuchKey | L'objet n'existe pas et le demandeur a s3:ListBucket |
403 Forbidden | AccessDenied | L'objet n'existe pas et le demandeur n'a PAS s3:ListBucket |
405 Method Not Allowed | - | La version cible est un marqueur de suppression |
Marqueurs de suppression : dans un bucket versionné, si la version courante d'un objet (ou la version spécifiée par --version-id) est un marqueur de suppression, le service retourne 405 Method Not Allowed avec l'en-tête de réponse x-amz-delete-marker: true.
Aller plus loin
Échangez avec notre communauté d'utilisateurs.
1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.