# Object Storage (S3)

รูปแบบ storage ที่เก็บข้อมูลเป็น object หรือเป็น file ใช้งานได้ผ่าน internet สามารถประยุกต์ใช้ได้หลากหลาย

ตาม concept แล้ว object storage จะเก็บข้อมูลในรูปแบบ object หรือจะมองเป็น file ก็ได้ แต่ที่ต่างจาก file ทั้วไป คือ จะมีเรื่องของ metadata ที่สามารถแนบไว้กับ file ได้ด้วย เช่น การเก็บข้อมูลของ video จากกล้องวงจรปิด ที่ตัว file หลักจะเป็น video และ metadata อาจจะเป้น ช่วงเวลาที่ record, ID ของกล้องที่ record กรณีที่มีกล้องหลายตัว โดย metadata เหล่านี้ จะมีประโยชน์มาก กับการทำ data analytic&#x20;

รวมถึงความสามารถหลักของ object storage ที่สามารถใช้งานได้ผ่าน internet และเข้าถึงได้ผ่าน S3 API บน HTTP/HTTPS protocol ทั่วไป จึงเหมาะกับการเก็บข้อมูล media สำหรับแสดงบน website ต่างๆ หรือแม้กระทั้งรองรับการใช้งานกับ instance ที่ต้องมีการ horizontal scaling เพิ่ม-ลดจำนวนอยู่ตลอดเวลา เพราะ block storage จะสามารถใช้งานได้แค่ 1 instance แต่ object storage สามารถใช้งานกับกี่ instance ก้ได้ ตราบใดที่มี network เข้าถึงได้ bucket&#x20;

การเก็บ object ไว้ด้วยกัน คล้ายๆกับการใช้งาน folder หรือ directory ใน PC ทั่วไป โดยเราจะ PUT object ใส่ไว้ใน bucket และเรียกอ่านข้อมูล object ผ่าน bucket เสมอ และใน bucket เองก็ยังสามารถแบ่ง directory เพื่อแบ่งกลุ่มของ object ได้อีกด้วย

## Bucket Avaibility Zone

ภายใน NIPA Cloud Space การสร้าง Object Storage Bucket ขึ้นมา 1 Bucket จะสามารถใช้งานได้ใน 2 Availability Zone ได้แก่ NCP-BKK และ NCS-NON โดยทั้ง 2 zone จะเก็บข้อมูลแยกจากกันโดยสิ้นเชิง โดยสามารถเข้าถึงแต่ละ Availability Zone ได้จากการเปลี่ยน endpoint ของ Bucket ดังนี้

* **NCP-BKK**: https\://\[bucket-name].s3-bkk.nipa.cloud
* **NCP-NON**: https\://\[bucket-name].s3-non.nipa.cloud

## Bucket Access Control

Object Storage บน Nipa Cloud Space ถูกออกแบบมาให้แยกส่วนกันในระดับ Logical โดยแต่ละ Bucket จะมีการบริหารจัดการสิทธิ์ (Access Control) แยกจากกันโดยสิ้นเชิง เพื่อความปลอดภัยสูงสุดของข้อมูล ผู้ใช้งานสามารถควบคุมสิทธิ์ได้ผ่าน 2 กลไกหลัก คือ Bucket ACL และ Bucket Policy

### Bucket ACL (Access Control List)

Bucket ACL คือการกำหนดสิทธิ์การเข้าถึงพื้นฐาน ซึ่งสามารถเลือกตั้งค่าได้ตั้งแต่ขั้นตอนการสร้าง Bucket และสามารถแก้ไขเมื่อไหร่ก็ได้ โดยมีรายละเอียดดังนี้

