Subchapter 114.68
use-cases/video-sdk-bring-your-own-storage.mdMarkdown7 KBView on GitHub
Video SDK feature that saves cloud recordings directly to your Amazon S3 bucket. No downloading required.
Official docs:
References
App Types┌─────────────────┐ ┌─────────────────┐
│ Video SDK │ │ Your AWS │
│ Session │ Direct Upload │ S3 Bucket │
│ │ ──────────────────►│ │
│ Recording... │ (via IAM role │ .mp4 .m4a .txt │
│ │ or access key) │ │
└─────────────────┘ └─────────────────┘| Aspect | BYOS (Video SDK) | Recording Download Pipeline |
|---|---|---|
| How it works | Zoom writes directly to your S3 | You download from Zoom, upload to S3 |
| Products | Video SDK only | Zoom Meetings |
| Latency | During recording | After recording completes |
| Your infrastructure | Just S3 bucket + credentials | Webhook server + download code |
| Bandwidth cost | None (direct to S3) | You pay for download |
BYOS recordings are stored at:
Buckets/{bucketName}/cmr/byos/{YYYY}/{MM}/{DD}/{GUID}/cmr_byos/Create a private S3 bucket with “Block all public access” enabled.
Enter Your ARN in format:
arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/ZoomArchivingRoleGet Zoom Account ID from the help text below the ARN field, or via Get Account Settings API (opens in a new tab)
Create IAM Policy with these permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketList",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_name"
},
{
"Sid": "S3ObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::your_bucket_name/*"
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "Zoom_ARN"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "YOUR_ZOOM_ACCOUNT_ID"
}
}
}
]
}Zoom performs HTTP PUT, GET, and LIST operations against your bucket to validate credentials.
Record a Video SDK session and verify recordings appear in your S3 bucket.
| Endpoint | Description |
|---|---|
GET /v2/videosdk/byos/storage | List storage locations |
POST /v2/videosdk/byos/storage | Add storage location |
DELETE /v2/videosdk/byos/storage/{storageId} | Delete storage location |
PATCH /v2/videosdk/byos/storage/{storageId} | Update storage location |
Use the Cloud Recording APIs (opens in a new tab) to manage, play, and download BYOS recordings.
Important: Cloud recordings have two components:
| Component | Location | Managed by |
|---|---|---|
| Metadata | Zoom (portal) | Zoom APIs / Web Portal |
| Recording files | Your S3 bucket | You / AWS |
The Zoom web portal only manages metadata, not S3 files:
Recommendation: Use APIs for full control over BYOS recordings.
| Action | Metadata | S3 Files |
|---|---|---|
| Toggle BYOS off | Deleted from Recordings page | Unaffected |
| Delete storage location | Deleted from Recordings page | Unaffected |
Warning: Both actions permanently remove metadata. Re-adding the same storage location won’t restore playback in the portal.
This tests region, bucket, and credentials.
Look for AssumeRole or PutObject errors:
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssumeRole| Issue | Cause | Fix |
|---|---|---|
| Upload fails | Invalid credentials | Verify access key or IAM role |
| Permission denied | Missing S3 permissions | Check IAM policy has all required actions |
| Bucket not found | Wrong region/name | Verify bucket name and region match exactly |