Recommended • ~2 minutes
One-click automated setup using AWS CloudFormation. Everything is created automatically with best practices built-in.
For learning • ~15-20 minutes
Step-by-step guide through the AWS Console. Learn how each component works and configure everything yourself.
my-private-videos-123)Opens AWS CloudFormation Console in a new tab
Follow these detailed instructions to manually configure your AWS account. This gives you full control and helps you understand each component.
Amazon S3 will store your videos. You need to create a bucket where all your video files will be kept.
my-private-videos-123)us-east-1)After creating the bucket, configure CORS to allow your browser to upload and stream videos directly:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "HEAD", "PUT"],
"AllowedOrigins": [
"http://localhost:3000",
"https://your-production-domain.com"
],
"ExposeHeaders": ["Content-Length", "Content-Range", "ETag"],
"MaxAgeSeconds": 3000
}
]Important: Replace https://your-production-domain.com with your actual domain when you deploy.
Create a dedicated user with permissions to manage your videos and use MediaConvert for transcoding.
private-video-userIn the new tab that opened:
YOUR-BUCKET-NAME → Your bucket name from Step 1YOUR-ACCOUNT-ID → Your 12-digit AWS account ID (find it in the top-right corner)PrivateVideoPolicy{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
},
{
"Effect": "Allow",
"Action": [
"mediaconvert:CreateJob",
"mediaconvert:GetJob",
"mediaconvert:DescribeEndpoints"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::YOUR-ACCOUNT-ID:role/MediaConvertRole",
"Condition": {
"StringEquals": {
"iam:PassedToService": "mediaconvert.amazonaws.com"
}
}
}
]
}PrivateVideoPolicy and check the boxAKIAIOSFODNN7EXAMPLE)wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)MediaConvert needs permission to read your videos from S3 and write the transcoded files back. This role grants those permissions.
MediaConvertRoleYOUR-BUCKET-NAME with your bucket name!S3BucketAccess{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
}
]
}arn:aws:iam::123456789012:role/MediaConvertRolerole/ not policy/!Before heading to the Settings page, make sure you have all of these:
If you run into any issues during setup:
Your AWS credentials are encrypted before being stored and are only used to upload and manage your videos.