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

Object Storage Service:保持ポリシー

最終更新日:Mar 18, 2025

Object Storage Service (OSS) バケットに対して時間ベースの保持ポリシーを構成できます。保持ポリシーには、1 日から 70 年までの保持期間があります。このトピックでは、保持ポリシーの作成、クエリ、ロック、およびキャンセルを行う方法について説明します。

使用上の注意

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

サンプルコード

保持ポリシーを作成する

重要

バケットでは、バージョン管理と保持ポリシーを同時に構成することはできません。したがって、バケットの保持ポリシーを作成する前に、バケットでバージョン管理が有効になっていないことを確認してください。

次のサンプルコードは、保持ポリシーを作成する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、Write Once Read Many (WORM) 機能を使用してバケットの保持ポリシーを作成する方法について説明します。
parser = argparse.ArgumentParser(description="initiate bucket worm sample")

# --region パラメータを指定します。これは、バケットが配置されているリージョンを指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定します。これは、バケットの名前を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定します。これは、バケットが配置されているリージョンのエンドポイントを指定します。このコマンドラインパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --retention_period_in_days パラメータを指定します。これは、オブジェクトを保持できる日数を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--retention_period_in_days', help='オブジェクトを保持できる日数。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から OSS にアクセスするために必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    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), # オブジェクトを保持できる日数。値を整数に設定します。
        ),
    ))

    # 操作の HTTP ステータスコード、リクエスト ID、および保持ポリシー ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' worm id: {result.worm_id}'
    )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

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

次のサンプルコードは、ロックされていない保持ポリシーをキャンセルする方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、WORM 機能を使用して、バケットのロックされていない保持ポリシーをキャンセルする方法について説明します。
parser = argparse.ArgumentParser(description="abort bucket worm sample")

# --region パラメータを指定します。これは、バケットが配置されているリージョンを指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定します。これは、バケットの名前を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定します。これは、バケットが配置されているリージョンのエンドポイントを指定します。このコマンドラインパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')

def main():
    # コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から OSS にアクセスするために必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットのロックされていない保持ポリシーをキャンセルするリクエストを送信します。
    result = client.abort_bucket_worm(oss.AbortBucketWormRequest(
        bucket=args.bucket, # バケットの名前。
    ))

    # 操作結果の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )


# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

保持ポリシーをロックする

次のサンプルコードは、保持ポリシーをロックする方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、WORM 機能を使用して、バケットの保持ポリシーをロックする方法について説明します。
parser = argparse.ArgumentParser(description="complete bucket worm sample")

# --region パラメータを指定します。これは、バケットが配置されているリージョンを指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定します。これは、バケットの名前を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定します。これは、バケットが配置されているリージョンのエンドポイントを指定します。このコマンドラインパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --worm_id パラメータを指定します。これは、ロックする保持ポリシーの ID を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--worm_id', help='保持ポリシーの ID。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から OSS にアクセスするために必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットの保持ポリシーをロックするリクエストを送信します。
    result = client.complete_bucket_worm(oss.CompleteBucketWormRequest(
        bucket=args.bucket, # バケットの名前。
        worm_id=args.worm_id,  # ロックする保持ポリシーの ID。
    ))

    # 操作結果の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

保持ポリシーをクエリする

次のサンプルコードは、保持ポリシーをクエリする方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、WORM 機能を使用して、バケットの保持ポリシーをクエリする方法について説明します。
parser = argparse.ArgumentParser(description="get bucket worm sample")

# --region パラメータを指定します。これは、バケットが配置されているリージョンを指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定します。これは、バケットの名前を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定します。これは、バケットが配置されているリージョンのエンドポイントを指定します。このコマンドラインパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')

def main():
    # コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から OSS にアクセスするために必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットの保持ポリシーをクエリするリクエストを送信します。
    result = client.get_bucket_worm(oss.GetBucketWormRequest(
        bucket=args.bucket, # バケットの名前。
    ))

    # 操作結果の HTTP ステータスコード、リクエスト ID、および保持ポリシーの構成を表示します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' worm id: {result.worm_configuration.worm_id},' # 保持ポリシーの ID。
          f' state: {result.worm_configuration.state},' # WORM 機能の状態。
          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},' # 保持ポリシーの有効期限が切れる日付。
    )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

保持ポリシーの保持期間を延長する

次のサンプルコードは、保持ポリシーの保持期間を延長する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、WORM 機能を使用して、保持ポリシーの保持期間を延長する方法について説明します。
parser = argparse.ArgumentParser(description="extend bucket worm sample")

# --region パラメータを指定します。これは、バケットが配置されているリージョンを指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定します。これは、バケットの名前を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定します。これは、バケットが配置されているリージョンのエンドポイントを指定します。このコマンドラインパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --worm_id パラメータを指定します。これは、保持期間を延長する保持ポリシーの ID を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--worm_id', help='保持ポリシーの ID。', required=True)
# --retention_period_in_days パラメータを指定します。これは、バケット内のオブジェクトを保持できる日数を指定します。このコマンドラインパラメータは必須です。
parser.add_argument('--retention_period_in_days', help='オブジェクトを保持できる日数。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から OSS にアクセスするために必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットの保持ポリシーを延長するリクエストを送信します。
    result = client.extend_bucket_worm(oss.ExtendBucketWormRequest(
        bucket=args.bucket, # バケットの名前。
        worm_id=args.worm_id,  # 保持ポリシーの ID。
        extend_worm_configuration=oss.ExtendWormConfiguration(
            retention_period_in_days=int(args.retention_period_in_days), # オブジェクトを保持できる日数。値を整数に設定します。
        ),
    ))

    # 操作結果の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

関連情報

  • 保持ポリシーの一般的なエラーの詳細については、「27-WORM」をご参照ください。