All Products
Search
Document Center

Object Storage Service:Mencegah penimpaan file

Last Updated:Sep 09, 2026

Untuk melindungi file dalam bucket OSS dari perubahan yang tidak disengaja atau berbahaya, Anda dapat mengonfigurasi aturan mencegah-penimpaan. Fitur ini memungkinkan Anda mengontrol secara tepat file mana yang tidak boleh ditimpa berdasarkan path-nya, jenisnya, atau identitas pengguna.

  • Penulisan konkuren dan aturan mencegah-penimpaan: Dalam skenario konkurensi tinggi—misalnya ketika beberapa klien menulis ke path yang belum ada atau saat penulisan terjadi bersamaan dengan proses penghapusan—sistem mungkin tidak mendeteksi keberadaan file yang akan ditimpa. Dalam kasus tersebut, operasi penulisan diizinkan. Namun, setelah file berhasil dibuat, aturan tersebut akan memblokir semua upaya penimpaan berikutnya.

  • Batasan transisi kelas penyimpanan: Saat fitur File overwrite prohibited diaktifkan, Anda tidak dapat menggunakan metode sisi klien seperti Konsol OSS, SDK, atau ossutil untuk memanggil operasi CopyObject guna mengubah kelas penyimpanan suatu objek, misalnya dari Standard ke Archive. Untuk mengubah kelas penyimpanan objek yang dilindungi, gunakan aturan lifecycle agar transisi dilakukan secara otomatis.

  • Kompatibilitas fitur: Fitur File overwrite prohibited hanya memblokir operasi penimpaan file sisi klien. Fitur ini tidak memengaruhi fungsi sistem latar belakang seperti replikasi lintas wilayah (CRR) atau aturan lifecycle.

  • Konflik dengan versioning: Fitur File overwrite prohibited saling eksklusif dengan versioning. Jika versioning diaktifkan atau ditangguhkan untuk suatu bucket, semua aturan mencegah-penimpaan akan diabaikan.

Cara kerja

Saat OSS menerima permintaan untuk menimpa file, sistem mengevaluasi permintaan tersebut terhadap aturan mencegah-penimpaan yang telah dikonfigurasi sesuai urutan pembuatannya:

  1. Pencocokan aturan: Sistem memeriksa apakah path file sesuai dengan kondisi awalan dan akhiran suatu aturan serta apakah identitas pengguna sesuai dengan pengaturan Authorized User.

  2. Keputusan: OSS memblokir penimpaan dan mengembalikan error FileAlreadyExists hanya jika semua kondisi dalam suatu aturan (awalan, akhiran, dan identitas pengguna) terpenuhi.

  3. Perilaku default: Jika permintaan tidak sesuai dengan aturan mencegah-penimpaan apa pun, penimpaan diizinkan.

Lindungi jenis file tertentu

Lindungi file konfigurasi dan log di lingkungan produksi Anda agar tidak ditimpa secara tidak sengaja oleh pengguna tertentu.

  1. Pada halaman Buckets, klik nama bucket target.

  2. Di panel navigasi kiri, pilih Data Management > File overwrite prohibited.

  3. Klik New rule added to prohibit overwrite writes dan konfigurasikan parameter berikut:

    • Rule ID: Anda dapat memasukkan ID kustom atau biarkan kosong untuk ID yang dihasilkan secara otomatis.

    • File name prefix: Masukkan path direktori yang ingin dilindungi, misalnya production/configs/.

    • File name extension: Masukkan ekstensi file yang ingin dilindungi, misalnya .json.

    • Authorized User: Tentukan Pengguna RAM, Peran RAM, atau akun lain yang ingin dibatasi.

  4. Klik OK untuk membuat aturan.

  5. Verifikasi aturan:

    • Menggunakan akun yang dibatasi, coba unggah file dengan nama yang sama ke production/configs/app.json.

    • Pastikan error FileAlreadyExists dikembalikan.

    • Pastikan pengguna lain tetap dapat mengunggah file secara normal dan unggahan ke path yang tidak memenuhi kondisi awalan dan akhiran berhasil dilakukan.

Tetapkan kebijakan perlindungan global

