Rendre un Object Storage OVH public et accessible en HTTPS
L'objectif de ce guide est de rendre un bucket Object Storage OVH accessible publiquement en HTTPS.
Attention au nom du bucket
Avant de créer votre bucket, choisissez un nom
sans point (.).
✅ Bon exemple :
foo-bar-cdn
❌ Mauvais exemple :
foo.bar-cdn
Les buckets contenant des points provoquent des problèmes de certificat SSL lorsque l'on utilise les URLs publiques de type :
https://foo.bar-cdn.s3.gra.io.cloud.ovh.net
Le certificat wildcard présenté par OVH ne couvre pas correctement ce type de nom.
Privilégiez donc les tirets (-) plutôt que les points
(.).
Comprendre le format de l'URL HTTPS
L'URL HTTPS publique d'un objet suit généralement ce format :
https://NOM_DU_BUCKET.s3.LOCALISATION.io.cloud.ovh.net/chemin/vers/fichier
Dans ce tutoriel, nous utiliserons :
Nom du bucket : foo-bar-cdn
Localisation : gra
L'URL de base sera donc :
https://foo-bar-cdn.s3.gra.io.cloud.ovh.net
Cette URL est aussi visible dans le Manager OVH, sous le nom Virtual Host.
Créer un utilisateur S3 et appliquer une policy
Dans le Manager OVH :
Public Cloud
→ Object Storage
→ S3 Compatible API
→ Create credentials
OVH fournit alors :
- Access Key ID
- Secret Access Key
Conservez précieusement la Secret Access Key, elle ne pourra généralement plus être affichée par la suite.
Il faut ensuite attribuer une policy à cet utilisateur pour lui permettre d'administrer le bucket.
Dans le Manager OVH :
Public Cloud
→ Object Storage
→ Users
→ Import user access policy
Exemple de policy permettant d'administrer le bucket
foo-bar-cdn :
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketAcl", "s3:PutBucketAcl"],
"Resource": ["arn:aws:s3:::foo-bar-cdn"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl"
],
"Resource": ["arn:aws:s3:::foo-bar-cdn/*"]
}
]
}
⚠️ Attendre environ 5 minutes après la modification. Les droits ne sont pas appliqués instantanément.
Configurer AWS CLI
Installer AWS CLI :
brew install awscli
Configurer un profil :
aws configure --profile ovhtmp
Puis saisir :
AWS Access Key ID
AWS Secret Access Key
Region (gra, sbg, rbx, ...)
Vérifier l'accès au bucket
Lister les buckets :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3 ls
Lister le contenu du bucket :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3 ls s3://foo-bar-cdn
Si vous obtenez un AccessDenied, il faut attribuer une
policy à l'utilisateur S3.
Vérifier l'ACL actuelle du bucket
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api get-bucket-acl \
--bucket foo-bar-cdn
Avant modification, vous devriez voir uniquement le propriétaire avec :
"Permission": "FULL_CONTROL"
Rendre le bucket public
Activer la lecture publique du bucket :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api put-bucket-acl \
--bucket foo-bar-cdn \
--acl public-read
Vérifier le résultat :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api get-bucket-acl \
--bucket foo-bar-cdn
Vous devez désormais voir :
{
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
}
avec la permission :
"Permission": "READ"
Uploader de nouveaux fichiers en public
Pour que les nouveaux fichiers soient directement accessibles en HTTPS,
il faut les uploader avec l'option --acl public-read.
Exemple :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3 cp ./yt_ad_Brainrot_app.mp4 \
s3://foo-bar-cdn/videos/yt-ads/2026/yt_ad_Brainrot_app.mp4 \
--acl public-read
Sans cette option, le fichier peut être uploadé correctement, mais
rester privé. Dans ce cas, l'URL HTTPS retournera une erreur
403 AccessDenied.
Les fichiers uploadés directement depuis le Manager OVH ne sont pas
automatiquement en public-read. Si vous utilisez le Manager
OVH pour déposer des fichiers, il faudra ensuite appliquer l'ACL
publique sur chaque objet, comme expliqué dans la section suivante.
Vérifier les permissions d'un objet
Pour connaître les permissions appliquées à un objet en particulier :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api get-object-acl \
--bucket foo-bar-cdn \
--key videos/yt-ads/2026/yt_ad_Brainrot_app.mp4
Si l'objet est public, vous devriez voir un grant similaire à :
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
},
"Permission": "READ"
}
Si vous ne voyez que :
{
"Permission": "FULL_CONTROL"
}
alors l'objet est privé et ne pourra pas être téléchargé via son URL HTTPS publique.
Rendre les objets existants publics
Le bucket public ne rend pas automatiquement les objets déjà présents publics.
Pour un objet :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api put-object-acl \
--bucket foo-bar-cdn \
--key chemin/vers/fichier.mp4 \
--acl public-read
Pour tous les objets d'un préfixe :
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3 ls s3://foo-bar-cdn/videos/ --recursive \
| awk '{print $4}' \
| while read key; do
aws \
--profile ovhtmp \
--endpoint-url https://s3.gra.io.cloud.ovh.net \
s3api put-object-acl \
--bucket foo-bar-cdn \
--key "$key" \
--acl public-read
done
Vérifier l'accès HTTPS
Si le bucket ne contient pas de point dans son nom :
https://foo-bar-cdn.s3.gra.io.cloud.ovh.net/chemin/vers/fichier.mp4
Tester :
curl -I https://foo-bar-cdn.s3.gra.io.cloud.ovh.net/chemin/vers/fichier.mp4
Résultat attendu :
HTTP/2 200
Votre Object Storage est maintenant accessible publiquement en HTTPS.