对象存储OSS允许针对存储空间(Bucket)设置基于时间的合规保留策略,保护周期为1天到70年。本文介绍如何新建、获取、锁定合规保留策略等。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
示例代码
新建合规保留策略
重要
同一Bucket中,版本控制与合规保留策略无法同时配置。因此,当您需要为Bucket新建合规保留策略前,请确保此Bucket未开启版本控制。
您可以使用以下代码新建合规保留策略:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建初始化存储空间合规保留策略的请求
request := &oss.InitiateBucketWormRequest{
Bucket: oss.Ptr(bucketName), // 填写待配置合规保留策略的bucket名称
InitiateWormConfiguration: &oss.InitiateWormConfiguration{
RetentionPeriodInDays: oss.Ptr(int32(30)), // 指定object保护天数为30天
},
}
// 执行初始化存储空间合规保留策略的操作并处理结果
result, err := client.InitiateBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to initiate bucket worm %v", err)
}
// 打印初始化存储空间合规保留策略的结果
log.Printf("initiate bucket worm result:%#v\n", result)
}
取消未锁定的合规保留策略
您可以使用以下代码取消未锁定的合规保留策略:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init 初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 配置OSS客户端
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建取消合规保留策略的请求
request := &oss.AbortBucketWormRequest{
Bucket: oss.Ptr(bucketName),
}
// 取消合规保留策略并处理结果
result, err := client.AbortBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to abort bucket worm %v", err)
}
log.Printf("abort bucket worm result:%#v\n", result)
}
锁定合规保留策略
您可以使用以下代码锁定合规保留策略:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string
bucketName string
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
var (
wormId = "worm id" // wormId 用于标识Worm任务的 ID
)
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 使用配置创建 OSS 客户端
client := oss.NewClient(cfg)
// 创建完成合规保留策略的请求
request := &oss.CompleteBucketWormRequest{
Bucket: oss.Ptr(bucketName),
WormId: oss.Ptr(wormId),
}
// 调用客户端的CompleteBucketWorm方法完成合规保留策略
result, err := client.CompleteBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to complete bucket worm %v", err)
}
log.Printf("complete bucket worm result:%#v\n", result)
}
获取合规保留策略
您可以使用以下代码获取合规保留策略配置信息:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
// 主函数
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建获取存储空间合规保留策略配置的请求
request := &oss.GetBucketWormRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行获取存储空间合规保留策略配置的操作并处理结果
result, err := client.GetBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket worm %v", err)
}
// 打印获取存储空间合规保留策略配置的结果
log.Printf("get bucket worm result:%#v\n", result)
}
延长Object的保护天数
以下代码用于延长已锁定的合规保留策略中Object的保护天数:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
var (
wormId = "worm id" // wormId 用于标识Worm任务的ID
)
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建延长合规保留策略配置的请求
request := &oss.ExtendBucketWormRequest{
Bucket: oss.Ptr(bucketName),
WormId: oss.Ptr(wormId),
ExtendWormConfiguration: &oss.ExtendWormConfiguration{
RetentionPeriodInDays: oss.Ptr(int32(30)), // 延长已锁定的合规保留策略中object的保护天数为30天
},
}
// 执行延长合规保留策略配置的操作并处理结果
result, err := client.ExtendBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to extend bucket worm %v", err)
}
// 打印延长合规保留策略配置的结果
log.Printf("extend bucket worm result:%#v\n", result)
}
相关文档
关于新建合规保留策略的更多信息,请参见InitiateBucketWorm。
关于取消未锁定的合规保留策略的更多信息,请参见AbortBucketWorm。
关于锁定合规保留策略的更多信息,请参见CompleteBucketWorm。
关于获取合规保留策略配置的更多信息,请参见GetBucketWorm。
关于延长Object保留天数的更多信息,请参见ExtendBucketWorm。
文档内容是否对您有帮助?