Tetapkan perlindungan menyeluruh untuk data bisnis kritis guna mencegah modifikasi tidak sengaja oleh pengguna mana pun.

  1. Pada halaman Buckets, klik nama bucket target.

  2. Di panel navigasi kiri, pilih Data Management > File overwrite prohibited.

  3. Klik New rule added to prohibit overwrite writes dan konfigurasikan parameter berikut:

    • Rule ID: Anda dapat memasukkan ID kustom atau biarkan kosong untuk ID yang dihasilkan secara otomatis.

    • File name prefix: critical-data/

    • File name extension: Biarkan kosong untuk melindungi semua file di path yang ditentukan.

    • Authorized User: * (semua akun)

  4. Klik OK untuk membuat aturan.

  5. Verifikasi perlindungan global:

    • Menggunakan akun apa pun, coba timpa critical-data/database.sql.

    • Pastikan error FileAlreadyExists dikembalikan, yang menunjukkan bahwa perlindungan global aktif.

    • Pastikan file di path lain, seperti public-data/, masih dapat ditimpa.

Aturan pencocokan

  • Jumlah aturan: Satu bucket dapat memiliki maksimal 100 aturan.

  • Panjang karakter: Panjang maksimum untuk awalan atau akhiran adalah 1.023 karakter.

  • Pencocokan awalan dan akhiran: Hanya pencocokan string eksak yang didukung. Ekspresi reguler dan wildcard tidak didukung. OSS memperlakukan input seperti logs/ sebagai karakter literal.

  • Pencocokan awalan: Awalan logs/ cocok dengan logs/app.log tetapi tidak cocok dengan dev-logs/app.log.

  • Pencocokan akhiran: Akhiran .txt cocok dengan readme.txt tetapi tidak cocok dengan readme.TXT (case-sensitive) atau readme.txt.bak.

  • Pencocokan Authorized User: Wildcard tanda bintang (*) didukung. Untuk detail konfigurasi, lihat elemen Principal dalam Contoh umum kebijakan bucket.

  • Logika kondisi: OSS hanya memblokir penimpaan jika semua kondisi dalam suatu aturan (awalan, akhiran, dan Authorized User) terpenuhi.

  • Rule ID: Parameter ini opsional. Jika Anda membiarkan bidang ini kosong, OSS akan menghasilkan identifier unik universal (UUID) secara otomatis. Jika Anda memberikan ID, ID tersebut harus unik dalam bucket.

Operasi penimpaan file

Fitur ini memblokir operasi penimpaan file sisi klien berikut:

  • PutObject

  • PostObject

  • CopyObject

  • PutObjectSymlink

  • InitiateMultipartUpload

  • CompleteMultipartUpload

FAQ

Mengapa pemilik bucket tidak bisa menimpa file?

Ini adalah perilaku yang diharapkan. Bidang Authorized User yang kosong menerapkan aturan tersebut ke semua pengguna, termasuk pemilik bucket dan akun root. Untuk mengembalikan izin menimpa, Anda dapat:

  • Menghapus aturan di konsol.

  • Memodifikasi awalan atau akhiran aturan untuk mempersempit cakupannya.

  • Menetapkan Authorized User ke akun tertentu agar hanya pengguna tersebut yang dibatasi.

Mengapa awalan logs/*.txt tidak berfungsi?

OSS tidak mendukung wildcard untuk pencocokan awalan dan akhiran. Karakter * diperlakukan sebagai karakter literal, dan sistem melakukan pencocokan eksak terhadap file bernama logs/*.txt. Metode yang benar adalah:

  • Tetapkan awalan menjadi logs/

  • Tetapkan akhiran menjadi .txt

Hal ini akan mencocokkan semua file di direktori logs/ yang berakhiran .txt.

Apa yang terjadi jika bidang awalan dan akhiran dibiarkan kosong?

Jika awalan dan akhiran keduanya dibiarkan kosong, aturan tersebut berlaku untuk seluruh bucket. Artinya:

  • Jika bidang Authorized User juga kosong, semua pengguna dicegah menimpa file apa pun di dalam bucket.

  • Jika bidang Authorized User menentukan akun tertentu, hanya pengguna tersebut yang dibatasi dari menimpa file di dalam bucket.

Mengapa beberapa operasi tulis tidak diblokir?

Aturan mencegah-penimpaan hanya memblokir operasi tulis pada file yang sudah ada. Selama penulisan konkuren—misalnya ketika beberapa klien menulis ke path yang belum ada atau saat penulisan dimulai bersamaan dengan proses penghapusan—sistem mungkin tidak mendeteksi keberadaan file yang akan ditimpa. Dalam kondisi balapan seperti ini, operasi tulis tetap dilanjutkan. Hal ini bukan berarti aturan gagal. Setelah file dibuat, aturan tersebut akan memblokir semua upaya penimpaan berikutnya. Selain itu, aturan ini tidak dapat memblokir operasi yang tidak termasuk dalam daftar operasi penimpaan file.