全部产品
Search
文档中心

Object Storage Service:Kelola ACL dari sebuah objek (Go SDK V2)

更新时间:Nov 09, 2025

Topik ini menjelaskan cara menggunakan Go SDK V2 untuk menetapkan dan mengambil daftar kontrol akses (ACL) dari sebuah objek.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) (cn-hangzhou) sebagai contoh. Titik akhir publik digunakan secara default. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah OSS dan titik akhir, lihat Wilayah dan titik akhir OSS.

  • Topik ini memberikan contoh cara memperoleh kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.

  • Untuk menetapkan izin akses sebuah objek, Anda harus memiliki izin oss:PutObjectAcl. Untuk mengambil izin akses sebuah objek, Anda harus memiliki izin oss:GetObjectAcl. Untuk informasi lebih lanjut, lihat Berikan kebijakan kustom kepada Pengguna RAM.

Jenis-jenis ACL

Objek mendukung empat jenis daftar kontrol akses (ACL) berikut:

Izin akses

Deskripsi

Nilai izin akses

Mewarisi dari bucket

Objek mewarisi izin akses dari bucket.

oss.ObjectACLDefault

Pribadi

Pemilik objek dan pengguna yang diberi otorisasi memiliki izin baca dan tulis pada objek. Pengguna lain tidak memiliki izin untuk melakukan operasi pada objek.

oss.ObjectACLPrivate

Baca-publik

Pemilik objek dan pengguna yang diberi otorisasi memiliki izin baca dan tulis pada objek. Pengguna lain hanya memiliki izin baca pada objek. Berhati-hatilah saat memberikan izin ini.

ObjectACLPublicRead

Baca-tulis publik

Semua pengguna memiliki izin baca dan tulis pada objek. Berhati-hatilah saat memberikan izin ini.

oss.ObjectACLPublicReadWrite

ACL objek memiliki prioritas lebih tinggi daripada ACL bucket. Sebagai contoh, jika ACL bucket adalah pribadi dan ACL objek adalah baca-tulis publik, semua pengguna memiliki izin baca dan tulis pada objek. Jika tidak ada ACL yang ditetapkan untuk objek, objek tersebut akan mewarisi ACL dari bucket.

Kode contoh

Anda dapat menggunakan kode berikut untuk menetapkan dan mengambil ACL dari sebuah objek.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menetapkan ACL objek.
	putRequest := &oss.PutObjectAclRequest{
		Bucket: oss.Ptr(bucketName),  // Nama bucket.
		Key:    oss.Ptr(objectName),  // Nama objek.
		Acl:    oss.ObjectACLPrivate, // Tetapkan ACL objek menjadi pribadi.
	}

	// Jalankan operasi untuk menetapkan ACL objek.
	putResult, err := client.PutObjectAcl(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("gagal menetapkan acl objek %v", err)
	}

	// Cetak hasil penyetelan ACL objek.
	log.Printf("hasil penyetelan acl objek:%#v\n", putResult)

	// Buat permintaan untuk mendapatkan ACL (daftar kontrol akses) objek.
	getRequest := &oss.GetObjectAclRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
	}

	// Jalankan operasi untuk mendapatkan ACL objek.
	getResult, err := client.GetObjectAcl(context.TODO(), getRequest)
	if err != nil {
		log.Fatalf("gagal mendapatkan acl objek %v", err)
	}

	// Cetak hasil pengambilan ACL objek.
	log.Printf("hasil pengambilan acl objek:%#v\n", getResult)
}

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk menetapkan ACL objek, lihat Contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang digunakan untuk menetapkan ACL objek, lihat PutObjectAcl.

  • Untuk kode contoh lengkap yang digunakan untuk mengambil ACL objek, lihat Contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang digunakan untuk mengambil ACL objek, lihat GetObjectAcl.