RGW提供S3兼容API需完成三件事:启动RGW进程并监听正确端口、创建S3用户获取access_key/secret_key、配置客户端可连通的endpoint及匹配访问模式(virtual-hosted或path-style),缺一不可。

RGW 对象存储网关要提供 S3 兼容 API,核心不是“改配置就能用”,而是必须完成三件事:启动 RGW 进程、创建 S3 用户并拿到凭据、正确设置客户端可连通的 endpoint 和访问模式。缺一不可。
RGW 服务进程是否已启动并监听正确端口
RGW 不是配置完 ceph.conf 就自动工作的守护进程,必须显式部署并运行 radosgw 实例。
- 确认已安装
ceph-radosgw包(如 RHEL/CentOS 用yum install ceph-radosgw) - 用
ceph-deploy rgw create <node></node>或 systemd 直接启用服务(如systemctl enable --now ceph-radosgw@rgw.<instance></instance>) - 检查监听状态:
ss -tnlp | grep :5588(端口号以rgw frontends = "beast port=5588"为准) - 若用
beast前端(默认),不支持 HTTPS;如需 TLS,得配civetweb并指定ssl_certificate路径
是否已创建 S3 访问用户并获取合法 access_key/secret_key
RGW 的 S3 接口认证只认 key 对,不认 Ceph 用户名或 auth ID —— radosgw-admin user create 输出的 access_key 和 secret_key 才是客户端真正需要的凭据。
- 执行命令:
radosgw-admin user create --uid=s3app --display-name="S3 App User" --email=app@local - 输出中找
"keys": [ { "access_key": "...", "secret_key": "..." } ]字段,复制这两串值 - 注意:
secret_key若含反斜杠\(常见于自动生成),部分 SDK(如 Python boto3)会解析失败,建议加--access-key和--secret参数手动指定纯 ASCII 密钥 - 不要复用 admin 用户或 Cephx keyring —— RGW S3 接口完全不读取它们
客户端 endpoint 和 bucket 访问模式是否匹配 RGW 配置
endpoint 写错或访问模式不一致,会导致 403、404 或签名失败,但错误信息往往不直接暴露根因。
- endpoint 必须包含协议+主机+端口,例如
http://192.168.164.221:5588(非http://192.168.164.221) - RGW 默认启用 virtual-hosted-style(桶名作子域),但若 DNS 未配置或客户端不支持(如老版本 s3cmd),需强制切回 path-style:
– boto3 中设addressing_style='path'(在Config里)
– aws-sdk-net 中设ForcePathStyle = true
– s3cmd 配置里改host_bucket = %(bucket)s.192.168.164.221:5588→host_bucket = 192.168.164.221:5588并确保use_https = False - RGW 不校验 region,但多数 SDK(如 boto3)要求传非空字符串,填
us-east-1即可,无需真实匹配
最容易被忽略的是:RGW 的 S3 接口默认不开启跨域(CORS),前端直传会卡在预检请求;另外,如果用虚拟主机模式但没配 DNS 或 Hosts,curl -v http://mybucket.192.168.164.221:5588 会因域名解析失败而根本发不出请求——这时候 endpoint 看似对,实则连第一跳都过不去。

















