管理桶访问权限
桶访问权限(ACL)可以通过三种方式设置:
- 创建桶时指定预定义访问策略。
- 调用ObsClient.setBucketAcl指定预定义访问策略。
- 调用ObsClient.setBucketAcl直接设置。
OBS支持的桶或对象权限包含五类,见下表:
权限 |
描述 |
OBS Node.js SDK对应值 |
---|---|---|
读权限 |
如果有桶的读权限,则可以获取该桶内对象列表和桶的元数据。 如果有对象的读权限,则可以获取该对象内容和元数据。 |
ObsClient.enums.PermissionRead |
写权限 |
如果有桶的写权限,则可以上传、覆盖和删除该桶内任何对象。 此权限在对象上不适用。 |
ObsClient.enums.PermissionWrite |
读ACP权限 |
如果有读ACP的权限,则可以获取对应的桶或对象的权限控制列表(ACL)。 桶或对象的所有者永远拥有读对应桶或对象ACP的权限。 |
ObsClient.enums.PermissionReadAcp |
写ACP权限 |
如果有写ACP的权限,则可以更新对应桶或对象的权限控制列表(ACL)。 桶或对象的所有者永远拥有写对应桶或对象的ACP的权限。 拥有了写ACP的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。 |
ObsClient.enums.PermissionWriteAcp |
完全控制权限 |
如果有桶的完全控制权限意味着拥有读权限、写权限、读ACP权限和写ACP权限的权限。 如果有对象的完全控制权限意味着拥有读权限、读ACP权限和写ACP权限的权限 |
ObsClient.enums.PermissionFullControl |
OBS预定义的访问策略包含五类,见下表:
权限 |
描述 |
OBS Node.js SDK对应值 |
---|---|---|
私有读写 |
桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。 |
ObsClient.enums.AclPrivate |
公共读 |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 设在对象上,所有人可以获取该对象内容和元数据。 |
ObsClient.enums.AclPublicRead |
公共读写 |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据。 |
ObsClient.enums.AclPublicReadWrite |
桶公共读,桶内对象公共读 |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,可以获取该桶内对象的内容和元数据。 不能应用于对象。 |
ObsClient.enums.AclPublicReadDelivered |
桶公共读写,桶内对象公共读写 |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。 不能应用于对象。 |
ObsClient.enums.AclPublicReadWriteDelivered |
创桶时指定预定义访问策略
以下代码展示如何在创建桶时指定预定义访问策略:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); // 创建桶 obsClient.createBucket({ Bucket : 'bucketname', // 设置桶访问权限为公共读写 ACL : obsClient.enums.AclPublicReadWrite }, (err, result) => { if(err){ console.error('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
为桶设置预定义访问策略
以下代码展示如何为桶设置预定义访问策略:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); // 用预定义访问策略设置桶权限 obsClient.setBucketAcl({ Bucket : 'bucketname', // 设置桶访问权限为私有读写 ACL : obsClient.enums.AclPrivate }, (err, result) => { if(err){ console.error('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用ACL参数指定桶的访问权限。
直接设置桶访问权限
以下代码展示如何直接设置桶访问权限:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); // 直接设置桶访问权限 obsClient.setBucketAcl({ Bucket : 'bucketname', // 设置桶所有者 Owner:{'ID':'ownerid'}, Grants:[ // 为指定用户设置完全控制权限 { Grantee : {Type : 'CanonicalUser',ID : 'userid'}, Permission : obsClient.enums.PermissionFullControl}, // 为所有用户设置读权限 { Grantee : {Type : 'Group',URI : obsClient.enums.GroupAllUsers}, Permission : obsClient.enums.PermissionRead} ] }, (err, result) => { if(err){ console.error('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
- 使用Owner参数指定桶的所有者信息;使用Grants参数指定被授权的用户信息。
- ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的账户ID,可通过OBS控制台“我的凭证”页面查看。
- 当前OBS桶支持的可被授权的用户组为:
- 所有用户:ObsClient.enums.GroupAllUsers
获取桶访问权限
您可以通过ObsClient.getBucketAcl获取桶的访问权限。以下代码展示如何获取桶访问权限:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); obsClient.getBucketAcl({ Bucket : 'bucketname', }, (err, result) => { if(err){ console.error('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); if(result.CommonMsg.Status < 300 && result.InterfaceResult){ console.log('RequestId-->' + result.InterfaceResult.RequestId); console.log('Owner[ID]-->' + result.InterfaceResult.Owner.ID); console.log('Grants:'); for(let i=0;i<result.InterfaceResult.Grants.length;i++){ console.log('Grant[' + i + ']:'); console.log('Grantee[ID]-->' + result.InterfaceResult.Grants[i]['Grantee']['ID']); console.log('Grantee[URI]-->' + result.InterfaceResult.Grants[i]['Grantee']['URI']); console.log('Permission-->' + result.InterfaceResult.Grants[i]['Permission']); } } } });