Environment
-
PeerTube server version: 5.2.1
-
S3 Provider: OVH
-
Operation: Moving video files from filesystem to object storage
Issue Description
I’m attempting to migrate video files from local storage to S3 object storage following the official documentation: https://docs.joinpeertube.org/maintain/tools#move-video-files-from-filesystem-to-object-storage
The migration fails with an AccessDenied error during the multipart upload creation phase.
Important Note: Public videos upload successfully to S3. The issue occurs only with private videos.
Error Details
Job Information:
-
Job ID: 28646
-
Type: move-to-object-storage
-
Status: Failed
-
Processed on: 12/10/25, 5:07:07.165 PM
{« videoUUID »: « 5f7adfb9-1436-4f48-b265-f200c61b0f49 »,« isNewVideo »: false,« previousVideoState »: 8} **Error Stack Trace:** AccessDenied: Access Denied.at throwDefaultError (/app/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:8:22)at /app/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:18:39at de_CreateMultipartUploadCommandError (/app/node_modules/@aws-sdk/client-s3/dist-cjs/protocols/Aws_restXml.js:3212:12)at runMicrotasks ()at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /app/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24at async /app/node_modules/@aws-sdk/middleware-signing/dist-cjs/middleware.js:14:20at async /app/node_modules/@aws-sdk/middleware-retry/dist-cjs/retryMiddleware.js:27:46at async /app/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:7:26at async Upload.__createMultipartUpload (/app/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:116:45)at async Upload.__doConcurrentUpload (/app/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:132:21)at async Promise.all (index 0)at async Upload.__doMultipartUpload (/app/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:211:9)at async Upload.done (/app/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:39:16)
Scenarios Tested:
Scenario 1: With OVH ACLs enabled
-
Tested with ACL:
public-read -
Tested with ACL:
private -
Result: AccessDenied error on CreateMultipartUpload
Scenario 2: With ACLs disabled
-
Bucket configured without ACL support
-
Result: AccessDenied error on CreateMultipartUpload
Observations
-
Public videos: Upload successfully to S3 -
Private videos: Fail with AccessDenied during CreateMultipartUpload
Question
The error occurs specifically during the CreateMultipartUpload operation for private videos only. Both ACL-enabled and ACL-disabled configurations fail with the same error. What are the differences in permissions/ACL handling between public and private videos in PeerTube’s S3 implementation? Is there specific OVH S3 configuration needed for private video uploads?