---
title: Object Storage (S3, Ceph RGW)
description: ขายบริการ S3 storage แบบจ่ายตามจริงบนคลัสเตอร์ Ceph ของคุณ: ข้อกำหนด RGW, ผู้ดูแลระบบและสิทธิ์การใช้งาน และวิธีเชื่อมต่อแบ็กเนดเข้ากับโซนใน NexCMP
url: https://nexcmp.com/th/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 {#what-it-does}

ลูกค้าสามารถสร้างบัญชี S3 จากพอร์ทัลและรับคีย์เข้าใช้งานได้ NexCMP จะทำหน้าที่สร้างและลบผู้ใช้ที่ตรงกันบน **Ceph RADOS Gateway (RGW)** ของคุณผ่านทาง RGW Admin Ops API อ่านค่าการใช้งานเพื่อการเรียกเก็บเงิน และคิดเงินแบบจ่ายตามจริง: พื้นที่จัดเก็บที่เกินโควตาฟรีต่อ GB ต่อเดือน (คิดเงินเป็นรายชั่วโมง) และปริมาณการใช้งานดาวน์โหลดต่อ GB ส่วนการอัปโหลดไม่มีค่าใช้จ่าย

ใช้งานเมื่อคุณรันคลัสเตอร์ Ceph ที่มี RGW และต้องการรีเซล러บริการ object storage

## ข้อกำหนด {#requirements}

