Bucket adalah wadah untuk objek yang disimpan di Object Storage Service (OSS). Semua objek disimpan dalam bucket. Topik ini menjelaskan cara mengatur dan mengambil access control list (ACL) bucket.
Catatan penggunaan
Topik ini menggunakan endpoint publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan endpoint internal. Untuk detail mengenai wilayah dan endpoint yang didukung, lihat Regions and endpoints.
Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.
Pada topik ini, instans OSSClient dibuat menggunakan endpoint OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configuration examples for common scenarios.
Untuk mengatur ACL bucket, Anda harus memiliki izin
oss:PutBucketAcl. Untuk mengambil ACL bucket, Anda harus memiliki izinoss:GetBucketAcl. Untuk informasi lebih lanjut, lihat Attach a custom policy to a RAM user.
Set the access control list of a bucket
Bucket memiliki tiga jenis ACL berikut:
Value | Description | Method |
Private | Hanya pemilik bucket dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek di dalam bucket. Pengguna lain tidak dapat mengakses objek di dalam bucket tersebut. | CannedAccessControlList.Private |
Public-read | Pemilik bucket dan pengguna yang berwenang memiliki izin baca dan tulis pada objek di dalam bucket. Pengguna lain hanya memiliki izin baca pada objek di dalam bucket. Gunakan izin ini dengan hati-hati. | CannedAccessControlList.PublicRead |
Public-read-write | Semua pengguna memiliki izin baca dan tulis pada objek di dalam bucket. Gunakan izin ini dengan hati-hati. | CannedAccessControlList.PublicReadWrite |
Kode berikut memberikan contoh cara mengatur ACL bucket:
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 {
// Titik akhir untuk wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket, misalnya examplebucket.
String bucketName = "examplebucket";
// 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 bucket. Misalnya, atur ACL bucket examplebucket menjadi private.
ossClient.setBucketAcl(bucketName, CannedAccessControlList.Private);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Obtain bucket read and write permissions
Kode berikut memberikan contoh cara mengambil ACL bucket:
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AccessControlList;
public class Demo {
public static void main(String[] args) throws Exception {
// Titik akhir untuk wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket, misalnya examplebucket.
String bucketName = "examplebucket";
// 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 {
// Dapatkan ACL bucket.
AccessControlList acl = ossClient.getBucketAcl(bucketName);
System.out.println(acl.toString());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Referensi
Untuk kode contoh lengkap yang menunjukkan cara mengelola ACL bucket, lihat contoh GitHub.
Untuk informasi lebih lanjut tentang operasi API untuk mengatur ACL bucket, lihat PutBucketAcl.
Untuk informasi lebih lanjut tentang operasi API untuk mengambil ACL bucket, lihat GetBucketAcl.