# Nhà cung cấp lưu trữ S3

> Thiết lập Wasabi, Amazon S3, Cloudflare R2, Backblaze B2, Spaces, Google Cloud hay MinIO cho sao lưu ZoPanel, với key chỉ dùng cho một bucket và đúng endpoint cần nhập.

Source: https://zopanel.net/vi/docs/s3-providers  
Updated: 2026-10-09

ZoPanel chép được bản sao lưu lên mọi kho lưu trữ tương thích S3. Trang này hướng dẫn cần tạo gì ở từng nhà cung cấp, nhập giá trị nào vào panel, key cần tối thiểu những quyền gì, và cách xử lý các lỗi hay gặp nhất.

## ZoPanel lưu gì lên S3

| Tính năng | Thiết lập ở đâu | Nội dung trong bucket |
| --- | --- | --- |
| [Sao lưu từ xa](/vi/docs/backups#sao-luu-tu-xa-len-s3) | **Cài đặt → Sao lưu từ xa**, **Lưu ở đâu**: **S3** | Mọi bản sao lưu tài khoản và sao lưu database, được mã hoá trên server trước khi tải lên, cùng bản sao lưu cấu hình (`.zpb`) hằng ngày |
| [Sao lưu tăng dần (restic)](/vi/docs/backups#sao-luu-tang-dan-restic) | Trang **Sao lưu**, thẻ **Sao lưu tăng dần**, **Nơi lưu**: S3 | Một kho restic cho mỗi server, được restic mã hoá |
| [Kho riêng của khách](/vi/docs/backups#lich-sao-luu-va-kho-s3-rieng-cua-khach) | Trang **Sao lưu** của khách, thẻ **Sao lưu tự động**, **Chép lên kho của tôi** | Bản sao lưu theo lịch của khách đó |

**License.** Sao lưu từ xa cần license Pro (xem [License](/vi/docs/licensing)). Sao lưu tăng dần không có form S3 riêng: khi chọn S3 làm **Nơi lưu**, nó dùng endpoint, bucket và key đã lưu trong **Cài đặt → Sao lưu từ xa**, nên hãy điền và kiểm tra form đó trước.

**File nằm ở đâu.** Với **Thư mục gốc** mặc định `zopanel`, server tên `web1` sẽ ghi:

| Đường dẫn trong bucket | Nội dung |
| --- | --- |
| `zopanel/web1/<tài khoản>/` | Bản sao lưu tài khoản, được mã hoá trước khi tải lên (tên vẫn là `.tar.gz`; nội dung bắt đầu bằng `ZPENC1`) |
| `zopanel/web1/<tài khoản>/db/` | Bản sao lưu database |
| `zopanel/web1/_panel/` | Bản sao lưu cấu hình (`.zpb`) |
| `zopanel/web1/restic/` | Kho sao lưu tăng dần (restic) |
| `zopanel/web1/_zopanel/` | File thử nhỏ, do **Kiểm tra kết nối** ghi rồi xoá |

Nhiều server có thể dùng chung một bucket, vì mỗi server ghi vào thư mục mang tên máy của nó. Dù vậy, mỗi server một key riêng vẫn an toàn hơn: xem phần dưới.

## Trước khi bắt đầu: bucket và key

**Tạo một bucket riêng.** Chỉ dùng cho ZoPanel. ZoPanel chấp nhận tên bucket dài 3 đến 63 ký tự: chữ thường, số, dấu chấm và dấu gạch ngang. Dấu gạch dưới và chữ hoa bị từ chối với lỗi "invalid bucket name". Chọn region gần server để tải lên nhanh hơn, hoặc ở nước khác nếu muốn bản sao nằm xa trung tâm dữ liệu.

**Tạo key chỉ truy cập được bucket này.** Đừng bao giờ dùng key gốc hay master key của tài khoản. Key cho ZoPanel cần làm được:

- kiểm tra bucket tồn tại (lệnh HEAD bucket, ở hầu hết nhà cung cấp cần quyền liệt kê),
- liệt kê object,
- tải object lên (file lớn được gửi thành từng phần 64 MB),
- tải object về,
- xoá object (bản cũ vượt quá **Số bản giữ lại trên cloud mỗi tài khoản**, file thử kết nối, và việc dọn dẹp của restic).

Key không cần quyền tạo hay xoá bucket, cũng không cần thấy các bucket khác.

**Versioning và object lock.** ZoPanel tự xoá bản cũ. Nếu bật versioning, bản bị xoá trở thành "phiên bản không hiện hành" (noncurrent version) và bạn vẫn phải trả tiền cho nó: hãy thêm lifecycle rule xoá các phiên bản không hiện hành sau vài ngày. Object lock (chống sửa xoá) bảo vệ bản sao khỏi kẻ đánh cắp key, nhưng khi đó lệnh xoá của chính ZoPanel chỉ thêm delete marker, và dung lượng tăng dần cho tới khi hết thời hạn khoá. Nếu dùng object lock, hãy đặt thời hạn khoá ngắn (ví dụ 7 đến 30 ngày) và kèm lifecycle rule cho phiên bản không hiện hành.

**Mẹo tiết kiệm chi phí.**

- **Thời gian lưu tối thiểu.** Một số nhà cung cấp tính tiền mỗi object cho một khoảng thời gian tối thiểu dù bạn xoá sớm hơn: Wasabi tính 90 ngày với gói trả theo dung lượng (pay-as-you-go), Cloudflare R2 tính 30 ngày với lớp Infrequent Access (lớp Standard không có mức tối thiểu). Hãy giữ bản sao lưu ở lớp lưu trữ tiêu chuẩn, và với Wasabi nên đặt số bản giữ lại sao cho mỗi bản tồn tại ít nhất 90 ngày.
- **Phí tải ra (egress).** Khôi phục là tải dữ liệu về, và thứ bảy hằng tuần việc kiểm tra kho sao lưu tăng dần đọc lại 2% dữ liệu. Phần lớn nhà cung cấp tính phí tải ra. Cloudflare R2 không tính phí egress.
- **Khử trùng lặp.** Snapshot tăng dần (restic) chỉ tải lên phần thay đổi. Sao lưu toàn phần lần nào cũng là một file nén đầy đủ, nên sao lưu toàn phần hằng ngày với số bản giữ lâu sẽ tăng dung lượng rất nhanh.

## Form trong ZoPanel

**Cài đặt → Sao lưu từ xa**, với **Lưu ở đâu** là **S3**:

| Trường | Cần nhập |
| --- | --- |
| **Nhà cung cấp** | Điền sẵn **Endpoint**, **Region** và **URL dạng path** cho AWS S3, Cloudflare R2, Backblaze B2, Wasabi hoặc DigitalOcean. Sau đó sửa region cho đúng bucket của bạn. |
| **Endpoint** | Chỉ tên máy chủ, ví dụ `s3.ap-southeast-1.wasabisys.com`. Có thể có hoặc không có `https://`. Được phép kèm cổng (`minio.example.com:9000`), không được kèm đường dẫn như `/bucket`. |
| **Region** | Region của bucket. Luôn điền: sai region là nguyên nhân lỗi phổ biến nhất. |
| **Bucket** | Tên bucket |
| **Thư mục gốc** | Mặc định `zopanel`. Dùng đúng giá trị này trên server thay thế. |
| **Access key**, **Secret key** | Key chỉ có quyền trên bucket. Sau khi lưu, secret hiện thành `********`, và phải nhập lại khi đổi endpoint, bucket hoặc access key. |
| **Số bản giữ lại trên cloud mỗi tài khoản** | Từ 1 đến 365 (mặc định 14) |
| **URL dạng path (R2, MinIO)** | Gửi request dạng `https://endpoint/bucket/...` thay vì `https://bucket.endpoint/...`. Để tắt với Amazon S3. Với các endpoint không phải Amazon hay Google, ZoPanel vốn đã dùng dạng path, nên bật lên cũng không sao. |
| **HTTP thường (chỉ MinIO nội bộ)** | Chỉ cho MinIO trong mạng riêng. Khi đó key và dữ liệu đi qua mạng không mã hoá. |

Bấm **Lưu** khi công tắc đang bật sẽ chạy kiểm tra kết nối, và không lưu nếu kiểm tra thất bại.

## Wasabi

> **Đã kiểm thử với ZoPanel** (tháng 10/2026, Wasabi us-east-1): kiểm tra kết nối, sao lưu tài khoản và database (tải lên đã mã hoá), giữ số bản, khôi phục tài khoản đã xoá từ **Duyệt S3**, tải bản sao lưu về lại máy chủ, snapshot tăng dần (restic) kèm khôi phục một file và một database, và sao lưu cấu hình.

1. **Tạo bucket.** Trong Wasabi console, bấm **Buckets → Create Bucket**, nhập tên và chọn region.
2. **Tạo policy.** Bấm **Policies → Create Policy** và dán policy dưới đây, thay bằng tên bucket của bạn:

   ```json
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
         "Resource": "arn:aws:s3:::zopanel-backups"
       },
       {
         "Effect": "Allow",
         "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload"],
         "Resource": "arn:aws:s3:::zopanel-backups/*"
       }
     ]
   }
   ```

   Ví dụ tách quyền theo bucket của chính Wasabi cấp `s3:*` trên bucket và các object của nó, cộng thêm `s3:ListAllMyBuckets` để user thấy được bucket trong console. Key chỉ dùng cho ZoPanel thì không cần vào console.
3. **Tạo sub-user.** Bấm **Users → Create User**, nhập tên và chỉ tích quyền truy cập **Programmatic**. Bỏ qua bước chọn group, gắn policy ở bước 2 thay cho **WasabiFullAccess**, rồi bấm **Create User**. Chép access key và secret key được hiển thị.
4. **Trong ZoPanel**, bấm nút **Wasabi**, rồi đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `s3.<region>.wasabisys.com`, ví dụ `s3.ap-southeast-1.wasabisys.com`, `s3.eu-central-1.wasabisys.com` |
   | Region | Cùng region đó, ví dụ `ap-southeast-1` |
   | URL dạng path | Tắt |

   Với **US East 1**, endpoint là `s3.wasabisys.com` (hoặc tên tương đương `s3.us-east-1.wasabisys.com`) và region `us-east-1`. Hãy dùng endpoint của region nơi bucket được tạo.

**Lưu ý:** với gói pay-as-you-go, Wasabi tính tiền mỗi object ít nhất 90 ngày. Với sao lưu hằng ngày và 14 bản mặc định, mỗi bản bị xoá vẫn bị tính tiền thêm 76 ngày còn lại. Đặt **Số bản giữ lại trên cloud mỗi tài khoản** là 90 tốn gần như ngang vậy, mà bạn có ba tháng điểm khôi phục.

## Amazon S3

1. **Tạo bucket.** Trong S3 console, tạo một general purpose bucket ở region bạn muốn. Để nguyên **Block all public access**.
2. **Tạo policy.** Trong IAM, tạo policy với JSON sau (thay tên bucket):

   ```json
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "Bucket",
         "Effect": "Allow",
         "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
         "Resource": "arn:aws:s3:::zopanel-backups"
       },
       {
         "Sid": "Objects",
         "Effect": "Allow",
         "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload"],
         "Resource": "arn:aws:s3:::zopanel-backups/*"
       }
     ]
   }
   ```

   ARN của bucket (không có `/*`) dùng cho quyền liệt kê, ARN có `/*` dùng cho object. Đặt nhầm hai ARN này sẽ bị AccessDenied.
3. **Tạo IAM user** không có quyền vào console, và chỉ gắn policy này.
4. **Tạo access key.** Mở user, vào tab **Security credentials**, bấm **Create access key**. Chọn use case **Other**, rồi **Create access key**. Secret access key chỉ hiện ở trang này: hãy chép lại hoặc tải file `.csv`.
5. **Trong ZoPanel**, bấm **AWS S3**, rồi đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `s3.<region>.amazonaws.com`, ví dụ `s3.ap-southeast-1.amazonaws.com` (Singapore), `s3.eu-central-1.amazonaws.com` (Frankfurt), `s3.us-east-1.amazonaws.com` |
   | Region | Region của bucket, ví dụ `ap-southeast-1` |
   | URL dạng path | Tắt |

   Nút có sẵn điền `s3.amazonaws.com` với region `ap-southeast-1`: sửa region nếu bucket ở nơi khác, hoặc dùng endpoint theo region.

**Lưu ý:** bucket mới lưu object ở lớp S3 Standard, không có thời gian lưu tối thiểu. Lifecycle rule chuyển bản sao lưu sang Standard-IA hay Glacier sẽ thêm thời gian lưu tối thiểu và phí truy xuất, còn object ở Glacier không đọc được cho tới khi được restore, nên ZoPanel không khôi phục trực tiếp từ đó được.

## Cloudflare R2

1. **Tạo bucket.** Trong Cloudflare dashboard, mở **R2 object storage** và tạo bucket. Giữ lớp lưu trữ **Standard**.
2. **Tạo API token.** Ở trang tổng quan **R2 object storage**, phần **Account Details**, bấm **Manage** cạnh **API Tokens**, rồi **Create Account API token**.
   - **Permissions:** **Object Read & Write**.
   - Giới hạn token vào bucket của bạn. Quyền Object cho phép giới hạn theo từng bucket.
   - Bấm **Create Account API token**. Chép **Access Key ID** và **Secret Access Key**: secret không xem lại được.
3. **Lấy account ID.** Account ID hiển thị trong Cloudflare dashboard.
4. **Trong ZoPanel**, bấm **Cloudflare R2**, rồi đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `<ACCOUNT_ID>.r2.cloudflarestorage.com` |
   | Region | `auto` |
   | URL dạng path | Bật (nút có sẵn đã bật) |

   Bucket tạo trong vùng pháp lý EU dùng `<ACCOUNT_ID>.eu.r2.cloudflarestorage.com`.

**Lưu ý:** nhập endpoint không kèm tên bucket. Nếu dán địa chỉ kết thúc bằng `/<bucket>`, ZoPanel báo "invalid S3 endpoint". R2 không tính phí egress, nên khôi phục và lần kiểm tra restic hằng tuần không tốn phí truyền dữ liệu.

## Backblaze B2

1. **Tạo bucket.** Trong Backblaze web console, tạo bucket **Private**. Ghi lại **Endpoint** hiển thị cho bucket, ví dụ `s3.us-west-004.backblazeb2.com`.
2. **Đặt lifecycle.** Bucket B2 mặc định giữ mọi phiên bản file. Trong phần lifecycle của bucket, chọn **Keep only the last version** để các phiên bản cũ không chiếm dung lượng.
3. **Tạo application key.** Vào **B2 Cloud Storage → Application Keys**, bấm **Add a New Application Key**:
   - **Allow access to Bucket(s):** chỉ bucket của bạn.
   - **Type of Access:** **Read and Write**.
   - Tích **Allow List All Bucket Names**. Key giới hạn theo bucket cần quyền này để dùng với công cụ S3.
   - Bấm **Create New Key**, rồi chép **keyID** và **applicationKey**. applicationKey chỉ hiện một lần.

   Master application key không dùng được với API tương thích S3.
4. **Trong ZoPanel**, bấm **Backblaze B2**, rồi đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `s3.<region>.backblazeb2.com`, đúng như trên bucket, ví dụ `s3.us-west-004.backblazeb2.com` |
   | Region | Phần giữa của endpoint, ví dụ `us-west-004` |
   | Access key / Secret key | keyID / applicationKey |

   Nút có sẵn điền `us-west-004`. Tài khoản của bạn có thể ở region khác: luôn chép endpoint từ bucket.

**S3 hay "Backblaze B2"?** Mục **Lưu ở đâu** còn có kiểu **Backblaze B2** dùng API gốc của B2. Kiểu này dùng được cho sao lưu từ xa, nhưng sao lưu tăng dần cần form **S3**. Muốn dùng cả hai thì hãy dùng endpoint tương thích S3 ở trên.

## DigitalOcean Spaces

1. **Tạo bucket** trong **Spaces Object Storage**, ở một region như `sgp1`, `nyc3` hoặc `fra1`.
2. **Tạo key giới hạn.** Ở tab **Access Keys**, bấm **Create Access Key**:
   - **Select access scope:** **Limited access**.
   - Chọn bucket của bạn và đặt **Permissions** là **Read/Write/Delete**.
   - Đặt tên key rồi bấm **Create Access Key**. Secret key chỉ hiện một lần.
3. **Trong ZoPanel**, bấm **DigitalOcean**, rồi đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `<region>.digitaloceanspaces.com`, ví dụ `sgp1.digitaloceanspaces.com` |
   | Region | Mã region, ví dụ `sgp1` |

**Lưu ý:** dùng endpoint theo region, không dùng địa chỉ riêng của bucket (`<bucket>.<region>.digitaloceanspaces.com`). Không thể dùng cùng lúc limited access key và bucket policy trên cùng một bucket.

## Google Cloud Storage

Cloud Storage nhận request kiểu S3 qua XML API, xác thực bằng **khoá HMAC**.

1. **Tạo bucket** trong Cloud Storage, lớp lưu trữ Standard, chế độ truy cập uniform.
2. **Tạo service account** (IAM & Admin → Service accounts), không cấp role nào ở cấp project.
3. **Chỉ cấp quyền trên bucket.** Ở tab **Permissions** của bucket, cấp cho service account:
   - **Storage Object Admin** (`roles/storage.objectAdmin`): đọc, ghi, xoá và upload nhiều phần,
   - **Storage Legacy Bucket Reader** (`roles/storage.legacyBucketReader`): thêm quyền `storage.buckets.get`, cần cho bước kiểm tra bucket tồn tại.
4. **Tạo khoá HMAC.** Mở **Settings** của Cloud Storage, tab **Interoperability**, bấm **Create a key for a service account**. Chọn service account rồi bấm **Create key**. Cất secret ngay: không lấy lại được.
5. **Trong ZoPanel** (không có nút điền sẵn), đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `storage.googleapis.com` |
   | Region | Vị trí của bucket, ví dụ `asia-southeast1`, hoặc `auto` |
   | Access key / Secret key | Access ID / secret của khoá HMAC |
   | URL dạng path | Tắt |

## MinIO và kho tự dựng khác

1. **Tạo bucket và user** bằng MinIO client. Lưu policy dưới đây thành `zopanel.json`:

   ```json
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
         "Resource": ["arn:aws:s3:::zopanel-backups"]
       },
       {
         "Effect": "Allow",
         "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload"],
         "Resource": ["arn:aws:s3:::zopanel-backups/*"]
       }
     ]
   }
   ```

   ```bash
   mc mb myminio/zopanel-backups
   mc admin user add myminio zopanel-web1 '<một secret ngẫu nhiên dài>'
   mc admin policy create myminio zopanel-backups zopanel.json
   mc admin policy attach myminio zopanel-backups --user zopanel-web1
   ```

2. **Trong ZoPanel** (không có nút điền sẵn), đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `minio.example.com` hoặc `minio.example.com:9000` |
   | Region | Region của MinIO, là `us-east-1` nếu bạn chưa đổi |
   | URL dạng path | Bật |
   | HTTP thường | Chỉ khi MinIO nằm trong mạng riêng và không có TLS |

**Lưu ý:** hãy cấp cho MinIO chứng chỉ của một tổ chức cấp phát công khai (ví dụ Let's Encrypt). Chứng chỉ tự ký sẽ gây lỗi TLS, vì ZoPanel luôn kiểm tra chứng chỉ và không có tuỳ chọn bỏ qua.

## Lưu trữ S3 của ZoPanel trên server khác

Một server ZoPanel thứ hai có thành phần [Lưu trữ S3](/vi/docs/apps#luu-tru-doi-tuong-s3) là nơi chứa bản sao ngoài server với chi phí thấp. Đừng dùng lưu trữ S3 của chính server đang sao lưu: mất server là mất luôn.

1. Trên **server lưu trữ**, cài **Lưu trữ S3** và đưa nó ra một tên miền bằng **Mở ra tên miền** (ví dụ `s3.example.com`).
2. Tạo bucket ở **Lưu trữ S3 → Tạo bucket**, từ một tài khoản dành riêng cho sao lưu. Bucket có khoá truy cập riêng, chỉ dùng được cho bucket đó. Secret chỉ hiện một lần (mất thì dùng **Xoay khoá**).
3. Trong **Cài đặt bucket**, để trống **Tự xóa file sau (ngày)**, hoặc đặt dài hơn hẳn số ngày bạn giữ bản sao. ZoPanel tự xoá bản cũ, và kho sao lưu tăng dần sẽ hỏng nếu kho lưu trữ tự xoá file của nó.
4. Trên **server cần sao lưu**, đặt:

   | Trường | Giá trị |
   | --- | --- |
   | Endpoint | `s3.example.com` |
   | Region | `us-east-1` |
   | URL dạng path | Bật |

Dung lượng bucket bị giới hạn bằng dung lượng đĩa trong gói của tài khoản đó: hãy chọn gói đủ lớn cho số bản bạn giữ.

## Kiểm tra kết nối và sao lưu lần đầu

1. Bấm **Kiểm tra kết nối**. ZoPanel kiểm tra bucket tồn tại, ghi một file nhỏ vào `<thư mục gốc>/<tên máy>/_zopanel/` rồi xoá nó. "Kết nối thành công" nghĩa là key liệt kê, ghi và xoá được.
2. Bật công tắc và bấm **Lưu**.
3. Trên trang **Sao lưu**, chọn tài khoản và bấm **Tạo bản sao lưu**. Log của tác vụ hiện `Uploading … (encrypted)` rồi `Uploaded … bytes`. File xuất hiện trong bucket ở `<thư mục gốc>/<tên máy>/<tài khoản>/`.
4. Mở **Sao lưu → Cứu hộ thảm họa → Xem khóa** và cất khoá khôi phục ở ngoài server. Không có khoá này thì không đọc được gì trong bucket từ server khác.
5. Với sao lưu tăng dần, chọn S3 làm **Nơi lưu** trong thẻ **Sao lưu tăng dần** rồi lưu. Log của tác vụ hiện địa chỉ kho (`s3:https://<endpoint>/<bucket>/<thư mục gốc>/<tên máy>/restic`). Bấm **Xem khoá khôi phục** và cất cả khoá này.

Nếu sau này bạn đổi endpoint, bucket hoặc key trong **Cài đặt → Sao lưu từ xa**, hãy lưu lại thẻ **Sao lưu tăng dần**: restic giữ thông tin S3 được cấp lúc thiết lập.

## Khôi phục từ S3

- **Một tài khoản:** **Sao lưu → Cứu hộ thảm họa → Duyệt S3**, mở server, rồi tài khoản, và bấm **Khôi phục** trên một bản sao lưu. Xem [Khôi phục cả tài khoản](/vi/docs/backups#ca-tai-khoan).
- **Từng file, thư mục, mail hoặc database** từ kho sao lưu tăng dần: thẻ **Snapshot (sao lưu tăng dần)** trên trang **Sao lưu**. Xem [Khôi phục](/vi/docs/backups#khoi-phuc).
- **Cả server:** trên server mới, kết nối đúng bucket và **Thư mục gốc** cũ, khôi phục bản sao lưu cấu hình trong `_panel` bằng khoá khôi phục, rồi tới các tài khoản. Xem [Mất server: khôi phục lên server mới](/vi/docs/disaster-recovery#mat-server-khoi-phuc-len-server-moi).

Thỉnh thoảng hãy thử khôi phục lên một server dự phòng. Việc này cũng chứng minh key và endpoint bạn ghi lại vẫn dùng được.

## Xử lý sự cố

ZoPanel hiển thị lỗi của nhà cung cấp sau "cannot access bucket:", "write test failed:" hoặc "upload failed:". Bước kiểm tra đầu tiên (bucket có tồn tại không?) là một request HEAD, và nhà cung cấp không trả nội dung lỗi cho loại request này. Vì vậy sai secret, sai region, lệch đồng hồ hay thiếu quyền đều có thể hiện thành **cannot access bucket: Access Denied.** Mã lỗi đầy đủ xuất hiện ở bước ghi thử, trong log của tác vụ tải lên, hoặc khi dùng công cụ S3 bất kỳ với cùng key.

| Lỗi | Nguyên nhân thường gặp | Cách xử lý |
| --- | --- | --- |
| `SignatureDoesNotMatch` | Sai secret key, chép dính khoảng trắng, hoặc sai region | Dán lại secret (ô này giữ nguyên khoảng trắng). Kiểm tra **Region**. Với B2, dùng applicationKey, không dùng master key. |
| `AccessDenied` / `Access Denied.` | Policy của key thiếu quyền, policy gắn với tên bucket khác, hoặc token R2 giới hạn vào bucket khác | So policy với các ví dụ ở trên: quyền liệt kê trên ARN của bucket, quyền object trên `bucket/*`. Với B2, tích **Allow List All Bucket Names**. Với Google Cloud, thêm **Storage Legacy Bucket Reader**. |
| `bucket does not exist` / `NoSuchBucket` | Gõ sai tên bucket, hoặc endpoint thuộc region hay tài khoản khác | Chép chính xác tên bucket. Dùng endpoint của region chứa bucket (Wasabi, B2, Spaces). |
| `invalid bucket name` | Có chữ hoa, dấu gạch dưới, hoặc ít hơn 3 ký tự | Tạo bucket với tên hợp lệ |
| `invalid S3 endpoint` | Endpoint có kèm đường dẫn (`/bucket`) hoặc ký tự khác | Chỉ nhập tên máy chủ, có thể kèm `:cổng` |
| `the bucket is in region …` | Bucket được tạo ở region khác với endpoint và region bạn nhập (preset Wasabi điền sẵn `ap-southeast-1`) | Đặt **Region** đúng region được nêu, và dùng endpoint của region đó, ví dụ `s3.us-east-1.wasabisys.com`. |
| `301 Moved Permanently` | Endpoint thuộc region khác với region của bucket | Dùng endpoint của region chứa bucket. |
| `400 Bad Request`, `AuthorizationHeaderMalformed`, `the region '…' is wrong; expecting '…'` | Region không khớp với bucket | Đặt **Region** đúng giá trị lỗi yêu cầu. Với R2 là `auto`. |
| `RequestTimeTooSkewed`, "the difference between the request time and the current time is too large" | Đồng hồ server bị lệch (S3 từ chối request lệch quá khoảng 15 phút) | Chạy `zopanel ctl doctor`, lệnh này có kiểm tra đồng hồ. Bật NTP: `timedatectl set-ntp true`. |
| `no such host`, hết thời gian kết nối | Gõ sai endpoint, hoặc tường lửa chặn HTTPS đi ra | Kiểm tra tên máy chủ bằng `getent hosts <endpoint>`. Mở cổng 443 đi ra (hoặc cổng của MinIO). |
| `no such host` hoặc lỗi chứng chỉ nhắc tới `<bucket>.<endpoint>` | Kiểu địa chỉ virtual-host: tên bucket được ghép trước endpoint, và tên đó không tồn tại | Bật **URL dạng path** (R2, MinIO, lưu trữ S3 của ZoPanel và các kho tự dựng khác). Để tắt với Amazon S3. |
| `x509: certificate signed by unknown authority`, `certificate is valid for …, not …` | Chứng chỉ tự ký, hoặc tên endpoint không khớp chứng chỉ | Dùng chứng chỉ được tin cậy công khai, có tên khớp với **Endpoint**. Chỉ với MinIO trong mạng riêng mới dùng **HTTP thường**. |
| `re-enter the secret key when changing the endpoint, bucket or access key` | Secret đã lưu chỉ được dùng lại cho đúng nơi lưu cũ | Nhập lại secret key |
| Sao lưu tăng dần vẫn ghi vào bucket cũ | restic giữ thông tin từ lúc thiết lập | Lưu lại thẻ **Sao lưu tăng dần** |
| Hoá đơn lưu trữ tăng dù bản cũ đã bị xoá | Versioning, object lock hoặc thời gian lưu tối thiểu | Thêm lifecycle rule cho phiên bản không hiện hành. Với B2, chọn **Keep only the last version**. Với Wasabi, xem lưu ý 90 ngày ở trên. |

## Xem thêm

- [Sao lưu](/vi/docs/backups)
- [Cứu hộ thảm họa](/vi/docs/disaster-recovery)
- [License](/vi/docs/licensing)
- [Kho ứng dụng và lưu trữ S3](/vi/docs/apps#luu-tru-doi-tuong-s3)
- [Bảo mật](/vi/docs/security)
- [Xử lý sự cố](/vi/docs/troubleshooting)
