对象存储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({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>'
});
// 创建合规保留策略。
async function initiateBucketWorm() {
  const bucket = '<Your Bucket Name>'
  // 指定Object保护天数。
  const days = '<Retention Days>'
	const res = await client.initiateBucketWorm(bucket, days)
  console.log(res.wormId)
}

initiateBucketWorm()

有关新建合规保留策略的详情,请参见InitiateBucketWorm

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

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

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

const client = new OSS({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>'
});
// 取消合规保留策略。
async function abortBucketWorm() {
  const bucket = '<Your Bucket Name>'
	try {
    await client.abortBucketWorm(bucket)
    console.log('abort success')
  } catch(err) {
		console.log('err: ', err)
	}
}

abortBucketWorm()

有关取消未锁定的合规保留策略的详情,请参见AbortBucketWorm

锁定合规保留策略

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

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

const client = new OSS({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>'
});
// 锁定合规保留策略。
async function completeBucketWorm() {
  const bucket = '<Your Bucket Name>'
  const wormId = '<Your Worm Id>'
	try {
		await client.completeBucketWorm(bucket, wormId)
  } catch(err) {
  	console.log(err)
  }
}

completeBucketWorm()

有关锁定合规保留策略的详情,请参见CompleteBucketWorm

获取合规保留策略

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

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

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

有关获取合规保留策略的详情,请参见GetBucketWorm

延长Object的保留天数

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

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

const client = new OSS({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>'
});
// 延长已锁定的合规保留策略中Object的保留天数。
async function extendBucketWorm() {
  const bucket = '<Your Bucket Name>'
  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()

有关延长已锁定的合规保留策略中Object的保留天数详情,请参见ExtendBucketWorm