Topik ini menjelaskan cara mengelola daftar kontrol akses (ACL) objek.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin 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 instans OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Untuk mengonfigurasi ACL suatu objek, Anda harus memiliki izin
oss:PutObjectAcl. Untuk menanyakan ACL suatu objek, Anda harus memiliki izinoss:GetObjectAcl. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.
Jenis ACL
Objek mendukung empat jenis daftar kontrol akses (ACL) berikut:
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 |
Inherited from 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 serta biaya tinggi. Jika pengguna mengunggah data atau informasi terlarang ke bucket, kepentingan dan hak sah Anda mungkin dilanggar. Oleh karena itu, kami menyarankan agar Anda tidak mengatur ACL bucket ke public-read-write kecuali benar-benar diperlukan. | CannedAccessControlList.PublicReadWrite |
Kode contoh
Kode berikut memberikan contoh cara mengonfigurasi dan menanyakan ACL objek tertentu:
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
var objectName = "exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
// Konfigurasikan ACL objek.
try
{
// Panggil SetObjectAcl untuk mengonfigurasi ACL objek.
client.SetObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
Console.WriteLine("Set Object:{0} ACL succeeded ", objectName);
}
catch (Exception ex)
{
Console.WriteLine("Set Object ACL failed with error info: {0}", ex.Message);
}
// Tanyakan ACL objek.
try
{
// Panggil GetObjectAcl untuk menanyakan ACL objek.
var result = client.GetObjectAcl(bucketName, objectName);
Console.WriteLine("Get Object ACL succeeded, Id: {0} ACL: {1}",
result.Owner.Id, result.ACL.ToString());
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}Referensi
Untuk kode contoh lengkap yang digunakan untuk mengelola ACL objek, kunjungi GitHub.
Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk mengonfigurasi ACL objek, lihat PutObjectACL.
Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk menanyakan ACL objek, lihat GetObjectACL.