设置对象访问权限

与桶访问权限类似,对象访问权限同样具有 Canned Accesss Control List 与 Access Control List 两种。需要注意的是,对象的访问优先级要高于桶访问权限。比如桶访问权限是 private,但是对象访问权限是 public-read ,则所有用户都可以访问该对象。默认情况下,只有对象的拥有者才能访问该对象,即对象的访问权限默认是 private。

  • Canned Accesss Control List

Canned Accesss Control List 实际上是包含了一组预定义的被授权人和权限。Canned Accesss Control List 格式的对象访问权限包含了以下几种:

权限 Ruby SDK对应值
私有读写 private
公共读私有写 public-read
公共读写 public-read-write
注册用户可读 authenticated-read

使用 Canned Accesss Control List 设置对象的访问权限示例代码如下:

def put_object_acl1(client, bucket_name, object_key, canned_acl)
  client.put_object_acl(
    bucket: bucket_name,
    key: object_key,
    acl: canned_acl
  )
  puts 'Object ACL set.'
rescue StandardError => e
  puts "Error setting object ACL: #{e.message}"
end
  • Access Control List

使用 Access Control List 设置对象访问权限时,可以设置特定用户对象的访问权限。对象的 Access Control List 权限如下表:

权限 Ruby SDK对应的参数
可读,可列出桶下的对象。 grant_read
可写,可创建/删除/覆盖写该桶下的对象。 grant_write
可读取桶的acl规则。 grant_read_acp
可修改桶的acl规则。 grant_write_acp
完全权限。拥有以上所有权限。 grant_full_control

使用 Accesss Control List 设置对象的权限示例代码如下:

def put_object_acl2(client, bucket_name, object_key)
  client.put_object_acl(
    bucket: bucket_name,
    key: object_key,
    grant_full_control: 'id=test-user-id' # 开启id为test-user-id的用户的完全控制权限
  )
  puts 'Object ACL set.'
rescue StandardError => e
  puts "Error setting object ACL: #{e.message}"
end