Aurabase Logo
aurabasedocs
docsServicesStorage

Storage

API S3-compatible, transformations d’image à la volée, URLs signées par défaut, CDN 12 régions. Virus scan et uploads reprenables inclus.

6 min de lecture·Niveau intermédiaire·Révisé le 15 avr. 2026
#
Vue d’ensemble

Un bucket, une origine, un CDN

§ 01

Le service aura-storagegère vos fichiers binaires : upload, download, transformations d'image, URLs signées, scan antivirus, distribution CDN. L'API est wire-compatible avec S3 — vos outils Terraform, Ansible, rclone ou boto3 fonctionnent tels quels.

Les objets sont organisés en buckets. Chaque bucket a une politique (public ou privé), des limites de taille, un TTL optionnel, et un ensemble de policies RLS qui contrôlent qui peut lire/écrire chaque chemin.

Info
Les métadonnées vivent dans project_{uuid}_storage (buckets, objects, upload_sessions, rls_policies). Les binaires sont sur un stockage S3-compatible derrière.
#
Modèle mental

Chemin → RLS → CDN → origine

§ 02

Lors d'une lecture, le CDN regarde son cache (94% hit rate en moyenne). Miss : il demande au service, qui vérifie la RLS sur le path et sert depuis le storage. En upload, le flux est inversé : client → service → storage, avec validation RLS et scan antivirus en sortie.

schema
TEXT
┌───── CDN (12 POPs) ─────┐
GET /object/… ─────▶ │ cache hit (94%) ⇢ serve │
│ miss ⇢ origin │
└──────────┬──────────────┘
┌──────────▼──────────────┐
│ aura-storage │
│ ─ RLS check on path │
│ ─ ClamAV scan (upload) │
│ ─ transforms cache │
└──────────┬──────────────┘
S3-compatible origin
#
Primitives

Six capacités natives

§ 03
API S3-compatible
SDK AWS S3, Minio, rclone, Terraform, boto3 fonctionnent sans modification.
Transforms à la volée
Resize, WebP/AVIF, crop, quality, blur. Cache edge par URL unique.
Signed URLs
HMAC-SHA256, nonce anti-replay, TTL explicite, download forcé.
Uploads reprenables
Chunks 6 MB, reprise auto réseau, progression granulaire.
Virus scan auto
ClamAV + signatures propriétaires, quarantaine + webhook.
CDN 12 régions
HTTP/3, TLS 1.3, Anycast routing, purge par tag.
#
Exemples

Quatre opérations de base

§ 04
avatar.tsTYPESCRIPT
const { data, error } = await aura.storage.from('avatars')
.upload(`${user.id}/${file.name}`, file, {
cacheControl: 'max-age=31536000, immutable',
contentType: file.type,
upsert: true,
})
// Resumable auto si fichier > 6MB (chunks 6MB, reprise auto)
Astuce
Les URLs de transformation sont immuables par paramètres. ?width=240&format=avif et ?width=240&format=webpsont deux URLs distinctes avec deux caches — la transformation n'est calculée qu'une fois par combinaison, puis servie depuis les 12 POPs.
#
Policies d’accès

RLS sur les paths d’objets

§ 05

Les policies storage s'écrivent en SQL standard sur la table storage.objects. Elles voient le path complet et peuvent le parser pour décider.

migrations/avatars.sql
SQL
-- Chaque utilisateur voit uniquement ses propres avatars
create policy "avatars_owner_read"
on storage.objects for select
using (
bucket_id = 'avatars'
and (storage.foldername(name))[1] = auth.uid()::text
);
-- Upload autorisé uniquement dans son propre dossier
create policy "avatars_owner_write"
on storage.objects for insert
with check (
bucket_id = 'avatars'
and (storage.foldername(name))[1] = auth.uid()::text
);
Dernière mise à jour · 15 avr. 2026