---
title: Object Storage (S3, Ceph RGW)
description: Ceph 클러스터에서 사용량 기반 S3 스토리지 판매: RGW 요구 사항, 관리자 사용자 및 권한, NexCMP에서 백엔드를 영역에 연결하는 방법.
url: https://nexcmp.com/ko/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` 포함). |
| 관리자 사용자 | 아래 기능이 포함된 NexCMP용 RGW 사용자입니다. 고객 데이터를 소유한 사용자는 사용하지 마세요. |
| 엔드포인트 | 고객이 사용하는 S3 엔드포인트 및 Admin Ops 엔드포인트. 둘 다 `https://host` 형식으로 작성하되 **경로 없이 포트 443만 사용**해야 하며, **공인** 주소로 확인되어야 합니다. 루프백, 링크 로컬, 멀티캐스트, 사설 및 고유 로컬 주소는 거부됩니다. |
| 인증서 | 엔드포인트 호스트용 유효한 인증서. |
| 사용량 로그 | 사용량 API가 트래픽을 보고할 수 있도록 RGW 사용량 로깅 켜기(`rgw_enable_usage_log = true`). |
| 영역 | **Object Storage (S3)** 서비스가 체크된 마스터 영역. [Zones](https://nexcmp.com/ko/docs/infrastructure/zones/)을 참조하세요. |
| 스토리지 | 판매하는 할당량에 필요한 Ceph 용량. |
| 종속성 | **Object Storage** 모듈. 다운로드 트래픽은 [Bandwidth](https://nexcmp.com/ko/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**를 클릭합니다:

   | 필드 | Example value |
   |---|---|
   | Backend name | `Ceph RGW 1` |
   | 영역 | 1단계의 영역 |
   | RGW Admin Ops endpoint | `https://s3.example.com` |
   | 고객 S3 엔드포인트 | `https://s3.example.com` |
   | S3 서명 리전 | `default` |
   | 관리자 액세스 키 | `XXXX` |
   | 관리자 시크릿 키 | `XXXX` |
   | 활성 | on |
   | 판매 활성화 (먼저 연결 테스트 필요) | **off** (당분간) |
   | 변경 사유 | `initial setup` |

      ![예시 엔드포인트, 리전 및 마스킹된 키가 포함된 백엔드 S3 대화상자](https://nexcmp.com/ko/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/ko/docs/images/infrastructure/s3-04-pricing.webp)

   S3 가격은 VND로 입력됩니다. 표시 및 지갑 차감을 위해 당시의 환율로 환산되며, [Currency and exchange rates](https://nexcmp.com/ko/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}

- 이미 계정이 연결된 백엔드는 **존, 엔드포인트 및 리전**이 유지되며, 변경하려면 새 백엔드를 생성해야 합니다.
- 하나의 존에는 자체 백엔드를 가질 수 있으며, 계정과 백엔드는 영구적으로 존에 고정됩니다.
- 무료 티어와 "업로드 무료"는 옵션이 아닌 고정 규칙입니다.
- 키는 암호화되어 저장되며 콘솔에는 "현재 키를 유지하려면 비워두십시오" 필드만 표시됩니다. 키 쌍은 항상 함께 입력됩니다.
- 고객의 시크릿 키는 생성 시 한 번만 표시되며 다시는 표시되지 않습니다. 분실된 키는 회전(rotating)하여 교체합니다.

## Troubleshooting {#troubleshooting}

| 증상 | 원인 | 해결 방법 |
|---|---|---|
| "Endpoint requires HTTPS" | 엔드포인트가 일반 HTTP를 사용함 | 포트 443에서 HTTPS를 게시합니다. |
| "엔드포인트 포트가 허용되지 않음" | 443이 아닌 포트 | 표준 HTTPS 포트를 사용하세요. |
| "엔드포인트 주소가 허용되지 않습니다" | 이름이 프라이빗, 루프백, 링크 로컬 또는 유니크 로컬 주소로 해결됩니다 | 공인 주소를 사용하세요. |
| "엔드포인트는 프로토콜과 호스트만 포함해야 합니다" | URL에 경로, 쿼리 또는 사용자 정보가 포함되어 있습니다 | `https://host`만 사용하세요. |
| "엔드포인트를 확인하지 못했습니다" | 패널 서버에서 DNS를 해결할 수 없습니다 | DNS를 수정하세요. |
| "Failed to connect to Ceph" | 방화벽 또는 TLS 오류 | 패널 서버에서 `curl`(으)로 테스트하세요. |
| "Ceph returned HTTP 403 AccessDenied" | 잘못된 키 또는 권한 누락 | 키를 확인하고 `radosgw-admin caps add`을(를) 다시 실행하세요. |
| "Invalid Ceph response" | 엔드포인트가 RGW Admin Ops API가 아닙니다 | 웹 페이지가 아닌 RGW를 가리키도록 설정하세요. |
| "판매를 활성화하기 전에 연결 테스트에 성공해야 합니다" | 성공적인 **Check** 전에 판매를 활성화했습니다 | **Check**을(를) 실행한 후 판매를 활성화하세요. |
| "엔드포인트에 대한 모든 새 키가 필요합니다" | 두 키 모두 없이 엔드포인트가 변경되었습니다 | 액세스 키와 시크릿 키를 함께 입력하세요. |
| "백엔드에 이미 연결된 리소스가 있습니다. 영역이나 엔드포인트를 변경하려면 새 백엔드를 만드세요" | 이 백엔드에 계정이 존재합니다 | 새 백엔드를 만드세요. |
| "S3 서비스가 포함된 마스터 영역을 선택하세요" | 존이 마스터 존이 아니거나 S3 서비스가 없습니다 | 존에서 **Object Storage (S3)**을(를) 체크하세요. |
| "Invalid region" | 리전 이름에 문자, 숫자, `-` 및 `_` 이외의 문자가 포함되어 있습니다 | `default` 또는 RGW 존그룹 이름을 사용하세요. |
| "Ceph 사용량 요약이 누락되어 청구되지 않았습니다" | 사용량 로그가 비활성화되어 있습니다 | `rgw_enable_usage_log`을(를) 활성화하세요. |
