本文介绍如何管理存储空间(Bucket)和对象(Object)的访问权限。

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

管理 Bucket 访问权限

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

  • 公共读写(public-read-write):任何人(包括匿名访问者)都可以对该存储空间内文件进行读写操作。
  • 公共读(public-read):任何人(包括匿名访问者)都可以对该存储空间中的文件进行读操作,只有该存储空间的拥有者才可以对该存储空间内的文件进行写操作。
  • 私有(private) :只有该存储空间的拥有者可以对该存储空间内的文件进行读写操作,其他人无法访问该存储空间内的文件。

创建 Bucket 时,默认是 private 权限。创建 Bucket 后您可以通过 putBucketACL 来设置 Bucket 的权限,还可以通过 getBucketACL 来获取 Bucket 的权限。

let OSS = require('ali-oss')
let client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
async function bucketACL () {
  try {
     let result = await client.getBucketACL('bucket-name');
     console.log(result);
     let result = await client.putBucketACL('bucket-name', 'acl');
     console.log(result);
  } catch (e) {
    console.log(e);
  }
}

bucketACL();

管理 Object 访问权限

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

  • 继承 Bucket:单个文件的读写权限按 Bucket 的读写权限为准。
    说明 如果不设置文件 ACL,则默认值为 继承 Bucket
  • 其他三种权限,如公共读写(public-read-write)公共读(public-read)私有(private) 与 Bucket 访问权限相同。

创建 Object 时,默认为继承 Bucket 权限。之后您可以通过 putACL 来设置 Object 的权限。

let OSS = require('ali-oss')
let client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
async function bucketACL () {
  try {
     let result = await client.getACL('my-object');
     console.log(result.acl); // default
     await client.putACL('my-object', 'public-read');
     result = await client.getACL('my-object');
     console.log(result.acl); // public-read
  } catch (e) {
    console.log(e);
  }
}
注意
  • 如果没有设置 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
    

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