本文介紹如何管理文件訪問權限。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見訪問域名和數據中心。
本文以從環境變量讀取訪問憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
本文以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請按實際情況填寫。
endpoint := "yourEndpoint"
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider))
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。