All Products
Search
Document Center

Object Storage Service:Object ACL

Last Updated:Apr 01, 2026

Daftar kontrol akses (ACL) objek adalah fitur OSS yang memungkinkan Anda mengontrol akses di tingkat objek. Jika suatu objek memerlukan izin yang berbeda dari izin bucket-nya, gunakan Object ACL untuk mengatur izin baca dan tulis objek tersebut.

Cara kerja

Object ACL mengontrol cakupan akses suatu objek dengan menggunakan nilai izin yang telah ditentukan. OSS mendukung empat izin berikut:

Value

Description

default

Mewarisi ACL bucket. Izin baca dan tulis objek sama dengan bucket-nya.

private

Private. Hanya pemilik objek atau pengguna yang berwenang yang dapat membaca dan menulis objek tersebut. Semua pengguna lain ditolak aksesnya.

public-read

Baca-publik. Siapa pun, termasuk pengguna anonim, dapat membaca objek tersebut. Hanya pemilik objek atau pengguna yang berwenang yang dapat menulis ke objek tersebut.

public-read-write

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

Object ACL memiliki prioritas lebih tinggi daripada bucket ACL. Jika ACL objek diatur ke nilai selain default, maka Object ACL yang menentukan izinnya. Misalnya, jika ACL objek diatur ke public-read, siapa pun dapat mengaksesnya, terlepas dari ACL bucket-nya.

Penting
  • public-read-write: Setiap pengguna di internet dapat mengakses dan menulis ke objek tersebut. Hal ini dapat menyebabkan kebocoran data, biaya tak terduga, serta risiko unggahan konten berbahaya atau ilegal. Kami sangat menyarankan untuk menghindari izin ini kecuali untuk kasus penggunaan tertentu.

  • public-read: Siapa pun dapat membaca objek tersebut. Hal ini dapat menyebabkan kebocoran data dan biaya tak terduga. Gunakan izin ini dengan hati-hati.

  • Anda tidak dapat mengatur Object ACL untuk objek yang berada di bawah kebijakan retensi BucketWorm atau ObjectWorm.

Atur Object ACL

Secara default, Block Public Access diaktifkan untuk bucket baru, yang membatasi Object ACL hanya ke private atau default. Untuk mengatur ACL ke public-read atau public-read-write, Anda harus menonaktifkan Block Public Access terlebih dahulu.

Konsol

  1. Buka halaman Bucket List dan klik nama bucket target.

  2. Pada kolom Actions untuk objek target, klik Details lalu Set ACL.

  3. Pilih ACL (Access Control List) yang diinginkan dan klik OK.

CLI ossutil

Gunakan perintah put-object-acl dari tool baris perintah ossutil 2.0 untuk mengatur Object ACL.

ossutil api put-object-acl --bucket examplebucket --key exampleobject --acl private

SDK

Contoh berikut menunjukkan cara mengatur Object ACL menggunakan SDK umum. Untuk contoh dalam SDK lainnya, lihat referensi SDK.

// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk suatu objek.
// Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi 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 SetObjectAcl {

    public static void main(String[] args) {
        String bucketName = "example-bucket";
        String objectName = "example.txt";

        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 Object ACL ke private.
            // Nilai yang valid: "private", "public-read", "public-read-write", "default".
            PutObjectAclRequest putRequest = PutObjectAclRequest.newBuilder()
                    .bucket(bucketName)
                    .key(objectName)
                    .objectAcl("private")
                    .build();
            PutObjectAclResult putResult = client.putObjectAcl(putRequest);
            System.out.println("Berhasil mengatur Object ACL. RequestId: " + putResult.requestId());

            // Dapatkan Object ACL.
            GetObjectAclRequest getRequest = GetObjectAclRequest.newBuilder()
                    .bucket(bucketName)
                    .key(objectName)
                    .build();
            GetObjectAclResult getResult = client.getObjectAcl(getRequest);
            System.out.println("Object 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 suatu objek.
# Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

import alibabacloud_oss_v2 as oss


def main() -> None:
    bucket_name = "example-bucket"
    object_name = "example.txt"

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = "<region-id>"

    client = oss.Client(cfg)

    # Atur Object ACL ke private.
    # Nilai yang valid: "private", "public-read", "public-read-write", "default".
    put_result = client.put_object_acl(oss.PutObjectAclRequest(
        bucket=bucket_name,
        key=object_name,
        acl="private"
    ))
    print(f"Berhasil mengatur Object ACL. RequestId: {put_result.request_id}")

    # Dapatkan Object ACL.
    get_result = client.get_object_acl(oss.GetObjectAclRequest(
        bucket=bucket_name,
        key=object_name
    ))
    print(f"Object ACL saat ini: {get_result.acl}")


if __name__ == "__main__":
    main()
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk suatu objek.
// Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi 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"
	objectName := "example.txt"

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>")

	client := oss.NewClient(cfg)

	// Atur Object ACL ke private.
	// Nilai yang valid: oss.ObjectACLPrivate, oss.ObjectACLPublicRead, oss.ObjectACLPublicReadWrite, oss.ObjectACLDefault.
	putResult, err := client.PutObjectAcl(context.TODO(), &oss.PutObjectAclRequest{
		Bucket: oss.Ptr(bucketName),
		Key:    oss.Ptr(objectName),
		Acl:    oss.ObjectACLPrivate,
	})
	if err != nil {
		log.Fatalf("Gagal mengatur Object ACL: %v", err)
	}
	log.Printf("Berhasil mengatur Object ACL. RequestId: %s", putResult.Headers.Get("X-Oss-Request-Id"))

	// Dapatkan Object ACL.
	getResult, err := client.GetObjectAcl(context.TODO(), &oss.GetObjectAclRequest{
		Bucket: oss.Ptr(bucketName),
		Key:    oss.Ptr(objectName),
	})
	if err != nil {
		log.Fatalf("Gagal mendapatkan Object ACL: %v", err)
	}
	log.Printf("Object ACL saat ini: %s", *getResult.ACL)
}
<?php
// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk suatu objek.
// Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi 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';
$objectName = 'example.txt';

$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion('<region-id>');

$client = new Oss\Client($cfg);

try {
    // Atur Object ACL ke private.
    // Nilai yang valid: ObjectACLType::PRIVATE, ObjectACLType::PUBLIC_READ, ObjectACLType::PUBLIC_READ_WRITE, ObjectACLType::DEFAULT.
    $putResult = $client->putObjectAcl(new Oss\Models\PutObjectAclRequest(
        bucket: $bucketName,
        key: $objectName,
        acl: Oss\Models\ObjectACLType::PRIVATE
    ));
    printf("Berhasil mengatur Object ACL. RequestId: %s\n", $putResult->requestId);

    // Dapatkan Object ACL.
    $getResult = $client->getObjectAcl(new Oss\Models\GetObjectAclRequest(
        bucket: $bucketName,
        key: $objectName
    ));
    printf("Object 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 suatu objek.
// Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

using OSS = AlibabaCloud.OSS.V2;

var bucketName = "example-bucket";
var objectName = "example.txt";
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 Object ACL ke private.
    // Nilai yang valid: "private", "public-read", "public-read-write", "default".
    var putResult = await client.PutObjectAclAsync(new OSS.Models.PutObjectAclRequest()
    {
        Bucket = bucketName,
        Key = objectName,
        Acl = "private"
    });
    Console.WriteLine($"Berhasil mengatur Object ACL. RequestId: {putResult.RequestId}");

    // Dapatkan Object ACL.
    var getResult = await client.GetObjectAclAsync(new OSS.Models.GetObjectAclRequest()
    {
        Bucket = bucketName,
        Key = objectName
    });
    Console.WriteLine($"Object 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 suatu objek.
// Sebelum menjalankan contoh ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

const OSS = require('ali-oss');

async function main() {
    const bucketName = 'example-bucket';
    const objectName = 'example.txt';

    const client = new OSS({
        region: 'oss-<region-id>',
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        bucket: bucketName,
        authorizationV4: true,
    });

    try {
        // Atur Object ACL ke private.
        // Nilai yang valid: 'private', 'public-read', 'public-read-write', 'default'.
        await client.putACL(objectName, 'private');
        console.log('Berhasil mengatur Object ACL.');

        // Dapatkan Object ACL.
        const result = await client.getACL(objectName);
        console.log(`Object ACL saat ini: ${result.acl}`);
    } catch (err) {
        console.error('Operasi gagal:', err.message);
    }
}

main();

FAQ

Bagaimana cara berbagi objek private secara sementara dengan pengguna lain?

Buat presigned URL untuk memberikan akses sementara ke objek private selama periode tertentu tanpa mengubah ACL-nya.

Referensi

  • Untuk skenario yang memerlukan kustomisasi tingkat tinggi, Anda dapat membuat permintaan REST API langsung. Perhatikan bahwa Anda harus menandatangani permintaan tersebut secara manual. Untuk detail API, lihat PutObjectACL.

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

  • Untuk memberikan izin sementara yang detail halus kepada pengguna lain, Anda dapat menggunakan Security Token Service (STS). Untuk detail lebih lanjut, lihat Akses OSS menggunakan kredensial akses sementara dari STS.