| Item | Requirement |
|---|---|
| Ceph | คลัสเตอร์ที่มี RGW daemon อย่างน้อยหนึ่งตัว และเปิดใช้งาน **Admin Ops API** แล้ว (ค่าเริ่มต้น `rgw_enable_apis` รวม `admin` แล้ว) |
| ผู้ดูแลระบบ | ผู้ใช้ RGW สำหรับ NexCMP พร้อมสิทธิ์การใช้งานที่ระบุไว้ด้านล่าง ห้ามใช้บัญชีผู้ใช้ที่เป็นเจ้าของข้อมูลของลูกค้า |
| เอนด์พอยต์ | เอนด์พอยต์ S3 ที่ลูกค้าใช้งาน และเอนด์พอยต์ Admin Ops ทั้งคู่ต้องเขียนในรูปแบบ `https://host` โดย **ไม่มีพาท, ใช้พอร์ต 443 เท่านั้น** และต้องแปลงเป็นแอดเดรสแบบ **สาธารณะ** เท่านั้น: ห้ามใช้แอดเดรสแบบ loopback, link-local, multicast, private และ unique-local |
| ใบรับรอง | ใบรับรองที่ถูกต้องสำหรับโฮสต์เอนด์พอยต์ |
| บันทึกการใช้งาน | เปิดใช้งาน RGW usage logging (`rgw_enable_usage_log = true`) เพื่อให้ API การใช้งานสามารถรายงานปริมาณรับส่งข้อมูลได้ |
| โซน | โซนหลักที่เลือกบริการ **Object Storage (S3)** ไว้ ดูเพิ่มเติมที่ [Zones](https://nexcmp.com/th/docs/infrastructure/zones/) |
| สตอเรจ | ความจุใน Ceph สำหรับโควตาที่คุณต้องการขาย |
| ขึ้นอยู่กับ | โมดูล **Object Storage** ปริมาณการดาวน์โหลดจะถูกนําไปคิดรวมใน [Bandwidth](https://nexcmp.com/th/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` จากผลลัพธ์ ซึ่งจะทำหน้าที่เป็น **Admin access key** และ **Admin secret key** ใน NexCMP

2. เปิดใช้งานบันทึกการใช้งานและรีสตาร์ทเกตเวย์:

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

3. วางเกตเวย์ไว้เบื้องหลัง HTTPS บนพอร์ต 443 (ผ่านรีเวิร์สพร็อกซีหรือ TLS ของ RGW เอง), ประกาศชื่อ DNS และทดสอบจากเซิร์ฟเวอร์พาเนล:

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

   คุณควรได้รับผลลัพธ์เป็น S3 XML (HTTP 200 หรือ 403) ไม่ใช่หมดเวลา (timeout)


## เชื่อมต่อใน NexCMP {#connect-in-nexcmp}

1. **กำหนดบริการ S3 ให้กับโซน** เปิดไปที่ **Infrastructure › Datacenter › Zone**, แก้ไขโซนแล้วเลือก **Object Storage (S3)** เฉพาะโซนหลักที่เปิดใช้บริการ S3 เท่านั้นที่จะปรากฏในฟอร์มแบ็กเนด


2. เปิดไปที่ **Infrastructure › Cloud provider › Ceph S3 (RGW)** และคลิก **Add backend**:

   | ฟิลด์ | ค่าตัวอย่าง |
   |---|---|
   | ชื่อแบ็กเนด | `Ceph RGW 1` |
   | โซน | โซนจากขั้นตอนที่ 1 |
   | เอนด์พอยต์ RGW Admin Ops | `https://s3.example.com` |
   | Customer S3 endpoint | `https://s3.example.com` |
   | S3 signing region | `default` |
   | Admin access key | `XXXX` |
   | Admin secret key | `XXXX` |
   | ใช้งาน | on |
   | เปิดใช้งานการขาย (ต้องทดสอบการเชื่อมต่อก่อน) | **off** สำหรับตอนนี้ |
   | Reason for change | `initial setup` |

      ![หน้าต่าง S3 ของแบ็กและพร้อมตัวอย่างเอ็นด์พอยต์ ภูมิภาค และคีย์ที่ถูกซ่อน](https://nexcmp.com/th/docs/images/infrastructure/s3-02-backend-dialog.webp)

3. คลิก **OK** (บันทึก) แล้วคลิก **Check** ในแถว NexCMP จะเรียก Admin Ops API ด้วย admin key คำว่า **Ceph connection successful** และแท็ก **Verified** หมายความว่าใช้งานได้


4. คลิก **Edit** เปิดสวิตช์ **Enable sales** แล้วบันทึก NexCMP จะไม่อนุญาตให้เปิดการขายจนกว่าการทดสอบจะสำเร็จ
5. เปิด **Services › Object Storage › PAYG pricing** และกำหนดราคา:

   | ฟิลด์ | ความหมาย |
   |---|---|
   | พื้นที่จัดเก็บข้อมูลส่วนที่เกินฟรีเทียร์ (VND/GB/เดือน) | ราคาพื้นที่จัดเก็บ; คิดเงินเป็นรายชั่วโมงโดยใช้ราคารายเดือนหารด้วย 730 |
   | Download (VND/GB) | ราคาสำหรับทราฟฟิกขาออก |
   | Upload (VND/GB) | เท่ากับ 0 เสมอ |
   | ฟรีเทียร์สำหรับ VM ที่กำลังทำงาน (GB) | กำหนดตายตัวที่ 100 GB ต่อบัญชีเมื่อลูกค้ามี VM ที่รันอยู่อย่างน้อย 1 รายการ โดยใช้ร่วมกันทุกบัญชี S3 ตามขนาด |
   | Debt limit (VND) | วงเงินการใช้งานค้างชำระที่อนุญาต |
   | Billing threshold (VND) | รวบรวมการใช้งานเป็นใบแจ้งหนี้เดียวเมื่อยอดเกินจำนวนนี้ |
   | ยอดเงินขั้นต่ำในการสร้าง S3 (VND) | ยอดเงินในกระเป๋าเงินที่ต้องมีเพื่อสร้างบัญชี |
   | จำนวนบัญชี S3 สูงสุดต่อลูกค้าหนึ่งราย, โควตาทางเทคนิคเริ่มต้น (GB) | ขีดจำกัดสำหรับบัญชีใหม่ |

      ![ฟอร์มกำหนดราคา S3 แบบ PAYG](https://nexcmp.com/th/docs/images/infrastructure/s3-04-pricing.webp)

   ราคาร S3 กรอกเป็นสกุลเงิน VND โดยจะถูกแปลงเพื่อแสดงผลและหักเงินในกระเป๋าเงินตามอัตราแลกเปลี่ยนที่มีผลบังคับใช้ ดูข้อมูลเพิ่มเติมที่ [Currency and exchange rates](https://nexcmp.com/th/docs/catalog/currency-and-exchange-rates/)

## ตรวจสอบ {#verify}

1. **Check** แสดงข้อความ "Ceph connection successful"
2. ในฐานะลูกค้า (หรือใช้บัญชีทดสอบ) ให้สร้างบัญชี S3 บน Ceph `radosgw-admin user list` จะแสดงผู้ใช้ใหม่ และ **S3 accounts** จะแสดงรายการดังกล่าว
3. สร้าง bucket ด้วย S3 client ใดก็ได้โดยใช้คีย์ของลูกค้าเทียบกับ endpoint ของลูกค้า จากนั้นอัปโหลดไฟล์
4. หลังรอบการคิดเงินของชั่วโมงถัดไป **S3 accounts** จะแสดงการใช้งาน

## ข้อจำกัดและหมายเหตุ {#limits-and-notes}

- แบ็กเอนด์ที่มีบัญชีเชื่อมอยู่แล้วจะยังคงรักษา **zone, endpoint และ region** เดิมไว้ หากต้องการเปลี่ยนแปลง ให้สร้างแบ็กเอนด์ใหม่
- หนึ่งโซนสามารถมีแบ็กเอนด์ของตัวเองได้ โดยบัญชีและแบ็กเอนด์จะผูกติดกับโซนนั้นอย่างถาวร
- Free tier และ "การอัปโหลดฟรี" เป็นกฎตายตัว ไม่ใช่ตัวเลือก
- คีย์จะถูกจัดเก็บแบบเข้ารหัส คอนโซลจะแสดงเพียงฟิลด์ "เว้นว่างไว้เพื่อคงคีย์ปัจจุบัน" โดยคู่คีย์จะต้องป้อนร่วมกันเสมอ
- Secret key ของลูกค้าจะแสดงเพียงครั้งเดียวตอนสร้าง และจะไม่แสดงอีกหากทำหายต้องเปลี่ยนใหม่โดยการหมุนเวียนคีย์ (rotate)

## การแก้ Problme {#troubleshooting}

| อาการ | สาเหตุ | วิธีแก้ปัญหา |
|---|---|---|
| "Endpoint requires HTTPS" | Endpoint ใช้ HTTP ธรรมดา | เผยแพร่ HTTPS บนพอร์ต 443 |
| "ไม่อนุญาตให้ใช้พอร์ตเอ็นด์พอยต์นี้" | พอร์ตอื่นที่ไม่ใช่ 443 | ใช้พอร์ต HTTPS มาตรฐาน |
| "ไม่อนุญาตให้ใช้ที่อยู่ Endpoint นี้" | ชื่อนี้ชี้ไปยังแอดเดอร์สแบบ private, loopback, link-local หรือ unique-local | ใช้แอดเดอร์สแบบสาธารณะ (public address) |
| "Endpoint ต้องประกอบด้วยโปรโตคอลและโฮสต์เท่านั้น" | URL มี path, query หรือข้อมูลผู้ใช้ | Use `https://host` only. |
| "ไม่สามารถแก้ไขที่อยู่ Endpoint ได้" | DNS ไม่สามารถ resolve จากเซิร์ฟเวอร์แพเนลได้ | Fix DNS. |
| "Failed to connect to Ceph" | Firewall or TLS error | ทดสอบด้วย `curl` จากเซิร์ฟเวอร์แพเนล |
| "Ceph returned HTTP 403 AccessDenied" | คีย์ไม่ถูกต้องหรือขาดสิทธิ์การใช้งานที่จำเป็น | ตรวจสอบคีย์อีกครั้งแล้วรัน `radosgw-admin caps add` ใหม่ |
| "Invalid Ceph response" | Endpoint ไม่ใช่ RGW Admin Ops API | ชี้ไปยัง RGW ไม่ใช่หน้าเว็บเพจ |
| "การทดสอบการเชื่อมต่อต้องสำเร็จก่อนจึงจะเปิดใช้งานการขายได้" | คุณเปิดใช้งานการขายก่อนที่จะทำ **Check** สำเร็จ | รัน **Check** ก่อน แล้วจึงเปิดใช้งานการขาย |
| "จำเป็นต้องกรอกคีย์ใหม่ทั้งหมดสำหรับ Endpoint" | มีการเปลี่ยนแปลง Endpoint โดยไม่ได้ระบุคีย์ทั้งสองตัว | กรอก Access Key และ Secret Key พร้อมกัน |
| "แบกแอนด์มีทรัพยากรที่เชื่อมโยงอยู่แล้ว โปรดสร้างแบกแอนด์ใหม่หากต้องการเปลี่ยนโซนหรือ Endpoint" | มีบัญชีใช้งานอยู่บนแบ็กเอนด์นี้แล้ว | สร้างแบ็กเอนด์ใหม่ |
| "เลือกโซนหลักที่มีบริการ S3" | โซนนี้ไม่ใช่มาสเตอร์โซนหรือไม่มีบริการ S3 | ทำเครื่องหมายที่ **Object Storage (S3)** บนโซน |
| "Invalid region" | ภูมิภาค (Region) มีอักขระอื่นนอกเหนือจากตัวอักษร ตัวเลข `-` และ `_` | ใช้ `default` หรือชื่อ RGW zonegroup ของคุณ |
| "ไม่พบสรุปการใช้งาน Ceph จึงไม่มีการเรียกเก็บเงิน" | Usage log disabled | Enable `rgw_enable_usage_log`. |
