OSS允许对Bucket和Object分别设置访问权限,方便您控制资源访问的方式。

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

Bucket访问权限

对于Bucket,有三种访问权限:

  • Public-read-write:允许匿名用户对该存储空间内文件进行读写操作。
  • Public-read:允许匿名用户对该存储空间内文件进行读操作。
  • Private:不允许匿名访问,所有的访问都要经过签名。

创建Bucket时,默认是private权限。之后您可以通过puts bucket.acl来设置Bucket的权限。

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  endpoint: 'endpoint',
  access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')

bucket = client.get_bucket('my-bucket')
puts bucket.acl

Object访问权限

对于Object,有四种访问权限:

  • default:继承所属的Bucket的访问权限,即与所属Bucket的访问权限一样。
  • public-read-write:允许匿名用户读写该Object。
  • public-read:允许匿名用户读该Object。
  • private:不允许匿名访问,所有的访问都要经过签名。
创建Object时,默认为default权限。之后您可以通过 bucket.set_object_acl来设置Object的权限。
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  endpoint: 'endpoint',
  access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')

bucket = client.get_bucket('my-bucket')

acl = bucket.get_object_acl('my-object')
puts acl # default
bucket.set_object_acl('my-object', Aliyun::OSS::ACL::PUBLIC_READ)
acl = bucket.get_object_acl('my-object')
puts acl # public-read
注意
  • 如果没有设置Object的权限,即Object的ACL为继承Bucket,此时Object的权限和Bucket权限一致。
  • 如果Object的权限为继承Bucket以外的三种权限时,访问该Object进行权限认证时会优先判断Object的权限,此时Bucket的权限设置会被忽略。
  • 允许匿名访问时(设置了public-read或者public-read-write权限),您可以直接通过浏览器访问,例如http://bucket-name.oss-cn-hangzhou.aliyuncs.com/object.jpg
  • 访问具有public-read或者public-read-write权限的Bucket或Object时,也可以通过创建匿名的Client来进行:
    require 'aliyun/oss'
    
        # 不填access_key_id和access_key_secret,将创建匿名Client,只能访问具有
        # public权限的Bucket/Object
        client = Aliyun::OSS::Client.new(endpoint: 'endpoint')
        bucket = client.get_bucket('my-bucket')
    
        bucket.get_object('my-object', :file => 'local_file')