Amazon S3 (Simple Storage Service) est un service de stockage d'objets proposé par AWS, conçu pour stocker et gérer des données non structurées de manière flexible, durable et sécurisée. Depuis sa création, S3 est devenu le standard de facto du stockage objet cloud, stockant aujourd'hui plus de 500 trillions d'objets représentant des centaines d'exaoctets de capacité.
📌 S3 n'est pas juste un service AWS : de nombreux fournisseurs proposent des implémentations compatibles avec l'API S3, ce qui standardise l'accès au stockage objet à travers l'écosystème cloud.
Le stockage d'objets est un paradigme de stockage où les données sont traitées comme des entités individuelles indépendantes appelées objets, à la différence du stockage par fichiers (hiérarchie de dossiers) ou du stockage bloc (volumes structurés).
| Caractéristique | Description |
|---|---|
| Objets | Données brutes + métadonnées + identifiant unique |
| Buckets | Conteneurs logiques sans hiérarchie (pas de dossiers réels) |
| Métadonnées | Tags, ACL, versions, politique de rétention, etc. |
| API REST | Accès via requêtes HTTP/HTTPS standardisées |
| Scalabilité illimitée | Capacité pratiquement sans limite |
| Redondance automatique | Données répliquées sur plusieurs zones |
┌─────────────────────────────────────────────────────┐
│ Région AWS │
│ ┌───────────────────────────────────────────────┐ │
│ │ Availability Zone 1 │ AZ 2 │ AZ 3 │ │
│ │ ┌────────────────┐ │ │
│ │ │ Données Objet │ (Réplication auto) │ │
│ │ │ Métadonnées │ │ │
│ │ │ Index │ │ │
│ │ └────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
Bucket → Collection logique d'objets (immuable au niveau bucket)
Bucket: mon-stockage/
├── photo-1.jpg (Objet 1)
│ └── Métadonnées: taille, date, tags, ACL
├── video-prod.mp4 (Objet 2)
│ └── Versions: v1, v2, v3
└── archives/logs.zip (Objet 3)
└── Classe de stockage: GLACIER
| Opération | Méthode | Exemple |
|---|---|---|
| Upload | PUT | PUT /mon-bucket/mon-objet HTTP/1.1 |
| Download | GET | GET /mon-bucket/mon-objet HTTP/1.1 |
| Lister | GET | GET /mon-bucket/ HTTP/1.1 |
| Supprimer | DELETE | DELETE /mon-bucket/mon-objet HTTP/1.1 |
| Propriétés | HEAD | HEAD /mon-bucket/mon-objet HTTP/1.1 |
| Métrique | Garantie S3 |
|---|---|
| Durabilité | 99.999999999% (11 nines) |
| Disponibilité | 99.99% |
| Redondance | ≥ 3 Availability Zones minimum |
| Réplication | Automatique entre AZ |
⚠️ Latence : ~100 ms d'accès standard. Pour les usages temps réel strict (IA générative temps réel), une base vectorielle dédiée peut être préférable.
S3 propose plusieurs classes adaptées à différents profils d'accès et coûts :
| Classe | Coût | Accès | Durée min. | Cas d'usage |
|---|---|---|---|---|
| S3 Standard | $$$ | Immédiat | - | Données chaudes, accès fréquent (93% des objets) |
| S3 Intelligent-Tiering | $$ | Variable | - | Modèles d'accès imprévisibles |
| S3 Standard-IA | $$ | Immédiat | 30 jours | Données tièdes, backups archivaux |
| S3 Glacier Instant | $ | Immédiat | 90 jours | Archivage court terme |
| S3 Glacier Flexible | $ | 1-5 min | 90 jours | Archivage, conformité légale |
| S3 Deep Archive | $ | 12h | 180 jours | Archivage très long terme (lois rétention) |
💡 Stratégie : Utiliser des politiques de cycle de vie pour déplacer automatiquement les objets entre classes selon leur âge.
┌──────────────────┬─────────────┬──────────────┬──────────────┬──────────────┐
│ Critère │ S3 (Objet) │ EBS (Bloc) │ EFS (Fichier)│ RDS (BD) │
├──────────────────┼─────────────┼──────────────┼──────────────┼──────────────┤
│ Structure │ Plate (key) │ Hiérarchique│ Hiérarchique │ Structurée │
│ Performance │ Bonne │ Excellente │ Très bonne │ Excellente │
│ Latence │ ~100ms │ <1ms │ ~1-10ms │ ~1-5ms │
│ Scalabilité │ Illimitée │ Limitée │ Très grande │ Limitée │
│ Coût (TB/mois) │ $23-50 │ $100-120 │ $30-80 │ $300+ │
│ Cas d'usage │ Médias, │ Bases, │ Conteneurs, │ Applications │
│ │ Archives │ Caches │ AppSrv │ structurées │
│ Multi-région │ Facile │ Difficile │ Impossible │ Possible │
└──────────────────┴─────────────┴──────────────┴──────────────┴──────────────┘
Le protocole S3 est standardisé, permettant une interopérabilité complète entre providers :
| Fournisseur | Type | Région | Avantages |
|---|---|---|---|
| AWS S3 | Hyperscaler | Mondial (30+ régions) | Écosystème complet, intégrations natives |
| MinIO | Open-source (self-hosted) | On-premises | Contrôle total, pas de frais d'egress |
| Wasabi | Provider cloud | Mondial | Tarification simple, pas d'egress |
| DigitalOcean Spaces | Provider cloud | 10+ régions | Tarif prévisible, UI intuitive |
| Cloudflare R2 | Provider cloud | Mondial (200+ datacenters) | Zéro coût egress, migration facile |
| Backblaze B2 | Provider cloud | Mondial | Prix très compétitifs |
| IBM Cloud Object Storage | Hyperscaler | Mondial | Conformité, intégrations IBM |
| Oracle Cloud Object Storage | Hyperscaler | Mondial | GDPR, performances optimisées |
| Linode Object Storage | Provider cloud | 10+ régions | Tarifs transparents |
| Vultr Object Storage | Provider cloud | Mondial | Performance SSD |
🌍 Souveraineté données : Providers européens (Scaleway, Exoscale, IONOS) garantissent la rétention de données dans l'UE, conforme RGPD.
# Lister les buckets
aws s3 ls
# Uploader un fichier
aws s3 cp mon-fichier.txt s3://mon-bucket/
# Synchroniser un dossier
aws s3 sync ./local-folder s3://mon-bucket/folder/
# Télécharger avec glob
aws s3 cp s3://mon-bucket/*.jpg ./ --recursive
# Configuration S3 compatible
rclone config
# Copier vers S3
rclone copy ./data wasabi:mon-bucket/
# Synchroniser bidirectionnel
rclone bisync ./local wasabi:mon-bucket/
Support : AWS S3, MinIO, Wasabi, DigitalOcean, Backblaze, Cloudflare R2, etc.
s3cmd put mon-fichier.txt s3://mon-bucket/
s3cmd sync ./folder s3://mon-bucket/
import boto3
# Client S3
s3 = boto3.client('s3')
# Upload
s3.put_object(
Bucket='mon-bucket',
Key='mon-objet.txt',
Body=open('fichier.txt', 'rb')
)
# Download
s3.download_file('mon-bucket', 'mon-objet.txt', 'local.txt')
# Lister objets
response = s3.list_objects_v2(Bucket='mon-bucket')
for obj in response['Contents']:
print(obj['Key'])
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
// Upload
s3.putObject({
Bucket: 'mon-bucket',
Key: 'mon-objet.txt',
Body: 'Contenu du fichier'
}, (err, data) => {
if (err) console.error(err);
else console.log('Upload réussi');
});
// Download
s3.getObject({
Bucket: 'mon-bucket',
Key: 'mon-objet.txt'
}, (err, data) => {
if (err) console.error(err);
else console.log(data.Body.toString());
});
AmazonS3 s3Client = new AmazonS3Client();
// Upload
PutObjectRequest request = new PutObjectRequest(
"mon-bucket", "mon-objet.txt", new File("fichier.txt")
);
s3Client.putObject(request);
// Download
GetObjectRequest getRequest = new GetObjectRequest(
"mon-bucket", "mon-objet.txt"
);
S3Object s3object = s3Client.getObject(getRequest);
Via AWS Console :
mon-entreprise-assets-2025)Via CLI :
aws s3 mb s3://mon-bucket --region eu-west-1
Créer clés IAM (AWS):
# Via AWS IAM Console
# - Créer utilisateur IAM "s3-user"
# - Policy: AmazonS3FullAccess (ou restrictif)
# - Générer clés d'accès (Access Key ID + Secret)
Pour providers S3-compatibles :
S3 Browser (Windows) :
s3.amazonaws.com (ou autre provider)CyberDuck (Mac/Linux) :
# Via CLI
aws s3 cp ./mes-donnees s3://mon-bucket/data/ --recursive
# Via rclone
rclone sync ./mes-donnees s3://mon-bucket/data/
# Vérifier
aws s3 ls s3://mon-bucket/data/ --recursive
S3 est devenu l'standard universel du stockage objet cloud :
| Aspect | Verdict |
|---|---|
| Flexibilité | ⭐⭐⭐⭐⭐ Illimitée, adaptable |
| Durabilité | ⭐⭐⭐⭐⭐ 11 nines (99.999999999%) |
| Coût | ⭐⭐⭐⭐ Prévisible, optimisable |
| Écosystème | ⭐⭐⭐⭐⭐ Outils, intégrations massives |
| Facilité | ⭐⭐⭐⭐ Courbe apprentissage facile |
Recommandation : Pour tout stockage non-structuré à l'échelle > 100GB, S3 ou son équivalent compatible est le choix naturel. L'interopérabilité complète entre providers évite le vendor lock-in.