すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Go 2.0 を使用した保持ポリシーの管理

最終更新日:Mar 21, 2026

OSS SDK for Go 2.0 を使用して、バケットに対して時刻ベースの保持ポリシー(WORM)を作成、ロック、照会、および管理します。保持期間は 1 日から 70 年まで設定可能です。

注意事項

  • サンプルコードでは、中国 (杭州) リージョンのリージョン ID cn-hangzhou を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。同一リージョン内の他の Alibaba Cloud サービスからリソースにアクセスする場合は、内部エンドポイントをご利用ください。詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • サンプルコード内のアクセス認証情報は、環境変数から読み込まれます。設定手順については、「アクセス認証情報の設定」をご参照ください。

API まとめ

操作メソッド州(必須)
保持ポリシーの作成InitiateBucketWorm
保持ポリシーのキャンセルAbortBucketWormInProgress
保持ポリシーのロックCompleteBucketWormInProgress
保持ポリシーの照会GetBucketWorm任意
保持期間の延長ExtendBucketWormLocked

保持ポリシーの作成

InitiateBucketWorm を呼び出して、バケットに対して時刻ベースの保持ポリシーを作成します。応答には、後続のロックおよび延長操作で必要となる WormId が含まれます。

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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョンを指定します。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名を指定します。")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名は必須です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンは必須です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.InitiateBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		InitiateWormConfiguration: &oss.InitiateWormConfiguration{
			RetentionPeriodInDays: oss.Ptr(int32(30)), // 保持期間を 30 日に設定します。
		},
	}

	result, err := client.InitiateBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットの WORM ポリシー作成に失敗しました:%v", err)
	}

	// このポリシーをロックまたは延長するには、result.WormId が必要です。
	log.Printf("バケットの WORM ポリシー作成結果:%#v\n", result)
}

保持ポリシーのキャンセル

キャンセル可能なのは、InProgress(アンロック)状態のポリシーのみです。AbortBucketWorm を呼び出して削除します。

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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	var (
		wormId = "worm id" // InitiateBucketWorm が返す Worm ID に置き換えてください。
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名が必要です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンが必要です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// ポリシーは、ロックする前に進行中状態である必要があります。
	request := &oss.CompleteBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
	}

	result, err := client.CompleteBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットのワームの完了に失敗しました:%v", err)
	}

	log.Printf("バケットのワームの完了結果:%#v\n", result)
}

保持ポリシーのロック

ポリシーをロックすると、その内容は永続的に不変となり、その後のキャンセルや保持期間の短縮ができなくなります。ロック可能なのは、InProgress 状態のポリシーのみです。wormId は、InitiateBucketWorm の応答(result.WormId)から取得してください。

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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョンを指定します。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名を指定します。")
}

func main() {
	var (
		wormId = "worm id" // InitiateBucketWorm の応答で返された WormId に置き換えてください。
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名は必須です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンは必須です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// ロックするには、ポリシーが InProgress 状態である必要があります。
	request := &oss.CompleteBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
	}

	result, err := client.CompleteBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットの WORM ポリシー完了(ロック)に失敗しました:%v", err)
	}

	log.Printf("バケットの WORM ポリシー完了(ロック)結果:%#v\n", result)
}

保持ポリシーの照会

GetBucketWorm を呼び出して、バケットの現在の保持ポリシーの構成およびステータスを取得します。

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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョンを指定します。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名を指定します。")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名は必須です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンは必須です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.GetBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.GetBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットの WORM ポリシー取得に失敗しました:%v", err)
	}

	log.Printf("バケットの WORM ポリシー取得結果:%#v\n", result)
}

保持期間の延長

ポリシーがロックされた後は、保持期間を延長することはできますが、短縮することはできません。ExtendBucketWorm を呼び出し、現在の保持期間より長い新しい RetentionPeriodInDays 値を指定します。wormId は、InitiateBucketWorm の応答(result.WormId)から取得してください。

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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョンを指定します。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名を指定します。")
}

func main() {
	var (
		wormId = "worm id" // InitiateBucketWorm の応答で返された WormId に置き換えてください。
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名は必須です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンは必須です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// ポリシーは Locked 状態である必要があります。また、新しい保持期間は現在の保持期間より長くなければなりません。
	request := &oss.ExtendBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
		ExtendWormConfiguration: &oss.ExtendWormConfiguration{
			RetentionPeriodInDays: oss.Ptr(int32(30)), // 保持期間を 30 日に延長します。
		},
	}

	result, err := client.ExtendBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットの WORM ポリシー延長に失敗しました:%v", err)
	}

	log.Printf("バケットの WORM ポリシー延長結果:%#v\n", result)
}

参考資料