| ACL (ระดับสิทธิ์)         | รายละเอียดการเข้าถึง                                                                                      | ข้อแนะนำ                                      |
| ------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| **Private**               | เฉพาะ Project เจ้าของ Bucket เท่านั้นที่สามารถจัดการและเข้าถึงข้อมูลได้                                   | แนะนำให้ใช้เป็นค่าเริ่มต้น                    |
| **Public (Read)**         | เจ้าของ Bucket จัดการได้เต็มที่ และบุคคลทั่วไป (Public) สามารถอ่าน (Read) ข้อมูลได้                       | เหมาะสำหรับไฟล์ที่ต้องการทำ Public Link       |
| **Authenticate (Read)**   | เจ้าของ Bucket จัดการได้เต็มที่ และผู้ใช้งานที่มีการยืนยันตัวตน (Authenticated User) สามารถอ่าน ข้อมูลได้ | สำหรับการแชร์ข้อมูลภายในกลุ่มผู้ใช้ระบบ       |
| **Public (Read & Write)** | บุคคลทั่วไปสามารถทั้งอ่านและเขียน (Read & Write) ข้อมูลลงใน Bucket ได้                                    | **ไม่แนะนำ** (เสี่ยงต่อความปลอดภัยขั้นรุนแรง) |

### Bucket Policy

นอกจาก ACL ที่เป็นการกำหนดสิทธิการใช้งานขึ้นพื้นฐานแล้ว ยังสามารถเพิ่มสิทธิเฉพาะ User หรือกลุ่ม User บน Bucket, Object หรือ Path เฉพาะได้ ผ่าน Bucket Policy (อ่านเพิ่มเติมใน[การจัดการ Bucket Policy](/ncs-documents/storage/object-storage-s3/create-bucket-policy.md))

ในการใช้งานทั่วไป แนะนำให้กำหนด **Bucket ACL** เป็น **Private** และ สร้าง **Bucket Policy** เฉพาะ ตามสิทธิที่ต้องการให้เข้าถึงได้เท่านั้น เพื่อไม่ให้ข้อมูลใน Bucket รั่วไหล

## Bucket Limitation

Bucket ของ Object Storage ไม่มี limit ในเรื่องของ size รวมของ storage แต่มี limit ในเรื่องของจำนวน Object ที่เก็บได้ภายใน 1 bucket ใน 1 Availability Zone โดยจะมี limit อยู่ที่ 1.6 ล้าน objects (1638400 objects)

## การเข้าใช้งาน Object Storage

การเข้าใช้งาน object storage สามารถทำได้ผ่าน S3 protocol ได้หลายช่องทาง เช่น ใช้ผ่าน CLI, API หรือ ใช้ผ่าน software อื่นๆ

* ใช้งานผ่าน CLI (Command Line Interface) ผ่าน [Access S3 Bucket with s3cmd](/ncs-documents/storage/object-storage-s3/access-s3-bucket-with-s3cmd.md)
* ใช้งานผ่าน SDK เช่น [Access S3 buckets With AWS S3 Client SDK](/ncs-documents/storage/object-storage-s3/access-s3-buckets-with-aws-s3-client-sdk.md)
* ใช้ sofware ต่างๆ เข้ามาเป็น interface เช่น [Access S3 Bucket with Cyberduck](/ncs-documents/storage/object-storage-s3/access-s3-bucket-with-cyberduck.md)

อ่านเพิ่มเติมเกี่ยวกับ [Object Storage](https://nipa.cloud/products/nipa-cloud-iaas/nipa-space/object-storage)

## Recommendations

{% content-ref url="/pages/EHkTcAfbVaYzdAlVmTJN" %}
[Create an Object Storage Bucket](/ncs-documents/storage/object-storage-s3/create-an-object-storage-bucket.md)
{% endcontent-ref %}

{% content-ref url="/pages/5NaHtid3WumdTQO2DOIC" %}
[Create an Object Storage Sub-User](/ncs-documents/storage/object-storage-s3/create-an-object-storage-sub-user.md)
{% endcontent-ref %}

{% content-ref url="/pages/KaqUxsjZUvW3CICBX7Mw" %}
[Create Bucket Policy](/ncs-documents/storage/object-storage-s3/create-bucket-policy.md)
{% endcontent-ref %}

{% content-ref url="/pages/ri7SmKw18ZnyXtXAmMDZ" %}
[Bucket Versioning](/ncs-documents/storage/object-storage-s3/bucket-versioning.md)
{% endcontent-ref %}

{% content-ref url="/pages/E167tOVM13hqh64SkLMc" %}
[Configure a static website using S3 Bucket](/ncs-documents/storage/object-storage-s3/configure-a-static-website-using-s3-bucket.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-epc.gitbook.io/ncs-documents/storage/object-storage-s3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
