全部产品
Search
文档中心

Object Storage Service:Bucket ACL

更新时间:Jan 30, 2026

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.

Penting
  • 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

  1. Buka halaman Buckets dan klik nama bucket yang dituju.

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

  3. Klik Configure dan sesuaikan bucket ACL sesuai kebutuhan.

  4. 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 private

SDK

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.

  1. Buka Konsol ActionTrail. Pada panel navigasi di sebelah kiri, pilih Events > Event Query.

  2. Di bagian atas halaman, pilih wilayah tempat bucket berada. Atur Service Name ke Object Storage Service (OSS) dan Event Name ke PutBucketAcl. Sistem akan secara otomatis mencari dan menampilkan catatan terkait perubahan bucket ACL.

  3. 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.