Blog Tech 2026

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 :

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.