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

Object Storage Service:保持ポリシー

最終更新日:Mar 21, 2026

OSS Python SDK v2 を使用して、バケット上の WORM (write-once-read-many) コンプライアンス保持ポリシーを管理します。保持ポリシーは、1 日から 70 年の範囲で設定できる保持期間中、オブジェクトの不変性を強制します。

このトピックでは、保持ポリシーの作成、クエリ、ロック、延長、キャンセルの 5 つの操作について説明します。

注意事項

すべての例では、中国 (杭州) リージョンを使用します。デフォルトでは、クライアントはパブリックエンドポイントを使用して接続します。同じリージョン内の別の Alibaba Cloud サービスから OSS にアクセスするには、cfg.endpoint を内部エンドポイントに設定します。エンドポイントの完全なリストについては、リージョンとエンドポイントをご参照ください。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • OSS バケット

  • Python SDK v2 (alibabacloud_oss_v2) がインストール済みであること

  • 環境変数として設定されたアクセス認証情報

保持ポリシーの作成

initiate_bucket_worm() を呼び出して、時間ベースの保持ポリシーを作成します。応答には、後続のロックおよび延長操作に必要な worm_id が含まれています。

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Create a WORM retention policy for a bucket")
parser.add_argument('--region', required=True, help='Region ID, e.g. cn-hangzhou')
parser.add_argument('--bucket', required=True, help='Bucket name')
parser.add_argument('--endpoint', help='Custom endpoint (optional)')
parser.add_argument('--retention_period_in_days', required=True, help='Retention period in days')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    result = client.initiate_bucket_worm(oss.InitiateBucketWormRequest(
        bucket=args.bucket,
        initiate_worm_configuration=oss.InitiateWormConfiguration(
            retention_period_in_days=int(args.retention_period_in_days),
        ),
    ))

    # worm_id を保存します。これは、ポリシーをロックまたは延長するために必要です。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' worm id: {result.worm_id}'
    )

if __name__ == "__main__":
    main()

保持ポリシーのクエリ

get_bucket_worm() を呼び出して、保持ポリシーの現在の構成と状態を取得します。

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Query the WORM retention policy of a bucket")
parser.add_argument('--region', required=True, help='Region ID, e.g. cn-hangzhou')
parser.add_argument('--bucket', required=True, help='Bucket name')
parser.add_argument('--endpoint', help='Custom endpoint (optional)')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    result = client.get_bucket_worm(oss.GetBucketWormRequest(
        bucket=args.bucket,
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' worm id: {result.worm_configuration.worm_id},'
          f' state: {result.worm_configuration.state},'
          f' retention period in days: {result.worm_configuration.retention_period_in_days},'
          f' creation date: {result.worm_configuration.creation_date},'
          f' expiration date: {result.worm_configuration.expiration_date},'
    )

if __name__ == "__main__":
    main()

worm_configuration オブジェクトは、次のフィールドを返します。

フィールド説明
worm_id保持ポリシーの一意の ID
stateWORM 機能の現在の状態
retention_period_in_days保持期間 (日数)
creation_dateポリシーが作成された日付
expiration_dateポリシーの有効期限が切れる日付

保持ポリシーのロック

complete_bucket_worm() を呼び出してポリシーをロックします。ロック後、ポリシーは削除できず、保持期間を短縮することもできません。

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Lock a WORM retention policy for a bucket")
parser.add_argument('--region', required=True, help='Region ID, e.g. cn-hangzhou')
parser.add_argument('--bucket', required=True, help='Bucket name')
parser.add_argument('--endpoint', help='Custom endpoint (optional)')
parser.add_argument('--worm_id', required=True, help='Worm ID returned when the policy was created')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    result = client.complete_bucket_worm(oss.CompleteBucketWormRequest(
        bucket=args.bucket,
        worm_id=args.worm_id,
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )

if __name__ == "__main__":
    main()

保持期間の延長

extend_bucket_worm() を呼び出して、保持ポリシーの保持期間を延長します。

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Extend the retention period of a locked WORM policy")
parser.add_argument('--region', required=True, help='Region ID, e.g. cn-hangzhou')
parser.add_argument('--bucket', required=True, help='Bucket name')
parser.add_argument('--endpoint', help='Custom endpoint (optional)')
parser.add_argument('--worm_id', required=True, help='Worm ID of the locked policy')
parser.add_argument('--retention_period_in_days', required=True, help='New retention period in days')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    result = client.extend_bucket_worm(oss.ExtendBucketWormRequest(
        bucket=args.bucket,
        worm_id=args.worm_id,
        extend_worm_configuration=oss.ExtendWormConfiguration(
            retention_period_in_days=int(args.retention_period_in_days),
        ),
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )

if __name__ == "__main__":
    main()

ロックされていない保持ポリシーのキャンセル

abort_bucket_worm() を呼び出して、ロックされていないポリシーを削除します。

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Cancel an unlocked WORM retention policy")
parser.add_argument('--region', required=True, help='Region ID, e.g. cn-hangzhou')
parser.add_argument('--bucket', required=True, help='Bucket name')
parser.add_argument('--endpoint', help='Custom endpoint (optional)')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    result = client.abort_bucket_worm(oss.AbortBucketWormRequest(
        bucket=args.bucket,
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )

if __name__ == "__main__":
    main()

次のステップ

  • 保持ポリシーに関連する一般的なエラーについては、27-WORM をご参照ください。