全部產品
Search
文件中心

Object Storage Service:Go管理檔案存取權限

更新時間:Oct 29, 2024

本文介紹如何管理檔案存取權限。

注意事項

  • 本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS訪問網域名稱、資料中心、開放連接埠

  • 本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證

  • 本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化

  • 要設定Object存取權限,您必須具有oss:PutObjectAcl許可權;要擷取Object存取權限,您必須具有oss:GetObjectAcl許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

讀寫權限類型

檔案的存取權限(ACL)有以下四種:

存取權限

描述

存取權限值

繼承Bucket

檔案遵循儲存空間的存取權限。

oss.ACLDefault

私人

檔案的擁有者和授權使用者有該檔案的讀寫權限,其他使用者沒有許可權操作該檔案。

oss.ACLPrivate

公用讀取

檔案的擁有者和授權使用者有該檔案的讀寫權限,其他使用者只有檔案的讀許可權。請謹慎使用該許可權。

oss.ACLPublicRead

公用讀寫

所有使用者都有該檔案的讀寫權限。請謹慎使用該許可權。

oss.PublicReadWrite

檔案的存取權限優先順序高於儲存空間的存取權限。例如儲存空間的存取權限是私人,而檔案的存取權限是公用讀寫,則所有使用者都有該檔案的讀寫權限。如果某個檔案沒有設定過存取權限,則遵循儲存空間的存取權限。

範例程式碼

以下是設定並擷取檔案存取權限的完整代碼:

package main

import (
	"log"

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

func main() {
	// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 設定簽名版本
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// yourBucketName填寫儲存空間名稱。
	bucketName := "yourBucketName"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
	}

	// 設定檔案的存取權限。
	// yourObjectName填寫不包含Bucket名稱在內的Object的完整路徑。
	objectName := "yourObjectName"
	err = bucket.SetObjectACL(objectName, oss.ACLPublicReadWrite)
	if err != nil {
		log.Fatalf("Failed to set object ACL for '%s': %v", objectName, err)
	}

	// 擷取檔案的存取權限。
	aclRes, err := bucket.GetObjectACL(objectName)
	if err != nil {
		log.Fatalf("Failed to get object ACL for '%s': %v", objectName, err)
	}

	log.Printf("Object ACL for '%s': %s", objectName, aclRes.ACL)
}

相關文檔

  • 關於Object存取權限的完整範例程式碼,請參見GitHub樣本

  • 關於設定Object存取權限的API介面說明,請參見SetObjectACL

  • 關於擷取Object存取權限的API介面說明,請參見GetObjectACL