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

背景信息

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

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

新建合规保留策略

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建InitiateBucketWormRequest对象。
InitiateBucketWormRequest initiateBucketWormRequest = new InitiateBucketWormRequest(bucketName);
// 指定Object保护天数为1天。
initiateBucketWormRequest.setRetentionPeriodInDays(1);

// 创建合规保留策略。
InitiateBucketWormResult initiateBucketWormResult = ossClient.initiateBucketWorm(initiateBucketWormRequest);

// 查看合规保留策略Id。
String wormId = initiateBucketWormResult.getWormId();
System.out.println(wormId);

// 关闭ossClient。
ossClient.shutdown();

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

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

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 取消合规保留策略。
ossClient.abortBucketWorm(bucketName);

// 关闭ossClient。
ossClient.shutdown();

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

锁定合规保留策略

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String wormId = "<yourWormId>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 锁定合规保留策略。
ossClient.completeBucketWorm(bucketName, wormId);

// 关闭ossClient。
ossClient.shutdown();

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

获取合规保留策略

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 获取合规保留策略。
GetBucketWormResult getBucketWormResult = ossClient.getBucketWorm(bucketName);

// 查看合规保留策略Id。
System.out.println(getBucketWormResult.getWormId());
// 查看合规保留策略状态。未锁定状态下为"InProgress", 锁定状态下为"Locked"。
System.out.println(getBucketWormResult.getWormState());
// 查看Object的保护时间。
System.out.println(getBucketWormResult.getRetentionPeriodInDays());
// 查看合规保留策略的创建时间。
System.out.println(getBucketWormResult.getCreationDate());

// 关闭ossClient。
ossClient.shutdown();

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

延长Object的保留天数

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String wormId = "<yourWormId>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 延长已锁定的合规保留策略中Object的保留天数。
ossClient.extendBucketWorm(bucketName, wormId, 2);

// 关闭ossClient。
ossClient.shutdown();

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