更新时间:2024-10-11 GMT+08:00
分享

获取桶ACL(Node.js SDK)

功能介绍

OBS支持对桶操作进行权限控制,您可以为桶设置访问策略,指定某一个用户对某一个桶是否有权行使某一项指定操作。OBS权限控制的方式有IAM、桶策略和ACL三种,ACL按照粒度又分为桶ACL和对象ACL,本节将对桶ACL接口进行详细介绍,更多权限相关内容可参见《对象存储服务权限配置指南》的OBS权限控制概述章节。

桶ACL是跨账号场景的权限,设置授权的对象不是当前账号,也不是当前账号下的IAM用户,而是另一个账号及其账号下的IAM用户;授权的范围是以桶为粒度的,一条ACL策略为一个桶设置策略,因此设置ACL策略时您必须明确指定桶名;桶ACL授予的权限包括桶的访问权限和桶ACL的访问权限两个方面,桶的访问权限包括对桶及桶内对象的查看和编辑权限,桶ACL的访问权限包括对桶ACL策略的查看和编辑权限,详情可参见ACL权限控制方式介绍

调用获取桶ACL接口,您可以获取指定桶的ACL策略。

接口约束

  • 您必须是桶拥有者或拥有获取桶ACL的权限,才能获取桶ACL。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketAcl权限,如果使用桶策略则需授予GetBucketAcl权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略自定义创建桶策略
  • OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点

方法定义

ObsClient.getBucketAcl(params)

请求参数

表1 BucketRequestInput

参数名称

参数类型

是否必选

描述

Bucket

string

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

取值范围:

长度为3~63个字符。

默认取值:

返回结果

表2 返回结果

参数类型

描述

表3

说明:

该接口返回是一个Promise类型,需要使用Promise、async/await语法处理。

参数解释:

接口返回信息,详见表3

表3 Response

参数名称

参数类型

描述

CommonMsg

ICommonMsg

参数解释:

接口调用完成后的公共信息,包含HTTP状态码,操作失败的错误码等,详见ICommonMsg

InterfaceResult

表5

参数解释:

操作成功后的结果数据,详见表5

约束限制:

当Status大于300时为空。

表4 ICommonMsg

参数名称

参数类型

描述

Status

number

参数解释:

OBS服务端返回的HTTP状态码。

取值范围:

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码

Code

string

参数解释:

OBS服务端返回的错误码。

Message

string

参数解释:

OBS服务端返回的错误描述。

HostId

string

参数解释:

OBS服务端返回的请求服务端ID。

RequestId

string

参数解释:

OBS服务端返回的请求ID。

Id2

string

参数解释:

OBS服务端返回的请求ID2。

Indicator

string

参数解释:

OBS服务端返回的详细错误码。

表5 GetBucketAclOutput

参数名称

参数类型

描述

RequestId

string

参数解释:

OBS服务端返回的请求ID。

Owner

Owner

参数解释:

桶的所有者的账号ID,详见Owner

Grants

Grant[]

参数解释:

被授权用户权限信息,详见Grant

表6 Owner

参数名称

参数类型

是否必选

描述

ID

string

作为请求参数时必选

参数解释:

所有者的账号ID,即domain_id。

取值范围:

如何获取账号ID请参见如何获取账号ID和用户ID?(Node.js SDK)

默认取值:

DisplayName

string

可选

参数解释:

所有者的账号用户名。

默认取值:

表7 Grant

参数名称

参数类型

描述

Grantee

Grantee

参数解释:

被授权用户相关信息,详见Grantee

Permission

string

参数解释:

被授予的权限,详见PermissionType

表8 Grantee

参数名称

参数类型

描述

Type

string

参数解释:

被授权用户的类型,详见GranteeType

ID

string

参数解释:

被授权用户的账号ID,即domain_id。

Name

string

参数解释:

被授权用户的账号名。

URI

string

参数解释:

被授权的用户组,详见GroupUriType

表9 GranteeType

常量值

说明

Group

授权给用户组。

CanonicalUser

授权给单个用户。

表10 GroupUriType

常量名

原始值

说明

ObsClient.enums.GroupAllUsers

AllUsers

所有用户。

ObsClient.enums.GroupAuthenticatedUsers

AuthenticatedUsers

授权用户,已废弃。

ObsClient.enums.GroupLogDelivery

LogDelivery

日志投递组,已废弃。

表11 PermissionType

常量名

原始值

说明

ObsClient.enums.PermissionRead

READ

如果有桶的读权限,则可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。

如果有对象的读权限,则可以获取该对象内容和元数据。

ObsClient.enums.PermissionWrite

WRITE

如果有桶的写权限,则可以上传、覆盖和删除该桶内任何对象和段。

此权限在对象上不适用。

ObsClient.enums.PermissionReadAcp

READ_ACP

如果有读ACP的权限,则可以获取对应的桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有读对应桶或对象ACP的权限。

ObsClient.enums.PermissionWriteAcp

WRITE_ACP

如果有写ACP的权限,则可以更新对应桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有写对应桶或对象的ACP的权限。

拥有了写ACP的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。

ObsClient.enums.PermissionFullControl

FULL_CONTROL

如果有桶的完全控制权限意味着拥有PermissionRead、PermissionWrite、PermissionReadAcp和PermissionWriteAcp的权限。

如果有对象的完全控制权限意味着拥有PermissionRead、PermissionReadAcp和PermissionWriteAcp的权限。

代码示例

本示例用于获取名为examplebucket桶的ACL权限控制列表信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// 引入obs库
// 使用npm安装
const ObsClient = require("esdk-obs-nodejs");
// 使用源码安装
// var ObsClient = require('./lib/obs');

// 创建ObsClient实例
const obsClient = new ObsClient({
  // 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险
  // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
  access_key_id: process.env.ACCESS_KEY_ID,
  secret_access_key: process.env.SECRET_ACCESS_KEY,
  // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入
  // security_token: process.env.SECURITY_TOKEN,
  // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写
  server: "https://obs.cn-north-4.myhuaweicloud.com",
});

async function getBucketAcl() {
  try {
    const params = {
      // 指定存储桶名称
      Bucket: "examplebucket"
    };
    // 获取桶ACL
    const result = await obsClient.getBucketAcl(params);
    if (result.CommonMsg.Status <= 300) {
      console.log("Get bucket(%s)'s acl rules successful!", params.Bucket);
      console.log('RequestId: %s', result.InterfaceResult.RequestId);
      console.log('Owner[ID]: %s', result.InterfaceResult.Owner.ID);
      console.log('Grants:');
      for (let i = 0; i < result.InterfaceResult.Grants.length; i++) {
        const grant = result.InterfaceResult.Grants[i];
        console.log("Grant[%d]-Type:%s, ID:%s, URI:%s, Permission:%s",
          i, grant.Grantee.Type, grant.Grantee.ID, grant.Grantee.URI, grant.Permission
        );
      };
      return;
    };
    console.log("An ObsError was found, which means your request sent to OBS was rejected with an error response.");
    console.log("Status: %d", result.CommonMsg.Status);
    console.log("Code: %s", result.CommonMsg.Code);
    console.log("Message: %s", result.CommonMsg.Message);
    console.log("RequestId: %s", result.CommonMsg.RequestId);
  } catch (error) {
    console.log("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.");
    console.log(error);
  };
};

getBucketAcl();

相关链接

相关文档