---
title: Object Storage (S3, Ceph RGW)
description: 基于Ceph集群开展按量计费S3存储业务：RGW要求、管理用户与权限，以及如何在NexCMP中将后端关联至区域。
url: https://nexcmp.com/zh-cn/docs/infrastructure/s3/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# Object Storage (S3, Ceph RGW) {#object-storage-s3-ceph-rgw}

> **后台路径：**Infrastructure › Cloud provider › Ceph S3 (RGW)（`/infra/s3`）。账户：Services › Object Storage › S3 accounts（`/s3`）。定价：Services › Object Storage › PAYG pricing（`/s3/policy`）。在System › Admin › License & updates下启用该模块。

## 功能说明 {#what-it-does}

客户可从用户端创建S3账户并获取访问密钥。NexCMP通过RGW Admin Ops API在**您的Ceph RADOS Gateway (RGW)**上自动创建和删除对应用户，读取用量用于计费，并支持按量付费模式：超出免费额度的存储按每GB/月计费（按小时结算），下载流量按每GB计费。上传免费。

适用于运行带RGW的Ceph集群并希望转售对象存储的场景。

## 前提条件 {#requirements}

| 项目 | 要求 |
|---|---|
| Ceph | 拥有至少一个RGW守护进程且启用了**Admin Ops API**的集群（默认配置`rgw_enable_apis`已包含`admin`）。 |
| Admin user | 供NexCMP使用的RGW用户，需具备下文列出的权限。请勿使用存储客户数据的用户。 |
| Endpoints | 供客户使用的S3端点以及Admin Ops端点。两者均写作`https://host`且**不含路径，仅支持443端口**，并且必须解析为**公网**地址：回环、链路本地、组播、私有及唯一本地地址均会被拒绝。 |
| Certificate | 端点主机名对应的有效证书。 |
| Usage log | 启用RGW用量日志（`rgw_enable_usage_log = true`），以便用量API能够上报流量数据。 |
| 区域 | 已勾选**Object Storage (S3)**服务的主区域。参见[Zones](https://nexcmp.com/zh-cn/docs/infrastructure/zones/)。 |
| 存储 | Ceph中具备满足销售配额的可用容量。 |
| 依赖项 | **Object Storage**模块。下载流量也会计入[Bandwidth](https://nexcmp.com/zh-cn/docs/catalog/bandwidth/)。 |

## 准备基础设施 {#prepare-the-infrastructure}

在Ceph管理节点上：

1. 创建管理用户并赋予其所需的Admin Ops权限：

   ```bash
   radosgw-admin user create --uid=nexcmp-admin --display-name="NexCMP admin"
   radosgw-admin caps add --uid=nexcmp-admin --caps="users=*;buckets=*;usage=read;metadata=read"
   radosgw-admin user info --uid=nexcmp-admin
   ```

   复制输出结果中的`access_key`和`secret_key`。它们对应NexCMP中的**Admin access key**和**Admin secret key**。

2. 开启用量日志并重启网关：

   ```bash
   ceph config set client.rgw rgw_enable_usage_log true
   ```

3. 将网关部署在443端口的HTTPS之后（使用反向代理或RGW自带TLS），解析DNS域名，并从面板服务器进行测试：

   ```bash
   curl -fsS -o /dev/null -w '%{http_code}\n' https://s3.example.com/
   ```

   您应该收到S3 XML响应（HTTP 200或403），而不是超时。


## 在NexCMP中连接 {#connect-in-nexcmp}

1. **为区域分配S3服务。**打开**Infrastructure › Datacenter › Zone**，编辑该区域并勾选**Object Storage (S3)**。只有配置了S3服务的主区域才会出现在后端表单中。


2. 打开**Infrastructure › Cloud provider › Ceph S3 (RGW)**并点击**Add backend**：

   | 字段 | 示例值 |
   |---|---|
   | Backend name | `Ceph RGW 1` |
   | 区域 | 第1步中的区域 |
   | RGW Admin Ops endpoint | `https://s3.example.com` |
   | 客户S3端点 | `https://s3.example.com` |
   | S3签名区域 | `default` |
   | 管理员Access Key | `XXXX` |
   | 管理员Secret Key | `XXXX` |
   | 启用 | 开启 |
   | 开启销售（需先完成连接测试） | 暂设为**关闭** |
   | 变更原因 | `initial setup` |

      ![带有示例端点、区域和脱敏密钥的后端S3对话框](https://nexcmp.com/zh-cn/docs/images/infrastructure/s3-02-backend-dialog.webp)

3. 点击**OK**（保存），然后点击该行中的**Check**。NexCMP会使用管理员密钥调用Admin Ops API。显示**Ceph connection successful**及**Verified**标签即表示连接成功。


4. 点击**Edit**，开启**Enable sales**并保存。在检查成功前，NexCMP将拒绝开启销售。
5. 打开**Services › Object Storage › PAYG pricing**并设置定价：

   | 字段 | 说明 |
   |---|---|
   | 超出免费额度的存储（VND/GB/月） | 存储价格；按小时计费，为月度价格除以730。 |
   | 下载（VND/GB） | 出方向流量价格。 |
   | 上传（VND/GB） | 始终为0。 |
   | 运行中VM免费额度（GB） | 当客户拥有至少一台运行中的VM时，每个账户固定为100 GB，并按容量分摊至其名下的各S3账户。 |
   | 欠费额度（VND） | 允许未结清使用的金额上限。 |
   | 计费阈值（VND） | 用量费用一旦超过此金额，即汇总生成一张账单。 |
   | 创建S3的最低余额（VND） | 创建账户所需的钱包余额。 |
   | 每位客户最大S3账户数，默认技术配额（GB） | 新账户的配额限制。 |

      ![S3 PAYG定价表单](https://nexcmp.com/zh-cn/docs/images/infrastructure/s3-04-pricing.webp)

   S3价格以VND输入。展示和钱包扣费将按生效的汇率进行换算；参见[货币与汇率](https://nexcmp.com/zh-cn/docs/catalog/currency-and-exchange-rates/)。

## 验证 {#verify}

1. **Check**显示“Ceph connection successful”。
2. 作为客户（或使用测试账户）创建一个S3账户。在Ceph上，`radosgw-admin user list`会显示一个新用户，并且**S3 accounts**中也会列出该用户。
3. 使用客户的密钥通过任意S3客户端连接客户端点创建一个存储桶。然后上传一个文件。
4. 在下一个小时的计费周期运行后，**S3 accounts**将显示用量。

## 限制与注意事项 {#limits-and-notes}

- 已关联账户的后端将保留其**zone、endpoint和region**；如需更改，请创建新后端。
- 一个zone可以拥有独立的后端；账户与后端将永久绑定至该zone。
- 免费额度与“上传免费”为固定规则，不可配置。
- 密钥均加密存储；控制台仅显示“留空以保留当前密钥”字段。密钥对必须成对输入。
- 客户的Secret Key仅在创建时显示一次，后续不再显示。密钥丢失需通过轮换进行替换。

## 故障排查 {#troubleshooting}

| 症状 | 原因 | 解决办法 |
|---|---|---|
| “Endpoint requires HTTPS” | 端点使用了明文HTTP | 在443端口上发布HTTPS。 |
| “端点端口不允许” | 使用了443以外的端口 | 请使用标准HTTPS端口。 |
| “端点地址不被允许” | 域名解析为私网、环回、链路本地或唯一本地地址 | 请使用公网地址。 |
| “端点只能包含协议和主机” | URL包含路径、查询参数或用户信息 | 仅使用`https://host`。 |
| “解析端点失败” | 面板服务器无法解析DNS | 修复DNS。 |
| “连接Ceph失败” | 防火墙拦截或TLS错误 | 在面板服务器上使用`curl`进行测试。 |
| “Ceph返回HTTP 403 AccessDenied” | 密钥错误或缺少权限 | 检查密钥并重新运行`radosgw-admin caps add`。 |
| “Ceph响应无效” | 端点不是RGW Admin Ops API | 请将其指向RGW，而非网页。 |
| “启用销售前连接测试必须成功” | 在**Check**成功前开启了销售功能 | 先运行**Check**，再启用销售。 |
| “必须提供端点的所有新密钥” | 更改了端点但未同时提供两项密钥 | 请同时输入Access Key和Secret Key。 |
| “后端已关联资源；如需更改zone或端点，请创建新后端” | 该后端下已存在账户 | 创建新后端。 |
| “请选择启用了S3服务的master zone” | 该zone不是master zone或未启用S3服务 | 在该zone上勾选**Object Storage (S3)**。 |
| “无效的region” | region包含字母、数字、`-`和`_`以外的字符 | 使用`default`或您的RGW zonegroup名称。 |
| “Ceph用量汇总缺失；未计费” | 用量日志已禁用 | 启用`rgw_enable_usage_log`。 |
