Object Storage Service (OSS) では、保持ポリシーによって Write Once Read Many (WORM) 保護が提供され、データの変更や削除が防止されます。リソース所有者を含むすべてのユーザーが、指定された期間、OSS バケット内のオブジェクトを変更または削除できないようにするには、バケットにデータ保持ポリシーを設定します。保持期間が終了するまでは、バケットへのオブジェクトのアップロードとバケットからのオブジェクトの読み取りのみが可能です。オブジェクトの変更や削除は、保持期間が終了した後にのみ可能になります。
注意事項
保持ポリシーを設定する前に、この機能について理解を深めておく必要があります。 詳細については、「保持ポリシー」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
バージョン管理が有効になっているバケットには、データ保持ポリシー (WORM) を設定できません。
保持ポリシーの作成
次のサンプルコードは、保持ポリシーを作成する方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# エンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。
region = "cn-hangzhou"
# yourBucketName をお使いのバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 保持ポリシーを作成し、保持期間を 1 日に設定します。
result = bucket.init_bucket_worm(1)
# 保持ポリシーの ID を照会します。
print(result.worm_id)ロックされていない保持ポリシーのキャンセル
次のサンプルコードは、ロックされていない保持ポリシーをキャンセルする方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。
region = "cn-hangzhou"
# yourBucketName をお使いのバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# ロックされていない保持ポリシーをキャンセルします。
bucket.abort_bucket_worm()保持ポリシーのロック
次のサンプルコードは、保持ポリシーをロックする方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。
region = "cn-hangzhou"
# yourBucketName をお使いのバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 保持ポリシーをロックします。
bucket.complete_bucket_worm('<yourWormId>')データ保持ポリシーの取得
次のサンプルコードは、データ保持ポリシーを取得する方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。 注: このパラメーターは署名 V4 に必要です。
region = "cn-hangzhou"
# yourBucketName をお使いのバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# データ保持ポリシーを取得します。
result = bucket.get_bucket_worm()
# データ保持ポリシーの ID を表示します。
print(result.worm_id)
# データ保持ポリシーのステータスを表示します。 ステータスは、ポリシーがロックされていない場合は "InProgress"、ロックされている場合は "Locked" です。
print(result.state)
# オブジェクトの保持期間を表示します。
print(result.retention_period_days)
# データ保持ポリシーの作成時刻を表示します。
print(result.creation_date)オブジェクトの保持期間の延長
次のサンプルコードは、ロック済みのデータ保持ポリシー内のオブジェクトの保持期間を延長する方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントに endpoint を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を指定します。 このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をお使いのバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# ロック済みのデータ保持ポリシー内のオブジェクトの保持期間を延長します。
bucket.extend_bucket_worm('<yourWormId>', 2)関連ドキュメント
データ保持ポリシーの完全なコード例については、GitHub の例をご参照ください。
データ保持ポリシーの作成の詳細については、「InitiateBucketWorm」をご参照ください。
ロックされていないデータ保持ポリシーのキャンセルの詳細については、「AbortBucketWorm」をご参照ください。
データ保持ポリシーのロックの詳細については、「CompleteBucketWorm」をご参照ください。
データ保持ポリシーの取得の詳細については、「GetBucketWorm」をご参照ください。
オブジェクトの保持期間の延長の詳細については、「ExtendBucketWorm」をご参照ください。