管理桶访问权限

更新时间: 2019-03-14 10:05

桶访问权限(ACL)可以通过三种方式设置:

  • 创建桶时指定预定义访问策略。
  • 调用ObsClient.SetBucketAcl指定预定义访问策略。
  • 调用ObsClient.SetBucketAcl直接设置。

OBS支持的桶或对象权限包含五类,见下表:


权限

描述

OBS Go SDK枚举常量

读权限

若有桶的读权限,则可以获取该桶内对象列表和桶的元数据。

若有对象的读权限,则可以获取该对象内容和元数据。

PermissionRead

写权限

若有桶的写权限,则可以上传、覆盖和删除该桶内任何对象。

此权限在对象上不适用。

PermissionWrite

读ACP权限

若有读ACP的权限,则可以获取对应的桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有读对应桶或对象ACP的权限。

PermissionReadAcp

写ACP权限

若有写ACP的权限,则可以更新对应桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有写对应桶或对象的ACP的权限。

拥有了写ACP的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。

PermissionWriteAcp

完全控制权限

若有桶的完全控制权限意味着拥有READ、WRITE、READ_ACP和WRITE_ACP的权限。

若有对象的完全控制权限意味着拥有READ、READ_ACP和WRITE_ACP的权限。

PermissionFullControl

OBS预定义的访问策略包含五类,见下表:


权限

描述

OBS Go SDK枚举常量

私有读写

桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。

AclPrivate

公共读

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。

设在对象上,所有人可以获取该对象内容和元数据。

AclPublicRead

公共读写

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。

设在对象上,所有人可以获取该对象内容和元数据。

AclPublicReadWrite

桶公共读,桶内对象公共读

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,可以获取该桶内对象的内容和元数据。

不能应用于对象。

AclPublicReadDelivered

桶公共读写,桶内对象公共读写

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。

不能应用于对象。

AclPublicReadWriteDelivered

创桶时指定预定义访问策略

以下代码展示如何在创建桶时指定预定义访问策略:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. )
  6.  
  7. var ak = "*** Provide your Access Key ***"
  8. var sk = "*** Provide your Secret Key ***"
  9. var endpoint = "https://your-endpoint"
  10.  
  11. // 创建ObsClient结构体
  12. var obsClient, _ = obs.New(ak, sk, endpoint)
  13.  
  14. func main() {
  15. input := &obs.CreateBucketInput{}
  16. input.Bucket = "bucketname"
  17. // 设置桶访问权限为公共读写
  18. input.ACL = obs.AclPublicReadWrite
  19. // 创建桶
  20. output, err := obsClient.CreateBucket(input)
  21. if err == nil {
  22. fmt.Printf("RequestId:%s\n", output.RequestId)
  23. } else if obsError, ok := err.(obs.ObsError); ok {
  24. fmt.Printf("Code:%s\n", obsError.Code)
  25. fmt.Printf("Message:%s\n", obsError.Message)
  26. }
  27. }

为桶设置预定义访问策略

以下代码展示如何为桶设置预定义访问策略:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. )
  6.  
  7. var ak = "*** Provide your Access Key ***"
  8. var sk = "*** Provide your Secret Key ***"
  9. var endpoint = "https://your-endpoint"
  10.  
  11. // 创建ObsClient结构体
  12. var obsClient, _ = obs.New(ak, sk, endpoint)
  13.  
  14. func main() {
  15. input := &obs.SetBucketAclInput{}
  16. input.Bucket = "bucketname"
  17. // 设置桶访问权限为私有读写
  18. input.ACL = obs.AclPrivate
  19. output, err := obsClient.SetBucketAcl(input)
  20. if err == nil {
  21. fmt.Printf("RequestId:%s\n", output.RequestId)
  22. } else if obsError, ok := err.(obs.ObsError); ok {
  23. fmt.Printf("Code:%s\n", obsError.Code)
  24. fmt.Printf("Message:%s\n", obsError.Message)
  25. }
  26. }

直接设置桶访问权限

以下代码展示如何直接设置桶访问权限:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. )
  6.  
  7. var ak = "*** Provide your Access Key ***"
  8. var sk = "*** Provide your Secret Key ***"
  9. var endpoint = "https://your-endpoint"
  10.  
  11. // 创建ObsClient结构体
  12. var obsClient, _ = obs.New(ak, sk, endpoint)
  13.  
  14. func main() {
  15. input := &obs.SetBucketAclInput{}
  16. input.Bucket = "bucketname"
  17. input.Owner.ID = "ownerid"
  18. var grants [3]obs.Grant
  19.  
  20. // 为所有用户设置读权限
  21. grants[0].Grantee.Type = obs.GranteeGroup
  22. grants[0].Grantee.URI = obs.GroupAllUsers
  23. grants[0].Permission = obs.PermissionRead
  24.  
  25. // 为指定用户设置读写权限
  26. grants[1].Grantee.Type = obs.GranteeUser
  27. grants[1].Grantee.ID = "granteeid"
  28. grants[1].Permission = obs.PermissionWrite
  29. grants[2].Grantee.Type = obs.GranteeUser
  30. grants[2].Grantee.ID = "granteeid"
  31. grants[2].Permission = obs.PermissionRead
  32.  
  33. input.Grants = grants[0:3]
  34. output, err := obsClient.SetBucketAcl(input)
  35. if err == nil {
  36. fmt.Printf("RequestId:%s\n", output.RequestId)
  37. } else if obsError, ok := err.(obs.ObsError); ok {
  38. fmt.Printf("Code:%s\n", obsError.Code)
  39. fmt.Printf("Message:%s\n", obsError.Message)
  40. }
  41. }

管理桶访问权限 - 图1 说明:

所有者ID或者被授权用户ID,是指用户的账户ID,可通过OBS控制台“我的凭证”页面查看。

获取桶访问权限

您可以通过ObsClient.GetBucketAcl获取桶的访问权限。以下代码展示如何获取桶访问权限:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. )
  6.  
  7. var ak = "*** Provide your Access Key ***"
  8. var sk = "*** Provide your Secret Key ***"
  9. var endpoint = "https://your-endpoint"
  10.  
  11. // 创建ObsClient结构体
  12. var obsClient, _ = obs.New(ak, sk, endpoint)
  13.  
  14. func main() {
  15. output, err := obsClient.GetBucketAcl("bucketname")
  16. if err == nil {
  17. fmt.Printf("Owner.ID:%s\n", output.Owner.ID)
  18. for index, grant := range output.Grants {
  19. fmt.Printf("Grant[%d]-Type:%s, ID:%s, URI:%s, Permission:%s\n", index, grant.Grantee.Type, grant.Grantee.ID, grant.Grantee.URI, grant.Permission)
  20. }
  21. } else if obsError, ok := err.(obs.ObsError); ok {
  22. fmt.Printf("Code:%s\n", obsError.Code)
  23. fmt.Printf("Message:%s\n", obsError.Message)
  24. }
  25. }

父主题:管理桶