全部产品
Search
文档中心

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

更新时间:Nov 30, 2025

Topik ini menjelaskan cara mengelola izin akses objek.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di 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 OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.

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

Jenis ACL

Objek mendukung empat daftar kontrol akses (ACL) berikut:

Catatan

ACL objek memiliki prioritas lebih tinggi daripada ACL bucket tempat objek tersebut disimpan. Misalnya, jika ACL suatu objek dalam bucket private diatur ke public-read, semua pengguna, termasuk pengguna anonim, dapat membaca objek tersebut.

Jenis ACL

Deskripsi

Nilai

Diturunkan dari bucket (default)

Objek mewarisi ACL bucket tempat objek tersebut disimpan. Ini merupakan ACL default untuk objek.

CannedAccessControlList.Default

Private

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

CannedAccessControlList.Private

Public-read

Hanya pemilik objek yang dapat menulis objek tersebut. Semua pengguna, termasuk pengguna anonim, dapat membaca objek tersebut.

Peringatan

Pengaturan ini dapat menyebabkan akses tidak sah terhadap data di bucket Anda dan biaya tinggi. Harap berhati-hati saat mengatur ACL objek ke public-read.

CannedAccessControlList.PublicRead

Public-read-write

Semua pengguna, termasuk pengguna anonim, dapat membaca dan menulis objek tersebut.

Peringatan

Jika Anda mengatur ACL objek ke nilai ini, semua pengguna dapat mengakses objek tersebut dan menulis data ke objek melalui Internet. Hal ini dapat menyebabkan akses tidak sah terhadap data di bucket Anda dan biaya tinggi. Jika pengguna mengunggah data atau informasi terlarang ke bucket, kepentingan dan hak sah Anda dapat dilanggar. Oleh karena itu, kami menyarankan agar Anda tidak mengatur ACL bucket ke public-read-write kecuali benar-benar diperlukan.

CannedAccessControlList.PublicReadWrite

Mengatur izin akses objek

Kode berikut memberikan contoh cara mengatur ACL objek:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Path lengkap tidak boleh mencakup nama bucket. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";


    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Atur izin akses objek. */
    SetObjectAclRequest request(BucketName, ObjectName);
    request.setAcl(CannedAccessControlList::Private);
    auto outcome = client.SetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "SetObjectAcl gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Mendapatkan izin akses objek

Kode berikut memberikan contoh cara menanyakan ACL objek:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Path lengkap tidak boleh mencakup nama bucket. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Dapatkan izin akses objek. */
    GetObjectAclRequest request(BucketName, ObjectName);
    auto outcome = client.GetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "GetObjectAcl gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    else { 
        std::cout << " GetObjectAcl berhasil, Acl:" << outcome.result().Acl() << std::endl;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Referensi

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

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