All Products
Search
Document Center

Object Storage Service:Mengelola izin akses file (Go SDK V1)

Last Updated:Nov 30, 2025

Topik ini menjelaskan cara mengelola izin akses file.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasi client (Go SDK V1).

  • Untuk mengonfigurasi ACL suatu objek, Anda harus memiliki izin oss:PutObjectAcl. Untuk mengkueri ACL suatu objek, Anda harus memiliki izin oss:GetObjectAcl. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

Jenis izin baca dan tulis

Suatu objek memiliki empat jenis daftar kontrol akses (ACL):

Izin akses

Deskripsi

Nilai ACL

Inherit from bucket

Objek mewarisi ACL bucket tersebut.

oss.ACLDefault

Private

Hanya pemilik objek dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek tersebut. Pengguna lain tidak dapat mengakses objek tersebut.

oss.ACLPrivate

Public-read

Pemilik objek dan pengguna yang berwenang memiliki izin baca dan tulis pada objek tersebut. Pengguna lain hanya memiliki izin baca. Gunakan izin ini dengan hati-hati.

oss.ACLPublicRead

Public-read-write

Semua pengguna memiliki izin baca dan tulis pada objek tersebut. Gunakan izin ini dengan hati-hati.

oss.PublicReadWrite

ACL objek memiliki prioritas lebih tinggi daripada ACL bucket. Misalnya, jika ACL bucket bersifat private tetapi ACL objek di dalam bucket tersebut adalah public-read-write, maka semua pengguna memiliki izin baca dan tulis untuk objek tersebut. Jika ACL tidak dikonfigurasi untuk suatu objek, objek tersebut akan mewarisi ACL bucket-nya.

Kode contoh

Kode berikut memberikan contoh lengkap cara menyetel dan mengambil izin akses objek:

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket tersebut. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan nilai Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel nilainya ke cn-hangzhou. Untuk wilayah lain, sesuaikan nilainya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Gagal membuat client OSS: %v", err)
	}

	// Setel yourBucketName ke nama bucket tersebut.
	bucketName := "yourBucketName"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Setel ACL objek tersebut.
	// Setel yourObjectName ke path lengkap objek tersebut. Jangan sertakan nama bucket.
	objectName := "yourObjectName"
	err = bucket.SetObjectACL(objectName, oss.ACLPublicReadWrite)
	if err != nil {
		log.Fatalf("Gagal menyetel ACL objek untuk '%s': %v", objectName, err)
	}

	// Dapatkan ACL objek tersebut.
	aclRes, err := bucket.GetObjectACL(objectName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan ACL objek untuk '%s': %v", objectName, err)
	}

	log.Printf("ACL objek untuk '%s': %s", objectName, aclRes.ACL)
}

Referensi

  • Untuk kode contoh lengkap mengenai ACL objek, lihat contoh GitHub.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk menyetel ACL objek, lihat SetObjectACL.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengambil ACL objek, lihat GetObjectACL.