本文介绍如何设置、获取和删除指定存储空间(Bucket)的授权策略(Policy)。

背景信息

Bucket Policy是基于资源的授权策略。Bucket Policy常见的应用场景如下:

  • 向其他账号的RAM用户授权访问。

    您可以授予其他账号的RAM用户访问您的OSS资源的权限。

  • 向匿名用户授予带特定IP条件限制的访问权限。

    某些场景下,您需要向匿名用户授予带IP限制的访问策略。例如,企业内部的机密文档,只允许在企业内部访问,不允许在其他区域访问。由于企业内部人员较多,如果针对每个人配置RAM Policy,工作量非常大。此时,您可以基于Bucket Policy设置带IP限制的访问策略,从而高效方便地进行授权。

有关Bucket Policy的配置详情及场景案例,请参见使用Bucket Policy授权其他用户访问OSS资源。有关Policy语法,请参见权限策略语法和结构

设置Bucket Policy

以下代码用于设置Bucket Policy:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

//设置授权策略。
const policy = {
  Version: '1',
  Statement: [
  {
      Action: ['oss:PutObject', 'oss:GetObject'],
      Effect: 'Deny',
      Principal: ['1234567890'],
      Resource: ['acs:oss:*:1234567890:*/*']
    }
  ]
};

async function putPolicy() {
  const result = await client.putBucketPolicy('<Your Bucket Name>', policy);
  console.log(result)
}

putPolicy()

有关设置Bucket Policy详情,请参见PutBucketPolicy

获取Bucket Policy

以下代码用于获取Bucket Policy信息:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

// 获取授权策略。
async function getPolicy() {
  const result = await client.getBucketPolicy('<Your Bucket Name>');
  console.log(result.policy)
}

getPolicy()

有关获取Bucket Policy信息详情,请参见GetBucketPolicy

删除Bucket Policy

以下代码用于删除Bucket Policy:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

//删除授权策略。
async function deletePolicy() {
  const result = await client.deleteBucketPolicy('<Your Bucket Name>');
  console.log(result)
}

deletePolicy()

有关删除Bucket Policy详情,请参见DeleteBucketPolicy