全部产品
Search
文档中心

Object Storage Service:Object ACL

更新时间:Jan 29, 2026

Daftar kontrol akses (ACL) objek adalah fitur Object Storage Service (OSS) yang mengontrol akses di tingkat objek. Anda dapat menggunakan Object ACL untuk menetapkan izin baca/tulis spesifik pada satu objek tertentu, terlepas dari izin bucket-nya.

Cara kerja

Object ACL mengontrol akses ke objek individual menggunakan izin yang telah ditentukan. OSS mendukung empat jenis izin:

Nilai izin

Deskripsi

default

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

private

Private. Hanya pemilik objek atau pengguna yang berwenang yang dapat membaca atau menulis objek tersebut. Pengguna lain tidak dapat mengaksesnya.

public-read

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

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. Saat ACL objek diatur ke nilai selain default, sistem akan menerapkan kontrol akses berdasarkan Object ACL tersebut. Misalnya, jika ACL objek diatur ke public-read, objek tersebut dapat diakses secara anonim, terlepas dari ACL bucket-nya.

Penting
  • public-read-write: Setiap pengguna di Internet dapat mengakses dan menulis objek tersebut. Hal ini dapat menyebabkan kebocoran data, peningkatan biaya, atau penulisan informasi berbahaya atau ilegal. Jangan konfigurasi izin ini kecuali untuk skenario tertentu.

  • public-read: Setiap pengguna di Internet dapat mengakses objek tersebut. Hal ini dapat menyebabkan kebocoran data dan peningkatan biaya. Gunakan izin ini dengan hati-hati.

Atur Object ACL

Saat Anda membuat bucket, fitur Block Public Access diaktifkan secara default. Object ACL hanya dapat diatur 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 file objek, klik Details, lalu klik Set ACL.

  3. Atur ACL (Access Control List) sesuai kebutuhan, lalu klik OK.

antarmuka baris perintah ossutil

Anda dapat menggunakan perintah put-object-acl dari ossutil V2.0 untuk mengatur Object ACL.

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

SDK

Kode berikut memberikan contoh cara mengatur Object ACL menggunakan SDK umum. Untuk contoh kode SDK lainnya, lihat Referensi SDK.

// Contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk suatu objek.
// Sebelum memulai, 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 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", dan "default".
            PutObjectAclRequest putRequest = PutObjectAclRequest.newBuilder()
                    .bucket(bucketName)
                    .key(objectName)
                    .objectAcl("private")
                    .build();
            PutObjectAclResult putResult = client.putObjectAcl(putRequest);
            System.out.println("Object ACL berhasil diatur. 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 memulai, 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"
    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", dan "default".
    put_result = client.put_object_acl(oss.PutObjectAclRequest(
        bucket=bucket_name,
        key=object_name,
        acl="private"
    ))
    print(f"Object ACL berhasil diatur. 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 memulai, 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"
	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, dan 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("Object ACL berhasil diatur. 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 memulai, 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';
$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, dan ObjectACLType::DEFAULT.
    $putResult = $client->putObjectAcl(new Oss\Models\PutObjectAclRequest(
        bucket: $bucketName,
        key: $objectName,
        acl: Oss\Models\ObjectACLType::PRIVATE
    ));
    printf("Object ACL berhasil diatur. 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 memulai, konfigurasikan 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", dan "default".
    var putResult = await client.PutObjectAclAsync(new OSS.Models.PutObjectAclRequest()
    {
        Bucket = bucketName,
        Key = objectName,
        Acl = "private"
    });
    Console.WriteLine($"Object ACL berhasil diatur. 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 memulai, 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 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('Object ACL berhasil diatur');

        // 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 saya berbagi objek private secara sementara dengan pengguna lain?

Anda dapat membuat signed URL dan membagikannya kepada pengguna lain. Hal ini memungkinkan mereka mengakses objek private tersebut dalam periode tertentu tanpa mengubah Object ACL-nya.

Referensi

  • Jika skenario Anda memerlukan kustomisasi ekstensif, Anda dapat langsung melakukan permintaan REST API. Perhatikan bahwa Anda harus menulis kode secara manual untuk menghitung signature saat melakukan permintaan REST API langsung. Untuk informasi selengkapnya, lihat PutObjectACL.

  • Untuk memberikan izin detail halus jangka panjang kepada pengguna lain, seperti izin read-only atau write-only pada file dengan awalan tertentu dalam sebuah bucket, Anda dapat menggunakan bucket policy atau RAM policy.

  • Untuk memberikan izin detail halus secara sementara kepada pengguna lain, Anda dapat menggunakan otorisasi temporary Security Token Service (STS). Untuk informasi selengkapnya, lihat Gunakan kredensial akses temporary STS untuk mengakses OSS.