Daftar kontrol akses (ACL) bucket adalah mekanisme kontrol akses tingkat bucket di Object Storage Service (OSS) yang memungkinkan Anda mengatur izin akses publik atau privat untuk suatu bucket. Saat objek diunggah tanpa ACL yang ditentukan, objek tersebut secara otomatis mewarisi pengaturan ACL bucket.
Cara kerja
Bucket ACL mengontrol akses ke bucket menggunakan izin yang telah ditentukan sebelumnya. OSS mendukung tiga izin berikut:
Nilai izin | Deskripsi |
private (default) | Privat. Hanya pemilik bucket atau pengguna yang berwenang yang dapat membaca dan menulis objek dalam bucket. Pengguna lain tidak dapat mengakses objek tersebut. |
public-read | Baca-publik. Hanya pemilik bucket atau pengguna yang berwenang yang dapat menulis objek. Siapa pun, termasuk pengguna anonim, dapat membaca objek. |
public-read-write | Baca-tulis publik. Siapa pun, termasuk pengguna anonim, dapat membaca dan menulis objek dalam bucket. |
public-read-write: Siapa pun di Internet dapat mengakses dan menulis objek dalam bucket ini. Pengaturan ini berisiko menyebabkan kebocoran data, lonjakan biaya, atau penulisan informasi ilegal secara jahat. Jangan gunakan izin ini kecuali dalam skenario khusus.
public-read: Siapa pun di Internet dapat mengakses objek dalam bucket ini. Pengaturan ini berpotensi menyebabkan kebocoran data dan lonjakan biaya. Harap berhati-hati.
Mengatur bucket ACL
Saat membuat bucket, fitur Block Public Access diaktifkan secara default. Oleh karena itu, bucket ACL hanya dapat diatur ke private. Untuk mengubah ACL menjadi public-read atau public-read-write, Anda harus terlebih dahulu menonaktifkan Block Public Access.
Konsol
Buka halaman Buckets dan klik nama bucket yang dituju.
Pada panel navigasi di sebelah kiri, pilih .
Klik Configure dan sesuaikan bucket ACL sesuai kebutuhan.
Klik Save untuk menyimpan pengaturan.
ossutil
Anda dapat menggunakan perintah put-bucket-acl dari ossutil V2.0 untuk mengatur bucket ACL.
ossutil api put-bucket-acl --bucket example-bucket --acl privateSDK
Kode berikut memberikan contoh cara mengubah bucket ACL menggunakan SDK umum. Untuk contoh kode SDK lainnya, lihat Referensi SDK.
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class SetBucketAcl {
public static void main(String[] args) {
String bucketName = "example-bucket";
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region("<region-id>")
.build()) {
// Atur bucket ACL ke private.
// Nilai yang valid: "private", "public-read", dan "public-read-write".
PutBucketAclRequest putRequest = PutBucketAclRequest.newBuilder()
.bucket(bucketName)
.acl("private")
.build();
PutBucketAclResult putResult = client.putBucketAcl(putRequest);
System.out.println("Set Bucket ACL berhasil. RequestId: " + putResult.requestId());
// Dapatkan bucket ACL.
GetBucketAclRequest getRequest = GetBucketAclRequest.newBuilder()
.bucket(bucketName)
.build();
GetBucketAclResult getResult = client.getBucketAcl(getRequest);
System.out.println("Bucket ACL saat ini: " + getResult.accessControlPolicy().accessControlList().grant());
} catch (Exception e) {
System.err.println("Operasi gagal: " + e.getMessage());
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
# Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
import alibabacloud_oss_v2 as oss
def main() -> None:
bucket_name = "example-bucket"
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = "<region-id>"
client = oss.Client(cfg)
# Atur bucket ACL ke private.
# Nilai yang valid: "private", "public-read", dan "public-read-write".
put_result = client.put_bucket_acl(oss.PutBucketAclRequest(
bucket=bucket_name,
acl="private"
))
print(f"Set Bucket ACL berhasil. RequestId: {put_result.request_id}")
# Dapatkan bucket ACL.
get_result = client.get_bucket_acl(oss.GetBucketAclRequest(
bucket=bucket_name
))
print(f"Bucket ACL saat ini: {get_result.acl}")
if __name__ == "__main__":
main()
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
package main
import (
"context"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
bucketName := "example-bucket"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("<region-id>")
client := oss.NewClient(cfg)
// Atur bucket ACL ke private.
// Nilai yang valid: oss.BucketACLPrivate, oss.BucketACLPublicRead, dan oss.BucketACLPublicReadWrite.
putResult, err := client.PutBucketAcl(context.TODO(), &oss.PutBucketAclRequest{
Bucket: oss.Ptr(bucketName),
Acl: oss.BucketACLPrivate,
})
if err != nil {
log.Fatalf("Gagal mengatur Bucket ACL: %v", err)
}
log.Printf("Set Bucket ACL berhasil. RequestId: %s", putResult.Headers.Get("X-Oss-Request-Id"))
// Dapatkan bucket ACL.
getResult, err := client.GetBucketAcl(context.TODO(), &oss.GetBucketAclRequest{
Bucket: oss.Ptr(bucketName),
})
if err != nil {
log.Fatalf("Gagal mendapatkan Bucket ACL: %v", err)
}
log.Printf("Bucket ACL saat ini: %s", *getResult.ACL)
}
<?php
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
require_once __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$bucketName = 'example-bucket';
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion('<region-id>');
$client = new Oss\Client($cfg);
try {
// Atur bucket ACL ke private.
// Nilai yang valid: BucketACLType::PRIVATE, BucketACLType::PUBLIC_READ, dan BucketACLType::PUBLIC_READ_WRITE.
$putResult = $client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
bucket: $bucketName,
acl: Oss\Models\BucketACLType::PRIVATE
));
printf("Set Bucket ACL berhasil. RequestId: %s\n", $putResult->requestId);
// Dapatkan bucket ACL.
$getResult = $client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
bucket: $bucketName
));
printf("Bucket ACL saat ini: %s\n", $getResult->accessControlList->grant);
} catch (Exception $e) {
printf("Operasi gagal: %s\n", $e->getMessage());
}
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
using OSS = AlibabaCloud.OSS.V2;
var bucketName = "example-bucket";
var region = "<region-id>";
var cfg = OSS.Configuration.LoadDefault();
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
cfg.Region = region;
using var client = new OSS.Client(cfg);
try
{
// Atur bucket ACL ke private.
// Nilai yang valid: "private", "public-read", dan "public-read-write".
var putResult = await client.PutBucketAclAsync(new OSS.Models.PutBucketAclRequest()
{
Bucket = bucketName,
Acl = "private"
});
Console.WriteLine($"Set Bucket ACL berhasil. RequestId: {putResult.RequestId}");
// Dapatkan bucket ACL.
var getResult = await client.GetBucketAclAsync(new OSS.Models.GetBucketAclRequest()
{
Bucket = bucketName
});
Console.WriteLine($"Bucket ACL saat ini: {getResult.AccessControlPolicy?.AccessControlList?.Grant}");
}
catch (Exception ex)
{
Console.WriteLine($"Operasi gagal: {ex.Message}");
}
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
const OSS = require('ali-oss');
async function main() {
const bucketName = 'example-bucket';
const client = new OSS({
region: 'oss-<region-id>',
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
});
try {
// Atur bucket ACL ke private.
// Nilai yang valid: 'private', 'public-read', dan 'public-read-write'.
await client.putBucketACL(bucketName, 'private');
console.log('Set Bucket ACL berhasil.');
// Dapatkan bucket ACL.
const result = await client.getBucketACL(bucketName);
console.log(`Bucket ACL saat ini: ${result.acl}`);
} catch (err) {
console.error('Operasi gagal:', err.message);
}
}
main();
Memeriksa catatan perubahan bucket ACL
Jika Anda mendeteksi akses bucket yang tidak normal, paparan data yang tidak disengaja, menerima peringatan keamanan, atau perlu melakukan audit berkala, Anda dapat menggunakan ActionTrail untuk melacak perubahan pada bucket ACL. ActionTrail mencatat siapa yang melakukan perubahan dan kapan.
Buka Konsol ActionTrail. Pada panel navigasi di sebelah kiri, pilih .
Di bagian atas halaman, pilih wilayah tempat bucket berada. Atur Service Name ke
Object Storage Service (OSS)dan Event Name kePutBucketAcl. Sistem akan secara otomatis mencari dan menampilkan catatan terkait perubahan bucket ACL.Di sisi kanan halaman, nonaktifkan opsi Grouped List. Pada kolom Actions dari catatan perubahan, klik View Details, lalu klik Configuration Timeline untuk melihat nilai bucket ACL sebelum dan sesudah perubahan.
FAQ
Apakah pengambilan asal (origin fetch) CDN dari OSS memerlukan bucket ACL diatur ke public-read atau public-read-write?
Anda tidak perlu mengatur izin public-read. CDN tetap dapat melakukan pengambilan asal dari bucket meskipun ACL-nya diatur ke private. Untuk informasi selengkapnya, lihat Set up origin fetch for a private bucket.
Referensi
Untuk skenario yang memerlukan kustomisasi tingkat tinggi, Anda dapat langsung mengirim permintaan REST API. Perlu diperhatikan bahwa jika Anda mengirim permintaan REST API, Anda harus menulis kode secara manual untuk menghitung signature. Untuk informasi lebih lanjut mengenai API, lihat PutBucketAcl.
Untuk memberikan izin detail halus jangka panjang kepada pengguna lain, seperti izin read-only atau write-only pada objek dengan awalan tertentu dalam bucket, Anda dapat menggunakan bucket policy atau RAM policy.
Untuk memberikan izin detail halus sementara kepada pengguna lain, seperti izin untuk menampilkan semua objek dalam bucket, Anda dapat menggunakan otorisasi sementara Security Token Service (STS). Untuk informasi selengkapnya, lihat Use temporary credentials provided by STS to access OSS.