全部产品
Search
文档中心

Object Storage Service:Mengelola izin akses untuk objek (C SDK)

更新时间:Nov 30, 2025

Selain daftar kontrol akses (ACL) tingkat bucket, OSS menyediakan ACL tingkat objek. Anda dapat mengatur ACL saat mengunggah objek atau mengubah ACL objek yang sudah ada kapan saja.

Catatan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi (C SDK).

  • Untuk mengonfigurasi ACL suatu objek, Anda harus memiliki izin oss:PutObjectAcl. Untuk mengkueri ACL suatu objek, Anda harus memiliki izin oss:GetObjectAcl. Untuk informasi selengkapnya, lihat Melampirkan kebijakan kustom ke RAM user.

Jenis ACL

Objek memiliki empat jenis ACL berikut:

Catatan

ACL objek memiliki prioritas lebih tinggi daripada ACL bucket. Misalnya, jika suatu objek diatur sebagai public-read, siapa pun—termasuk pengguna anonim—dapat membaca objek tersebut meskipun bucket yang memuat objek tersebut bersifat privat.

Jenis izin

Deskripsi

Nilai izin

Inherit from bucket (default)

Jika suatu objek tidak memiliki ACL, objek tersebut mewarisi ACL bucket-nya.

OSS_ACL_DEFAULT

Private

Hanya pemilik objek yang dapat membaca dan menulis objek tersebut. Pengguna lain tidak dapat mengakses objek tersebut.

OSS_ACL_PRIVATE

Public-read

Hanya pemilik objek yang dapat menulis ke objek tersebut. Siapa pun, termasuk pengguna anonim, dapat membaca objek tersebut.

Peringatan

Setiap pengguna di Internet dapat mengakses objek ini. Hal ini dapat menyebabkan kebocoran data dan peningkatan biaya. Gunakan izin ini dengan hati-hati.

OSS_ACL_PUBLIC_READ

Public-read-write

Siapa pun, termasuk pengguna anonim, dapat membaca dan menulis objek tersebut.

Peringatan

Setiap pengguna di Internet dapat mengakses objek ini dan menulis data ke dalamnya. Hal ini dapat menyebabkan kebocoran data serta peningkatan biaya. Jika pengguna jahat menulis informasi ilegal ke objek tersebut, hak hukum Anda mungkin dilanggar. Jangan mengonfigurasi izin public-read-write kecuali benar-benar diperlukan.

OSS_ACL_PUBLIC_READ_WRITE

Kode contoh

Kode contoh berikut menunjukkan cara mengatur dan mengambil ACL untuk objek tertentu:

#include "oss_api.h"
#include "aos_http_io.h"
/* Setel yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Setel yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Dua parameter berikut juga perlu dikonfigurasi.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Setel parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Memory pool (pool) digunakan untuk manajemen memori dan setara dengan apr_pool_t. Kode implementasinya berada di library apr. */
    aos_pool_t *pool;
    /* Buat memory pool baru. Parameter kedua adalah NULL, yang berarti memory pool baru ini tidak mewarisi dari memory pool lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori untuk opsi di dalam memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    oss_acl_e oss_acl = OSS_ACL_PRIVATE;
    /* Setel ACL objek. */
    resp_status = oss_put_object_acl(oss_client_options, &bucket, &object, oss_acl, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put object acl success!\n"); 
    } else {
        printf("put object acl failed!\n"); 
    }
    /* Dapatkan ACL objek. */
    aos_string_t oss_acl_string;
    resp_status = oss_get_object_acl(oss_client_options, &bucket, &object, &oss_acl_string, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object acl success!\n");
        printf("acl: %s \n", oss_acl_string.data);
    } else {
        printf("get object acl failed!\n");
    }
    /* Hancurkan memory pool. Ini akan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang telah dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Referensi

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengatur izin akses objek, lihat PutObjectACL.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengambil izin akses objek, lihat GetObjectACL.