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 izinoss: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(®ion, "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.