Aller au contenu
HexaTransfer
Retour au blog
Cloud et stockage

Gestion de fichiers multi-cloud : évitez le vendor lock-in

Gérez vos fichiers sur plusieurs fournisseurs cloud : évitez le vendor lock-in, optimisez les coûts et conservez un accès cohérent entre plateformes.

La gestion de fichiers multi-cloud consiste à stocker des données sur deux fournisseurs ou plus (par exemple AWS S3 plus Cloudflare R2 plus Backblaze B2) derrière une abstraction unique qui traite n'importe lequel d'entre eux comme un hébergement valide pour un fichier donné. Le bénéfice concret : une protection contre les défaillances de fournisseur, un levier lors des renouvellements de contrats, et la capacité de maintenir les frais d'egress proches de zéro en choisissant le bon fournisseur par charge de travail. Les ingrédients techniques : une API compatible S3 comme lingua franca, rclone ou MinIO Gateway comme client portable, un index de métadonnées (Postgres ou DynamoDB-compatible) qui enregistre quel fournisseur détient chaque objet, et un inventaire des identifiants gérable en CI via HashiCorp Vault ou AWS Secrets Manager.

Ce que le vendor lock-in coûte réellement

Le lock-in est rarement une seule grosse facture — c'est une centaine de petites frictions. Dès que votre code utilise aws s3 cp, code en dur us-east-1, s'appuie sur S3 Select, ou dépend des flux DynamoDB, migrer ailleurs signifie réécrire tout cela. Les frais d'egress sont la taxe la plus visible : AWS facture 0,09 $ par Go sortant pour les premiers 10 To. Déplacer 50 To hors d'AWS coûte environ 4 000 $ de bande passante seule, sans compter le temps des ingénieurs.

Moins évident : les fonctionnalités propriétaires comme les verrous de coffre-fort Glacier, les déclencheurs Lambda sur des événements S3, ou IAM Access Analyzer deviennent tous des projets de migration. Le multi-cloud ne consiste pas à utiliser chaque cloud pour tout — il s'agit de garder la porte de sortie ouverte pour que vos prix et votre fiabilité restent honnêtes.

L'API compatible S3 comme terrain commun

Presque chaque fournisseur de stockage objet parle désormais l'API S3 : AWS, Backblaze B2, Cloudflare R2, Wasabi, Google Cloud Storage (en mode interopérabilité), Azure Blob (via passerelle tierce), et MinIO ou Ceph RGW auto-hébergés. Cela signifie qu'un seul SDK couvre tous :

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
const r2 = new S3Client({
  region: 'auto',
  endpoint: 'https://account.r2.cloudflarestorage.com',
  credentials: { accessKeyId, secretAccessKey }
});
await r2.send(new PutObjectCommand({
  Bucket: 'transfers', Key: 'fichier.zip', Body: stream
}));

S'en tenir au sous-ensemble de l'API S3 (PUT, GET, LIST, DELETE, multipart, URLs présignées) vous donne une portabilité totale. Évitez les appels spécifiques au fournisseur comme s3:GetObjectLegalHold sauf si vous avez un plan pour cette fonctionnalité sur chaque backend.

Abstraire les fournisseurs derrière un routeur

Construisez un petit routeur qui mappe les chemins logiques vers des buckets physiques. En code, c'est une fonction :

interface Store { put(key, stream); get(key); delete(key); }
class MultiCloudRouter implements Store {
  constructor(private index: Index, private stores: Record<string, Store>) {}
  async put(key: string, stream: ReadableStream) {
    const provider = chooseProvider(key);
    await this.stores[provider].put(key, stream);
    await this.index.record(key, provider);
  }
  async get(key: string) {
    const provider = await this.index.lookup(key);
    return this.stores[provider].get(key);
  }
}

chooseProvider peut être guidé par des politiques : affinité régionale, niveau de coût, exigence de réplication, ou simple round-robin entre fournisseurs. L'index (table Postgres ou DynamoDB) est la source unique de vérité pour l'emplacement des objets.

Optimisation des coûts entre fournisseurs

