开发者社区 问答 正文

Go-SDK之如何实现设置访问权限?

OSS允许用户对Bucket和Object分别设置访问权限,方便用户控制自己的资源可 以被如何访问。对于Bucket,有三种访问权限:

  • public-read-write 允许匿名用户向该Bucket中创建/获取/删除Object
  • public-read 允许匿名用户获取该Bucket中的Object
  • private 不允许匿名访问,所有的访问都要经过签名

创建Bucket时,默认是private权限。之后用户可以通过Client.SetBucketACL来设置 Bucket的权限。上面三种权限分布对应Go SDK中的常量ACLPublicReadWrite、ACLPublicRead、ACLPrivate。

Bucket访问权限


提示:
  • Bucket访问权限设置的示例代码在sample/bucket_acl.go。    import "fmt"
  •     import "github.com/aliyun/aliyun-oss-go-sdk/oss"
  •     client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     // 设置Bucket ACL
  •     err = client.SetBucketACL("my-bucket", oss.ACLPublicRead)
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     // 查看Bucket ACL
  •     aclRes, err := client.GetBucketACL("my-bucket")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     fmt.Println("Bucket ACL:", aclRes.ACL)



Object访问权限


对于Object,有四种访问权限:
  • default 继承所属的Bucket的访问权限,即与所属Bucket的权限值一样
  • public-read-write 允许匿名用户读写该Object
  • public-read 允许匿名用户读该Object
  • private 不允许匿名访问,所有的访问都要经过签名

创建Object时,默认为default权限。之后用户可以通过 Bucket.SetObjectACL来设置Object的权限。上面四种权限分布对应 Go SDK中的常量ACLDefault、ACLPublicReadWrite、ACLPublicRead、ACLPrivate。

提示:
  • Object访问权限设置的示例代码在sample/object_acl.go。    import "fmt"
  •     import "github.com/aliyun/aliyun-oss-go-sdk/oss"
  •     client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     bucket, err := client.Bucket("my-bucket")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     // 设置Object的访问权限
  •     err = bucket.SetObjectACL("my-object", oss.ACLPrivate)
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     // 查看Object的访问权限
  •     aclRes, err := bucket.GetObjectACL("my-object")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     fmt.Println("Object ACL:", aclRes.ACL)


注意:
  • 如果设置了Object的权限(非default),则访问该Object时进行权限认证时 会优先判断Object的权限,而Bucket的权限设置会被忽略。
  • 允许匿名访问时(设置了public-read或者public-read-write权限),用户 可以直接通过浏览器访问,例如 :

更多关于访问权限控制的内容请参考 访问控制

展开
收起
青衫无名 2017-10-19 14:32:01 1844 分享 版权
阿里云 AI 助理回答

阿里云对象存储服务(OSS)为用户提供了灵活的访问权限控制机制,允许用户针对Bucket(存储空间)和Object(存储在Bucket中的文件)分别设置不同的访问权限,以满足不同场景下的安全需求。以下是基于您提供的信息整理的权限控制概览及操作示例:

Bucket访问权限

Bucket的访问权限分为三种: 1. public-read-write:允许匿名用户向该Bucket中上传、下载和删除Object。 2. public-read:允许匿名用户下载Bucket中的Object,但不能上传或删除。 3. private:默认权限,不允许匿名访问,所有访问请求都需要通过签名验证。

使用Go SDK设置Bucket ACL的示例代码如下:

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func setBucketACL() {
	client, err := oss.New("YourEndpoint", "YourAccessKeyId", "YourAccessKeySecret")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	err = client.SetBucketACL("my-bucket", oss.ACLPublicRead)
	if err != nil {
		fmt.Println("Error setting bucket ACL:", err)
		return
	}
	fmt.Println("Bucket ACL set to Public Read.")
}

Object访问权限

Object的访问权限比Bucket更细致,包括四种: 1. default:继承Bucket的访问权限。 2. public-read-write:允许匿名用户读写该Object。 3. public-read:允许匿名用户读取该Object。 4. private:默认权限,不允许匿名访问。

使用Go SDK设置Object ACL的示例代码如下:

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func setObjectACL() {
	client, err := oss.New("YourEndpoint", "YourAccessKeyId", "YourAccessKeySecret")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	bucket, err := client.Bucket("my-bucket")
	if err != nil {
		fmt.Println("Error getting bucket:", err)
		return
	}

	err = bucket.SetObjectACL("my-object", oss.ACLPrivate)
	if err != nil {
		fmt.Println("Error setting object ACL:", err)
		return
	}
	fmt.Println("Object ACL set to Private.")
}

注意事项

  • 如果直接设置了Object的访问权限(非default),那么在访问该Object时,将优先考虑Object的权限设置,忽略Bucket的权限。
  • 公开权限(public-read或public-read-write)意味着可以通过URL直接在浏览器中访问这些资源,无需额外的身份验证。

更多关于OSS访问控制的详细信息和最佳实践,请参考阿里云官方文档的访问控制部分。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答