Object Storage Service (OSS) バケットに時間ベースの保持ポリシーを設定できます。 保持ポリシーには、1 日から 70 年までの保持期間があります。 このトピックでは、保持ポリシーを作成、クエリ、ロックする方法について説明します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
サンプルコード
保持ポリシーの作成
同じバケットにバージョン管理と保持ポリシーの両方を設定することはできません。 バケットの保持ポリシーを作成する前に、そのバケットのバージョン管理が無効になっていることを確認してください。
次のコードに、保持ポリシーを作成する方法を示します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 保持ポリシーを設定するバケットの名前を指定します。
bucketName := "<yourBucketName>"
// オブジェクトの保持期間を 60 日に設定します。
result, err := client.InitiateBucketWorm(bucketName, 60)
if err != nil {
log.Fatalf("Error initiating bucket WORM: %v", err)
}
log.Println("WORM policy initiated successfully:", result)
}
ロックされていない保持ポリシーのキャンセル
次のコードに、ロックされていない保持ポリシーをキャンセルする方法を示します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 保持ポリシーをキャンセルするバケットの名前を指定します。
bucketName := "<yourBucketName>"
// 保持ポリシーをキャンセルします。
err = client.AbortBucketWorm(bucketName)
if err != nil {
log.Fatalf("Error aborting bucket WORM: %v", err)
}
log.Println("Bucket WORM policy aborted successfully")
}
保持ポリシーのロック
次のコードに、保持ポリシーをロックする方法を示します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 保持ポリシーをロックするバケットの名前を指定します。
bucketName := "<yourBucketName>"
// 現在の WORM 構成を取得します。
wormConfig, err := client.GetBucketWorm(bucketName)
if err != nil {
log.Fatalf("Error getting bucket WORM configuration: %v", err)
}
// 保持ポリシーをロックします。
err = client.CompleteBucketWorm(bucketName, wormConfig.WormId)
if err != nil {
log.Fatalf("Error completing bucket WORM: %v", err)
}
log.Println("Bucket WORM policy locked successfully")
}
保持ポリシーの取得
次のコードに、保持ポリシーの構成を取得する方法を示します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 保持ポリシー構成を取得するバケットの名前を指定します。
bucketName := "<yourBucketName>"
// 保持ポリシー構成を取得します。
wormConfig, err := client.GetBucketWorm(bucketName)
if err != nil {
log.Fatalf("Error getting bucket WORM configuration: %v", err)
}
// 保持ポリシー ID を表示します。
log.Printf("WORM Policy ID: %d", wormConfig.WormId)
// 保持ポリシーの作成時刻を表示します。
log.Printf("Creation Date: %s", wormConfig.CreationDate)
// 保持ポリシーのステータスを表示します。 ポリシーがロックされていない場合、ステータスは "InProgress" で、ポリシーがロックされている場合は "Locked" です。
log.Printf("State: %s", wormConfig.State)
// オブジェクトの保持期間を日数で表示します。
log.Printf("Retention Period (days): %d", wormConfig.RetentionPeriodInDays)
}
オブジェクトの保持期間の延長
次のコードに、ロックされた保持ポリシー内のオブジェクトの保持期間を延長する方法を示します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 保持期間を延長するオブジェクトを含むバケットの名前を指定します。
bucketName := "<yourBucketName>"
// 現在の WORM 構成を取得します。
wormConfig, err := client.GetBucketWorm(bucketName)
if err != nil {
log.Fatalf("Error getting bucket WORM configuration: %v", err)
}
// ロックされた保持ポリシー内のオブジェクトの保持期間を 30 日に延長します。
err = client.ExtendBucketWorm(bucketName, 30, wormConfig.WormId)
if err != nil {
log.Fatalf("Error extending bucket WORM: %v", err)
}
log.Println("Bucket WORM protection period extended successfully")
}
関連ドキュメント
保持ポリシーの完全なサンプルコードについては、「GitHub の例」をご参照ください。
保持ポリシーの作成方法の詳細については、「InitiateBucketWorm」をご参照ください。
ロックされていない保持ポリシーをキャンセルする方法の詳細については、「AbortBucketWorm」をご参照ください。
保持ポリシーをロックする方法の詳細については、「CompleteBucketWorm」をご参照ください。
保持ポリシーの構成を取得する方法の詳細については、「GetBucketWorm」をご参照ください。
オブジェクトの保持期間を延長する方法の詳細については、「ExtendBucketWorm」をご参照ください。