一、结论
你可以通过对象级ACL、存储桶策略、IAM授权、预签名URL四种方式,为S3兼容对象存储中存储的视频资源,配置公开访问、指定身份访问、临时授权访问三类权限,整个操作不需要复杂的底层配置,新手按照步骤操作即可快速完成。
二、准备工作
1. 已开通S3兼容对象存储服务账号,包括原生AWS S3或其他兼容S3协议的对象存储服务
2. 拥有账号的Access Key、Secret Key,且账号具备对应存储桶的权限配置权限(至少拥有s3:PutBucketPolicy、s3:PutObjectAcl权限)
3. 已将需要配置权限的视频资源上传到对应存储桶,记录好存储桶名称、视频文件的路径(S3中称为Object Key,例如videos/2024/产品演示.mp4)
4. 若选择可视化操作,可直接通过服务提供商的网页控制台操作;若选择批量/命令行操作,需提前在本地安装aws-cli或s3cmd工具并完成凭证初始化
三、操作步骤
步骤1:明确权限需求与资源范围
操作前先确认两个核心信息,避免配置错误:
- 权限范围:是单个视频、某一目录下所有视频,还是整个存储桶的全部视频?如果是分类管理的视频,建议按权限类型放到不同目录,后续配置更简单
- 授权对象:是允许所有人公开访问,还是仅公司内部员工访问,或是仅付费用户在有效期内访问?不同授权对象对应不同配置方式
步骤2:完成身份验证与存储桶定位
- 控制台操作路径:打开对应对象存储服务的控制台,输入账号密码登录,在存储桶列表中找到视频所在的存储桶,点击进入存储桶详情页
- 命令行操作路径:打开本地终端,执行
aws configure命令,依次输入Access Key、Secret Key、存储桶所属区域(Region)、默认输出格式(填json即可),配置完成后执行aws s3 ls,如果能列出所有存储桶则验证通过。如果使用非AWS的S3兼容服务,需要在命令后加--endpoint-url <服务商提供的Endpoint地址>参数
步骤3:根据需求完成权限配置
#### 场景1:配置视频公开访问(适合公开课、宣传视频等可公开传播的内容)
- 单个/少量视频配置:在控制台文件列表中勾选目标视频,点击「设置权限」,选择「公共读」权限后确认保存即可
- 目录/全桶视频配置:进入存储桶的「权限配置」-「存储桶策略」页面,填写对应策略JSON,保存后即可生效,注意不要额外添加写权限,避免资源被篡改
#### 场景2:配置仅指定身份可访问(适合内部培训视频、付费内容等非公开资源)
- 先获取授权对象的IAM用户ARN(可在IAM用户详情页查看),在存储桶策略的
Principal字段填写对应的ARN,Action仅填写s3:GetObject,Resource填写对应视频的路径规则,保存后只有指定身份携带正确凭证才能访问视频 - 如果需要限制IP访问,可在策略中添加
Condition字段,指定允许访问的IP段即可
#### 场景3:生成临时访问链接(适合付费用户临时查看、临时分享的视频资源)
- 控制台操作:找到目标视频,点击「生成预签名链接」,设置有效期(支持从1分钟到7天不等),点击生成即可得到临时链接,链接过期后自动失效
- 命令行操作:执行
aws s3 presign s3://<存储桶名称>/<视频路径> --expires-in <有效期秒数>,即可直接输出临时访问链接,有效期最长可设置为7天
四、常见错误
- endpoint填写错误:使用非AWS的S3兼容存储时,没有填写对应平台的专属endpoint,导致请求发送到AWS官方地址,出现连接失败、找不到存储桶的问题
- region配置错误:存储桶创建时选择的区域,和凭证配置时填写的region不一致,会导致请求路由错误,无法找到目标存储桶
- 公共访问阻止未关闭:大部分S3兼容存储默认开启存储桶公共访问阻止开关,即使配置了公共读权限,没有关闭这个开关也会出现403访问拒绝
- 权限范围过大:配置存储桶策略时误添加
s3:PutObject、s3:DeleteObject等写权限,或者错误配置Resource为整个存储桶,导致非授权范围的资源也被公开,甚至出现资源被篡改、删除的风险 - 策略语法错误:编写JSON格式的存储桶策略时,漏写引号、逗号,或者
Action、Resource字段填写错误,会导致策略保存失败或不生效
五、示例说明
假设你需要给存储桶course-bucket下的videos/free/2024/目录下所有公开课程视频,配置所有人可访问的权限,操作如下:
1. 登录对象存储控制台,进入course-bucket的详情页,打开「权限配置」-「存储桶策略」页面
2. 粘贴如下策略JSON:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::course-bucket/videos/free/2024/*"
}
]
}
```
3. 点击保存后,测试访问https://<endpoint地址>/course-bucket/videos/free/2024/入门课程.mp4,可正常播放即配置成功。
六、更简单的方案
如果觉得原生AWS S3的IAM层级、区域配置、公共访问阻止等规则过于复杂,新手容易踩坑,可以选择兼容S3协议的对象存储服务简化操作流程。比如七彩云对象存储,完全兼容S3 API,原有对接S3的业务代码不需要任何修改即可直接迁移,控制台内置了公开读、私有、指定IP访问、防盗链等常用权限模板,不需要手动编写JSON策略,新手上传视频后直接在文件列表点击「权限设置」即可完成配置,同时控制台会自动展示对应存储桶的endpoint和region信息,不需要手动查找配置,大幅降低操作门槛。
七、FAQ
1. 我已经配置了公共读权限,为什么访问视频还是提示403拒绝?
首先检查对应存储桶的公共访问阻止开关是否关闭,大部分S3兼容存储默认开启这个功能,需要手动关闭公共读限制;其次检查存储桶策略的Resource字段是否填写正确,目录级配置需要在路径末尾加/*才能匹配目录下所有文件;最后检查视频的对象级ACL是否覆盖了桶策略,如果上传视频时单独设置了私有权限,桶策略的公共访问规则不会生效。
2. 预签名URL的有效期最长可以设置多久?
原生AWS S3使用IAM用户生成的预签名URL最长有效期为7天,使用根账号生成的最长有效期为1年,包括七彩云对象存储在内的大多数S3兼容服务都和这个规则保持一致。如果需要更长时间的授权,建议使用指定IAM用户访问的方式,或者定期刷新预签名URL。
3. 怎么防止别人盗链我的视频资源?
可以在存储桶策略中添加Referer校验规则,仅允许来自你自己网站域名的请求访问视频,在策略的Statement块中添加如下Condition字段即可:
```json
"Condition": {
"StringLike": {
"aws:Referer": ["https://你的域名/*", "https://www.你的域名/*"]
}
}
```
配置后只有从你的域名跳转的请求才能访问视频,直接复制链接到其他网站会提示访问拒绝。
4. 我有上千个视频需要批量设置权限,一个个操作太麻烦怎么办?
如果视频是按权限分类存放在不同目录的,直接给对应目录配置存储桶策略即可,不需要修改单个文件的权限;如果是零散的视频,可以通过S3 SDK编写批量脚本,或者使用aws cli的aws s3api put-object-acl命令遍历文件批量修改,效率比手动操作高很多。
八、总结
给S3对象存储的视频设置访问权限的核心流程是:先明确权限范围和授权对象,再准备好对应账号权限,最后根据需求选择ACL、存储桶策略或预签名URL的方式完成配置,配置完成后一定要测试访问是否正常。建议新手操作时优先选择内置权限模板的S3兼容服务,比如七彩云对象存储,降低配置出错的概率,同时始终遵循最小权限原则,不要给不必要的写权限,敏感视频尽量使用预签名URL的方式授权,避免资源泄露或被盗用。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网