您可以通过 TOS SDK 提供的接口设置桶 ACL。权限设置可以通过请求头和请求体两种方式。
访问权限 | 描述 | 枚举类型 |
---|---|---|
READ | 允许被授权者列出桶中的对象,分片任务。 | PermissionType*.*PermissionRead |
WRITE | 允许被授权者创建、覆盖和删除桶中的任意对象,初始化分片任务,上传分片,合并分片,取消分片任务。 | PermissionType.PermissionWrite |
READ_ACP | 允许被授权者读取存储桶 ACL。 | PermissionType.PermissionReadAcp |
WRITE_ACP | 允许被授权者为适用的存储桶设置 ACL。 | PermissionType.PermissionWriteAcp |
FULL_CONTROL | 允许被授权者在存储桶上的 READ、WRITE、READ_ACP 和 WRITE_ACP 权限。 | PermissionType.PermissionFullControl |
注意
设置桶的 ACL 权限前,您必须具有 tos:PutBucketACL
权限,或具有 WRITE_ACP
桶 ACL 权限。具体操作,请参见权限配置指南。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError, GranteeType, PermissionType } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { requestId: putAclRequestId } = await client.putBucketAcl({ bucket: bucketName, aclBody: { Owner: { // 获取 Bucket Owner ID ID: 'ownerid', }, Grants: [ { Grantee: { ID: 'userId', Type: GranteeType.GranteeUser, }, Permission: PermissionType.PermissionWrite, }, ], }, }); console.log('putBucketAcl Request ID: ', putAclRequestId); const { data, requestId: getAclRequestId } = await client.getBucketAcl(bucketName); console.log('getBucketAcl Request ID: ', getAclRequestId); console.log('getBucketAcl Owner:', data.Owner); for (const grant of data.Grants) { // 授予者所拥有的 Bucket 权限 console.log('Grant Permission:', grant.Permission); // 当 Type 为 CanonicalUser 时,表示权限授予者的 ID console.log('Grant Grantee ID', grant.Grantee.ID); // 权限被授予者的名称 console.log('Grant Grantee DisplayName', grant.Grantee.DisplayName); // 被授权的用户组 console.log('Grant Grantee Canned', grant.Grantee.Canned); // 权限授予者的类型 console.log('Grant Grantee Type', grant.Grantee.Type); } } catch (error) { handleError(error); } } main();
注意
设置桶的 ACL 权限前,您必须具有 tos:PutBucketACL
权限,或具有 WRITE_ACP
桶 ACL 权限。具体操作,请参见权限配置指南。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError, ACLType } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { requestId: putAclRequestId } = await client.putBucketAcl({ bucket: bucketName, acl: ACLType.ACLPrivate, }); console.log('putBucketAcl Request ID: ', putAclRequestId); } catch (error) { handleError(error); } } main();
注意
获取桶的访问权限前,您必须具有 tos:GetBucketACL
权限,或具有 READ_ACP
桶 ACL 权限。具体操作,请参见权限配置指南。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { data, requestId: getAclRequestId } = await client.getBucketAcl(bucketName); console.log('getBucketAcl Request ID: ', getAclRequestId); console.log('getBucketAcl Owner:', data.Owner); for (const grant of data.Grants) { // 授予者所拥有的 Bucket 权限 console.log('Grant Permission:', grant.Permission); // 当 Type 为 CanonicalUser 时,表示权限授予者的 ID console.log('Grant Grantee ID', grant.Grantee.ID); // 权限被授予者的名称 console.log('Grant Grantee DisplayName', grant.Grantee.DisplayName); // 被授权的用户组 console.log('Grant Grantee Canned', grant.Grantee.Canned); // 权限授予者的类型 console.log('Grant Grantee Type', grant.Grantee.Type); } } catch (error) { handleError(error); } } main();
管理桶的权限,请参见桶 ACLs。