All Products
Search
Document Center

Object Storage Service:Bucket ACL

Last Updated:May 07, 2026

Bucket ACL (access control list) adalah mekanisme kontrol akses tingkat bucket di OSS. Gunakan bucket ACL untuk mengatur izin akses bucket menjadi publik atau privat. Objek yang diunggah tanpa ACL yang ditentukan secara eksplisit akan secara otomatis mewarisi ACL bucket tersebut.

Cara kerja

Bucket ACL menggunakan nilai izin yang telah ditentukan sebelumnya untuk mengontrol akses ke bucket.

Value

Description

private (default)

Privat. Hanya pemilik bucket atau pengguna yang berwenang yang dapat membaca dan menulis objek dalam bucket.

public-read

Baca publik. Hanya pemilik bucket atau pengguna yang berwenang yang dapat menulis objek, tetapi siapa pun, termasuk pengguna anonim, dapat membacanya.

public-read-write

Baca-tulis publik. Siapa pun, termasuk pengguna anonim, dapat membaca dan menulis objek dalam bucket.

Penting
  • public-read-write: Memungkinkan pengguna mana pun di internet mengakses dan menulis objek dalam bucket. Pengaturan ini dapat menyebabkan kebocoran data, biaya tak terduga, bahkan unggahan konten ilegal secara jahat. Hindari pengaturan ini kecuali Anda memiliki kebutuhan khusus.

  • public-read: Memungkinkan pengguna mana pun di internet membaca objek dalam bucket. Pengaturan ini dapat menyebabkan kebocoran data dan biaya tak terduga. Gunakan pengaturan ini dengan hati-hati.

Mengatur bucket ACL

Saat membuat bucket, fitur Block Public Access diaktifkan secara default, dan bucket ACL hanya dapat diatur ke private. Untuk mengatur ACL menjadi public-read atau public-read-write, Anda harus terlebih dahulu menonaktifkan Block Public Access.

Konsol

  1. Buka daftar Buckets dan klik nama bucket target.

  2. Pada panel navigasi kiri, pilih Permission Control > ACL (Access Control List).

  3. Klik Configure dan ubah bucket ACL sesuai kebutuhan.

  4. Klik Save.

CLI ossutil

Gunakan perintah put-bucket-acl dengan ossutil command-line tool 2.0 untuk mengonfigurasi bucket ACL.

ossutil api put-bucket-acl --bucket example-bucket --acl private

SDK

Contoh kode berikut menunjukkan cara mengubah bucket ACL dengan SDK umum. Untuk contoh kode SDK lainnya, lihat referensi SDK.

// Contoh kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, 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("Bucket ACL berhasil diatur. 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 kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
# Sebelum menjalankan kode contoh, 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"Bucket ACL berhasil diatur. 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 kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, 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("Bucket ACL berhasil diatur. 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 kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, 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("Bucket ACL berhasil diatur. 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 kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, 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($"Bucket ACL berhasil diatur. 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 kode ini menunjukkan cara mengatur access control list (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, 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('Bucket ACL berhasil diatur.');

        // 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();

Track perubahan bucket ACL

Jika Anda mendeteksi akses bucket yang tidak biasa, mengalami kebocoran data secara tidak sengaja, menerima peringatan keamanan, atau perlu melakukan audit rutin, Anda dapat menggunakan ActionTrail untuk melacak perubahan pada bucket ACL, termasuk siapa yang melakukan perubahan dan kapan.

  1. Buka Konsol ActionTrail. Pada panel navigasi kiri, pilih .

  2. Di bagian atas halaman, pilih wilayah tempat bucket berada. Atur Service Name ke Object Storage Service (OSS) dan Event Name ke PutBucketAcl. ActionTrail kemudian secara otomatis mencari catatan perubahan bucket ACL yang sesuai.

  3. Di sisi kanan halaman, nonaktifkan opsi Summary List. Pada kolom Actions dari catatan perubahan, klik View Details, lalu klik Configure Timeline untuk melihat nilai sebelum dan sesudah perubahan.

FAQ

Origin CDN: Apakah diperlukan ACL publik?

Tidak, izin baca publik tidak diperlukan. Saat bucket ACL diatur ke private, Anda tetap dapat mengonfigurasi CDN untuk mengakses bucket tersebut. Untuk informasi selengkapnya, lihat Set up access to a private origin bucket.

Dokumen terkait

  • Untuk skenario yang sangat kustom, buat permintaan REST API langsung. Hal ini memerlukan penulisan kode secara manual untuk menghitung signature. Untuk detail API, lihat PutBucketAcl.

  • Untuk memberikan izin jangka panjang dengan detail halus kepada pengguna lain, seperti akses read-only atau write-only ke objek dengan awalan tertentu dalam bucket, gunakan bucket policy atau RAM policy.

  • Untuk memberikan izin sementara dengan detail halus kepada pengguna lain, seperti izin untuk menampilkan semua objek dalam bucket, gunakan kredensial akses sementara dari STS. Untuk informasi selengkapnya, lihat Use temporary access credentials provided by STS to access OSS.