Selain daftar kontrol akses (ACL) tingkat bucket, Object Storage Service (OSS) juga menyediakan ACL tingkat objek. Anda dapat mengonfigurasi ACL untuk suatu objek saat mengunggahnya atau mengubah ACL objek yang sudah ada kapan saja.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.
Topik ini memperoleh kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.
Topik ini membuat instans OSSClient menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.
Untuk mengonfigurasi ACL suatu objek, Anda harus memiliki izin
oss:PutObjectAcl. Untuk menanyakan ACL suatu objek, Anda harus memiliki izinoss:GetObjectAcl. Untuk informasi lebih lanjut, 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 objek dalam bucket private diatur menjadi 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 ke data dalam bucket Anda dan biaya tinggi. Berhati-hatilah saat mengatur ACL objek menjadi 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 ke data dalam 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 menjadi public-read-write kecuali benar-benar diperlukan. | CannedAccessControlList.PublicReadWrite |
Konfigurasi ACL objek
Kode berikut menunjukkan contoh cara mengatur ACL objek:
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CannedAccessControlList;
public class Demo {
public static void main(String[] args) throws Exception {
// Pada contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: testfolder/exampleobject.txt.
String objectName = "testfolder/exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Atur ACL objek menjadi public-read.
ossClient.setObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "misalnya tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Tanyakan ACL objek
Kode berikut menunjukkan contoh cara menanyakan ACL objek:
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.ObjectAcl;
public class Demo {
public static void main(String[] args) throws Exception {
// Pada contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: testfolder/exampleobject.txt.
String objectName = "testfolder/exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Tanyakan ACL objek.
ObjectAcl objectAcl = ossClient.getObjectAcl(bucketName, objectName);
System.out.println(objectAcl.getPermission().toString());
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "misalnya tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Referensi
Untuk kode contoh lengkap mengenai ACL objek, lihat contoh GitHub.
Untuk informasi lebih lanjut tentang operasi API untuk mengonfigurasi ACL objek, lihat PutObjectACL.
Untuk informasi lebih lanjut tentang operasi API untuk menanyakan ACL objek, lihat GetObjectACL.