对象存储OSS允许针对存储空间(Bucket)设置基于时间的合规保留策略,保护周期为1天到70年。本文介绍如何新建、获取、锁定合规保留策略等。

背景信息

OSS支持WORM(Write Once Read Many)特性,允许您以不可删除、不可篡改的方式保存和使用数据。

当基于时间的合规保留策略创建24小时后未提交锁定,则该策略自动失效。当合规保留策略锁定后,您可以在Bucket中上传和读取文件(Object),但是在Object的保留时间到期之前,不允许删除Object及合规保留策略,且无法缩短策略保护周期,仅允许延长Object的保留时间。关于合规保留策略的详情,请参见保留策略

新建合规保留策略

以下代码用于新建合规保留策略。

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeyId'
});
// 创建合规保留策略。
async function initiateBucketWorm() {
 // yourbucketname填写存储空间名称。
  const bucket = 'yourbucketname'
  // 指定Object保护天数。
  const days = '<Retention Days>'
    const res = await client.initiateBucketWorm(bucket, days)
  console.log(res.wormId)
}

initiateBucketWorm()

取消未锁定的合规保留策略

以下代码用于取消未锁定的合规保留策略:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeyId'
});
// 取消合规保留策略。
async function abortBucketWorm() {
  // yourbucketname填写存储空间名称。
  const bucket = 'yourbucketname'
    try {
    await client.abortBucketWorm(bucket)
    console.log('abort success')
  } catch(err) {
        console.log('err: ', err)
    }
}

abortBucketWorm()

锁定合规保留策略

以下代码用于锁定合规保留策略。

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeyId'
});
// 锁定合规保留策略。
async function completeBucketWorm() {
  // yourbucketname填写存储空间名称。
  const bucket = 'yourbucketname'
  const wormId = 'Your Worm Id'
    try {
        await client.completeBucketWorm(bucket, wormId)
  } catch(err) {
      console.log(err)
  }
}

completeBucketWorm()

获取合规保留策略

以下代码用于获取合规保留策略。

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeyId'
});
// 获取合规保留策略。
async function getBucketWorm() {
  // yourbucketname填写存储空间名称。
  const bucket = 'yourbucketname'
    try {
        const res = await client.getBucketWorm(bucket)
    // 查看合规保留策略ID。
    console.log(res.wormId)
    // 查看合规保留策略状态。未锁定状态为"InProgress",锁定状态为"Locked"。
    console.log(res.state)
    // 查看Object的保护时间。
    console.log(res.days)
  } catch(err) {
      console.log(err)
  }
}

getBucketWorm()

延长Object的保留天数

以下代码用于延长已锁定的合规保留策略中Object的保留天数.

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeyId'
});
// 延长已锁定的合规保留策略中Object的保留天数。
async function extendBucketWorm() {
  // yourbucketname填写存储空间名称。
  const bucket = 'yourbucketname'
  const wormId = 'Your Worm Id'
  const days = 'Retention Days'
    try {
        const res = await client.extendBucketWorm(bucket, wormId, days)
    console.log(res)
  } catch(err) {
      console.log(err)
  }
}

extendBucketWorm()

相关文档

  • 关于合规保留策略的完整示例代码,请参见GitHub示例
  • 关于新建合规保留策略的API接口说明,请参见InitiateBucketWorm
  • 关于取消未锁定的合规保留策略的API接口说明,请参见AbortBucketWorm
  • 关于锁定合规保留策略的API接口说明,请参见CompleteBucketWorm
  • 关于获取合规保留策略的API接口说明,请参见GetBucketWorm
  • 关于延长Object的保留天数的API接口说明,请参见ExtendBucketWorm