Bucket Policy是OSS提供的一种针对存储空间(Bucket)的授权策略,使您可以精细化地授权或限制有身份的访问者(阿里云账号、RAM用户、RAM角色)或匿名访问者对指定OSS资源的访问。例如,您可以为其他阿里云账号的RAM用户授予指定OSS资源的只读权限。
注意事项
- 在配置Bucket Policy之前,请确保您已了解该功能。详情请参见Bucket Policy。 
- 要设置Bucket Policy,您必须有 - oss:PutBucketPolicy权限;要获取Bucket Policy,您必须有- oss:GetBucketPolicy权限;要删除Bucket Policy,您必须有- oss:DeleteBucketPolicy权限。具体操作,请参见为RAM用户授权自定义的权限策略。
设置Bucket Policy
以下代码用于设置Bucket Policy:
const OSS = require('ali-oss')
const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写存储空间名称,例如examplebucket。
  bucket: 'examplebucket'
});
// 以下示例用于资源拥有者(即UID为174649585760xxxx的Bucket Owner)通过Bucket Policy授权指定用户(UID为20214760404935xxxx的RAM用户)拥有列举examplebucket下所有文件的权限。
const policy = {
  Version: '1',
  Statement: [
  {
      Action: ['oss:ListObjects', 'oss:GetObject'],
      Effect: 'Allow',
      Principal: ['20214760404935xxxx'],
      Resource: ['acs:oss:*:174649585760xxxx:examplebucket']
    }
  ]
};
async function putPolicy() {
  const result = await client.putBucketPolicy('examplebucket', policy);
  console.log(result)
}
putPolicy()获取Bucket Policy
以下代码用于获取Bucket Policy信息:
const OSS = require('ali-oss')
const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写存储空间名称。
  bucket: 'yourbucketname'
});
// 获取Bucket Policy配置信息。
async function getPolicy() {
  const result = await client.getBucketPolicy('yourbucketname');
  console.log(result.policy)
}
getPolicy()删除Bucket Policy
以下代码用于删除Bucket Policy:
const OSS = require('ali-oss')
const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写存储空间名称。
  bucket: 'yourbucketname'
});
// 删除Bucket Policy。
async function deletePolicy() {
  const result = await client.deleteBucketPolicy('yourbucketname');
  console.log(result)
}
deletePolicy()相关文档
- 关于Bucket Policy的完整示例代码,请参见GitHub示例。 
- 关于设置Bucket Policy的API接口说明,请参见PutBucketPolicy。 
- 关于获取Bucket Policy的API接口说明,请参见GetBucketPolicy。 
- 关于删除Bucket Policy的API接口说明,请参见DeleteBucketPolicy。 
该文章对您有帮助吗?