fix: validate S3 browser download CORS
This commit is contained in:
@@ -96,6 +96,8 @@ Worker 每 5 分钟按 `expires_at` 精确删除对象,删除成功后才删
|
||||
|
||||
Access Key 和 Secret Key 使用项目现有 AES-256-GCM 机制加密入库,页面只显示掩码。保存后先执行“全链路测试”,再点“验证并启用”。后端激活前会再次执行 `HeadBucket + 内部 PutObject/GetObject + 公网预签名 GET + 内部 DeleteObject`。编辑现有端点时先对候选配置执行同等测试,并抽查历史对象是否仍可访问;测试通过后才保存,活动状态不变。删除采用软删除,立即停止新写入并隐藏端点,但保留历史对象所需的加密配置;历史关联清空 30 天后再彻底移除。若删除活动端点,新文件自动回退应用服务器本地,直到启用其他 S3。
|
||||
|
||||
浏览器通过公网预签名地址直接读取对象,因此 Bucket 必须允许应用站点跨域 GET/HEAD。将 `docker/storage/cors.json` 中的站点域名改成实际应用域名后,通过兼容 S3 的管理工具执行 `PutBucketCors`。后台全链路测试会携带 `PUBLIC_BASE_URL` 的 Origin,并拒绝缺失或不匹配的 `Access-Control-Allow-Origin`,避免对象存在但浏览器无法下载。
|
||||
|
||||
## 7. 后续部署顺序(本次不执行)
|
||||
|
||||
1. 为下载域名添加 DNS,确认 119 的 80/443 可用,并建立 WireGuard。
|
||||
@@ -118,12 +120,17 @@ aws --endpoint-url http://127.0.0.1:3900 \
|
||||
s3api put-bucket-lifecycle-configuration \
|
||||
--bucket imageforge-results \
|
||||
--lifecycle-configuration file://lifecycle.json
|
||||
aws --endpoint-url http://127.0.0.1:3900 \
|
||||
s3api put-bucket-cors \
|
||||
--bucket imageforge-results \
|
||||
--cors-configuration file://cors.json
|
||||
```
|
||||
|
||||
## 8. 上线验收
|
||||
|
||||
- 管理端测试必须完成读、写、删,Bucket 内不能残留健康检查对象。
|
||||
- 普通下载接口先返回 `307`,`Location` 指向下载域名且有效期约 300 秒。
|
||||
- 携带应用站点 `Origin` 请求预签名地址时返回匹配的 `Access-Control-Allow-Origin`,浏览器可读取完整对象。
|
||||
- 未授权用户无法取得签名 URL;任务过期后应用下载接口返回 404。
|
||||
- 单文件与批任务数据库均记录正确的 `storage_endpoint_id` 和对象键。
|
||||
- 切换到第二端点后,新对象进入第二端点,第一端点历史对象仍可下载。
|
||||
|
||||
Reference in New Issue
Block a user