Les prix varient considérablement :

  • AWS S3 Standard : 0,023 $/Go stockage, 0,09 $/Go egress
  • Cloudflare R2 : 0,015 $/Go stockage, 0 $ egress
  • Backblaze B2 : 0,006 $/Go stockage, 0,01 $/Go egress
  • Wasabi : 0,0069 $/Go stockage, egress gratuit (jusqu'à 1x volume stocké par mois)
  • AWS S3 Glacier Deep Archive : 0,00099 $/Go stockage, 0,02 $/Go egress + frais de récupération

Une politique de routage intelligente :

  • Téléchargements face aux utilisateurs : R2 (l'egress gratuit écrase la concurrence)
  • Archive froide : S3 Glacier Deep Archive
  • Redondance régionale : B2 (bon marché, fiable, surface de risque corporate différente d'AWS)
  • Copie de conformité avec longue rétention : Wasabi avec Object Lock

Pour un service de transfert de fichiers déplaçant 50 To sortants par mois, passer l'egress de S3 à R2 économise 4 500 $/mois avant de faire quoi que ce soit d'autre.

Maintenir les données synchronisées entre fournisseurs

Pour les données critiques que vous souhaitez répliquer entre fournisseurs, utilisez la synchronisation ou bisync de rclone :

rclone sync r2:transfers b2:transfers-mirror --transfers 16 --checksum

Pour la réplication continue, soit AWS S3 Cross-Region Replication (qui supporte les cibles externes via Lambda) ou un réplicateur basé sur les files : postez chaque PUT dans SQS/Kafka, le consommateur lit depuis la file et écrit vers le fournisseur secondaire. Cohérence éventuelle, avec un RPO de quelques minutes.

Ne répliquez pas tout. Répliquez uniquement ce que vous ne pouvez pas recréer : octets envoyés par les utilisateurs, oui ; artefacts de build, probablement pas ; journaux d'analyse qui existent aussi dans votre entrepôt, certainement pas.

Gestion des identifiants sans erreurs fatales

Le multi-cloud signifie plus d'identifiants, et les identifiants qui fuient sont à l'origine des violations. Deux pratiques :

  • Coffre-fort centralisé : HashiCorp Vault, AWS Secrets Manager, ou Google Secret Manager. Ne jamais committer de clés dans Git ; scannez avec gitleaks en CI.
  • Tokens à courte durée de vie et portée limitée : préférez les tokens STS aux clés d'accès permanentes. Limitez chaque identifiant à un seul bucket et aux verbes minimaux nécessaires.

Faites pivoter automatiquement selon un calendrier de 90 jours pour les clés à longue durée de vie, 1 heure pour les STS. Étiquetez chaque clé avec propriétaire, objectif, et expiration. Révisez les orphelins mensuellement.

Surveillance unifiée et journalisation

L'observabilité entre fournisseurs est plus importante qu'à l'intérieur d'un seul d'entre eux. Envoyez tous les journaux d'accès des fournisseurs vers un récepteur unique :

  • Journaux d'accès serveur S3 → CloudWatch → OpenSearch
  • Journaux d'accès R2 → Cloudflare Logpush → S3 → OpenSearch
  • Notifications d'événements B2 → webhooks → Loki

Les tableaux de bord unifiés affichent : requêtes par fournisseur, taux d'erreur, latence p99, octets d'egress par bucket, accumulation de coûts en quasi-temps réel. Alertez quand un seul fournisseur dépasse 2x l'egress quotidien attendu (bon signal d'URL présignées fuites ou d'abus de scrapers).

Gouvernance et conformité en multi-cloud

Le multi-cloud multiplie la surface de conformité. Chaque fournisseur a besoin de son propre accord de traitement des données, de sa propre révision de sous-traitant, et de sa propre piste d'audit. Étapes pratiques conformément au RGPD :

  • Mappez chaque classification de données (public, interne, confidentiel, restreint) aux fournisseurs autorisés
  • Documentez la résidence : les transferts de l'UE au titre de l'article 44 du RGPD nécessitent un mécanisme valide (CCT, décision d'adéquation). Maintenez les données à portée UE dans la région R2 EU ou OVH Object Storage.
  • Suivez les sous-traitants. Quand un fournisseur ajoute un nouveau sous-traitant, vous pourriez avoir besoin d'informer les clients au titre de l'article 28(2).
  • Répliquez les journaux d'audit hors du fournisseur principal — un incident AWS qui met CloudTrail hors service ne devrait pas emporter votre historique d'audit avec lui.

Construire un plan de sortie avant d'en avoir besoin

Un plan de sortie crédible comprend trois parties : un inventaire de chaque dépendance, un script de migration testé, et un budget pour l'egress. L'inventaire inclut le code, l'IaC (modules Terraform liés à des ressources spécifiques au fournisseur), les politiques IAM, les buckets, et toute configuration d'origine CDN. Les scripts de migration doivent être exécutables trimestriellement en mode simulation afin qu'ils ne se détériorent pas. Budget d'egress : prévoyez 1,2x votre volume stocké, car vous retraiterez probablement pendant la migration.

Même si vous ne quittez jamais un fournisseur, l'existence d'un plan répété signifie que les négociations de renouvellement de contrat ont du poids, et qu'une hausse de prix imprévue ou un changement de service ne paralyse pas l'équipe.

HexaTransfer fonctionne sur une couche de stockage compatible S3 précisément pour garder le choix du fournisseur ouvert — une stratégie qui fonctionne également bien pour toute équipe déplaçant de gros fichiers. Essayez-le sur https://hexatransfer.com — gratuit, sans compte, 10 Go maximum.

Quand le multi-cloud est excessif

Le multi-cloud n'est pas gratuit. Vous payez en complexité d'ingénierie, outillage dupliqué, et surface opérationnelle. Pour les équipes de moins de 10 ingénieurs avec un seul produit, choisissez un fournisseur, négociez des tarifs de volume, et investissez la complexité économisée dans le produit. Le multi-cloud justifie son coût dès que vous atteignez l'un de ces trois seuils : la conformité exige la résidence des données dans plusieurs juridictions, la fiabilité exige une redondance au niveau du fournisseur (pas seulement de la région), ou le levier d'achat contre un seul fournisseur importe à l'entreprise. En dessous de ces seuils, un seul cloud avec une couche d'abstraction propre et un plan de sortie documenté est généralement le choix pragmatique.

Envoyez vos fichiers volumineux en toute sécurité avec le chiffrement de bout en bout

Transférez des fichiers jusqu'à 10 Go gratuitement avec le chiffrement de bout en bout. Aucun compte requis. Vos fichiers sont chiffrés dans votre navigateur avant l'envoi — personne d'autre ne peut les lire.

Envoyer un fichier