管理桶访问权限
更新时间: 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 |
创桶时指定预定义访问策略
以下代码展示如何在创建桶时指定预定义访问策略:
- // 引入依赖包
- import (
- "fmt"
- "obs"
- )
- var ak = "*** Provide your Access Key ***"
- var sk = "*** Provide your Secret Key ***"
- var endpoint = "https://your-endpoint"
- // 创建ObsClient结构体
- var obsClient, _ = obs.New(ak, sk, endpoint)
- func main() {
- input := &obs.CreateBucketInput{}
- input.Bucket = "bucketname"
- // 设置桶访问权限为公共读写
- input.ACL = obs.AclPublicReadWrite
- // 创建桶
- output, err := obsClient.CreateBucket(input)
- if err == nil {
- fmt.Printf("RequestId:%s\n", output.RequestId)
- } else if obsError, ok := err.(obs.ObsError); ok {
- fmt.Printf("Code:%s\n", obsError.Code)
- fmt.Printf("Message:%s\n", obsError.Message)
- }
- }
为桶设置预定义访问策略
以下代码展示如何为桶设置预定义访问策略:
- // 引入依赖包
- import (
- "fmt"
- "obs"
- )
- var ak = "*** Provide your Access Key ***"
- var sk = "*** Provide your Secret Key ***"
- var endpoint = "https://your-endpoint"
- // 创建ObsClient结构体
- var obsClient, _ = obs.New(ak, sk, endpoint)
- func main() {
- input := &obs.SetBucketAclInput{}
- input.Bucket = "bucketname"
- // 设置桶访问权限为私有读写
- input.ACL = obs.AclPrivate
- output, err := obsClient.SetBucketAcl(input)
- if err == nil {
- fmt.Printf("RequestId:%s\n", output.RequestId)
- } else if obsError, ok := err.(obs.ObsError); ok {
- fmt.Printf("Code:%s\n", obsError.Code)
- fmt.Printf("Message:%s\n", obsError.Message)
- }
- }
直接设置桶访问权限
以下代码展示如何直接设置桶访问权限:
- // 引入依赖包
- import (
- "fmt"
- "obs"
- )
- var ak = "*** Provide your Access Key ***"
- var sk = "*** Provide your Secret Key ***"
- var endpoint = "https://your-endpoint"
- // 创建ObsClient结构体
- var obsClient, _ = obs.New(ak, sk, endpoint)
- func main() {
- input := &obs.SetBucketAclInput{}
- input.Bucket = "bucketname"
- input.Owner.ID = "ownerid"
- var grants [3]obs.Grant
- // 为所有用户设置读权限
- grants[0].Grantee.Type = obs.GranteeGroup
- grants[0].Grantee.URI = obs.GroupAllUsers
- grants[0].Permission = obs.PermissionRead
- // 为指定用户设置读写权限
- grants[1].Grantee.Type = obs.GranteeUser
- grants[1].Grantee.ID = "granteeid"
- grants[1].Permission = obs.PermissionWrite
- grants[2].Grantee.Type = obs.GranteeUser
- grants[2].Grantee.ID = "granteeid"
- grants[2].Permission = obs.PermissionRead
- input.Grants = grants[0:3]
- output, err := obsClient.SetBucketAcl(input)
- if err == nil {
- fmt.Printf("RequestId:%s\n", output.RequestId)
- } else if obsError, ok := err.(obs.ObsError); ok {
- fmt.Printf("Code:%s\n", obsError.Code)
- fmt.Printf("Message:%s\n", obsError.Message)
- }
- }
说明:
所有者ID或者被授权用户ID,是指用户的账户ID,可通过OBS控制台“我的凭证”页面查看。
获取桶访问权限
您可以通过ObsClient.GetBucketAcl获取桶的访问权限。以下代码展示如何获取桶访问权限:
- // 引入依赖包
- import (
- "fmt"
- "obs"
- )
- var ak = "*** Provide your Access Key ***"
- var sk = "*** Provide your Secret Key ***"
- var endpoint = "https://your-endpoint"
- // 创建ObsClient结构体
- var obsClient, _ = obs.New(ak, sk, endpoint)
- func main() {
- output, err := obsClient.GetBucketAcl("bucketname")
- if err == nil {
- fmt.Printf("Owner.ID:%s\n", output.Owner.ID)
- for index, grant := range output.Grants {
- 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)
- }
- } else if obsError, ok := err.(obs.ObsError); ok {
- fmt.Printf("Code:%s\n", obsError.Code)
- fmt.Printf("Message:%s\n", obsError.Message)
- }
- }
父主题:管理桶