Amazon S3 及 S3 兼容存储对接 GoodSync
S3 对接的认证方式
与需要 OAuth 授权的 Google Drive/Dropbox 不同,S3 类服务使用 Access Key ID + Secret Access Key 作为认证凭据:
| 字段 | 说明 | 获取位置 |
|---|---|---|
| Access Key ID | 公钥,类似用户名 | AWS 控制台 → IAM → 用户 → 安全凭据 → 创建访问密钥 |
| Secret Access Key | 私钥,类似密码 | 创建密钥时只显示一次,之后无法再取回——务必保存好 |
| Endpoint | API 端点地址(可选) | 默认是 AWS S3 的端点;S3 兼容存储需填自家端点 |
| Region | 存储区域(可选) | 如 us-east-1、ap-southeast-1 |
GoodSync 中配置 S3 端点
- 创建或编辑作业
- 选择左侧或右侧端点类型为「Amazon S3」
- 填写凭据:
- Access Key ID
- Secret Access Key
- Bucket Name(存储桶名)
- Folder Path(桶内的子目录,用
/分隔) - Endpoint(S3 兼容存储必填,AWS S3 可留空)
- Region(AWS S3 建议填写,兼容存储可留空)
- 点击「Connect」测试连接
- 连接成功后可以在目录列表中浏览桶内文件
AWS S3 的 IAM 最小权限原则
不要给 GoodSync 用管理员级别的 IAM 凭据。创建一个专用的、权限最小化的 IAM 用户,只给它操作目标 Bucket 所需的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::your-backup-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::your-backup-bucket/*"
}
]
}
这个策略允许 GoodSync 列出桶内容、读取对象、上传新对象、删除对象——正好覆盖同步所需的全部操作。
S3 兼容存储
GoodSync 支持 S3 协议的通用 API 调用,因此也能对接各种 S3 兼容存储:
| 兼容存储 | Endpoint | 说明 |
|---|---|---|
| Cloudflare R2 | https://<account-id>.r2.cloudflarestorage.com | 无出站费用,国内访问可能需要代理 |
| MinIO | http://<host>:9000 | 自建 S3 兼容存储 |
| Wasabi | https://s3.wasabisys.com | 商业 S3 兼容存储 |
| DigitalOcean Spaces | https://nyc3.digitaloceanspaces.com | DO 对象存储 |
| 阿里云 OSS(S3 模式) | https://oss-cn-hangzhou.aliyuncs.com | 阿里云对象存储 |
| 腾讯云 COS(S3 兼容) | https://cos.ap-guangzhou.myqcloud.com | 腾讯云对象存储 |
S3 兼容存储的 Bucket 创建、Access Key 获取流程各有不同,但 GoodSync 的配置方式完全一致——填写 Endpoint + Access Key + Secret Key + Bucket Name。
S3 作为 GoodSync 的端点的注意事项
对象存储 vs 文件系统
S3 是对象存储而不是文件系统,GoodSync 在对接时做了一层适配:
| 文件系统操作 | S3 对应操作 | GoodSync 处理 |
|---|---|---|
| 创建目录 | S3 没有目录概念 | GoodSync 通过在对象键名中用 / 分隔来模拟目录 |
| 重命名文件 | S3 不支持原地重命名 | GoodSync 执行「复制到新键名 + 删除旧键名」两步操作 |
| 修改文件 | S3 不支持原地修改 | 实际上传一个新对象覆盖旧对象 |
| 权限属性 | S3 对象级 ACL | GoodSync 可配置同步对象的 ACL |
重要提示:S3 上的「重命名」实际上是「复制 + 删除」。如果同步过程中断,可能出现新旧两个对象同时存在的情况——GoodSync 有专门的 S3 处理逻辑来避免这种问题,但在同步大批量重命名时可能比文件系统慢。
S3 存储类别与版本控制
如果你的 S3 Bucket 开启了版本控制(Versioning):
- S3 自己也会保存对象的历史版本
- 这与 GoodSync 的版本历史功能叠加生效——你可能在两个地方找到历史版本
- 建议二选一:要么用 S3 版本控制,要么用 GoodSync 版本历史,避免重复和混淆
关于 S3 存储类别(Standard → IA → Glacier):
- GoodSync 同步时会在 S3 上创建新对象,使用 Bucket 默认的存储类别
- 已归档到 Glacier 的对象 GoodSync 无法直接同步(需要先恢复)
并行线程数的建议
S3 API 对单个 IP 的并发请求有默认限制(1000 请求/秒,实际安全值建议 100-200)。GoodSync 的并行线程数不要超过 8,过高可能触发 S3 的限流响应(HTTP 429)。
典型场景:用 Cloudflare R2 做异地备份
Cloudflare R2 没有出站流量费用,适合做备份目标:
- 在 Cloudflare 控制台创建 R2 Bucket
- 创建 R2 Access Key(R2 → Settings → API Tokens → Create API Token)
- 在 GoodSync 中创建备份作业:
- Left:本地备份源目录
- Right:Amazon S3 端点 → Endpoint 填 R2 的 API 端点 → Access Key + Secret Key → Bucket Name
- 配置 GoodSync 额外 AES-256 加密(Cloudflare R2 不加密用户数据)
- 设置计划任务自动备份