All Products
Search
Document Center

Object Storage Service:Kebijakan retensi

Last Updated:Mar 21, 2026

Gunakan OSS Python SDK v2 untuk mengelola kebijakan retensi kepatuhan write-once-read-many (WORM) pada bucket. Kebijakan retensi memberlakukan imutabilitas terhadap objek selama periode retensi, yang dapat berkisar antara 1 hari hingga 70 tahun.

Topik ini mencakup lima operasi: membuat, mengkueri, mengunci, memperpanjang, dan membatalkan kebijakan retensi.

Catatan penggunaan

Semua contoh menggunakan wilayah cn-hangzhou. Secara default, klien terhubung melalui titik akhir publik. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, atur cfg.endpoint ke titik akhir internal. Untuk daftar lengkap titik akhir, lihat Wilayah dan titik akhir.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Bucket OSS

  • Python SDK v2 (alibabacloud_oss_v2) yang telah diinstal

  • Kredensial akses yang dikonfigurasi sebagai variabel lingkungan

Buat kebijakan retensi

Panggil initiate_bucket_worm() untuk membuat kebijakan retensi berbasis waktu. Tanggapan mencakup worm_id yang diperlukan untuk operasi penguncian dan perpanjangan selanjutnya.

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),
        ),
    ))

    # Simpan worm_id — Anda memerlukannya untuk mengunci atau memperpanjang kebijakan.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' worm id: {result.worm_id}'
    )

if __name__ == "__main__":
    main()

Kueri kebijakan retensi

Panggil get_bucket_worm() untuk mengambil konfigurasi dan status saat ini dari kebijakan retensi.

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()

Objek worm_configuration mengembalikan bidang-bidang berikut:

BidangDeskripsi
worm_idID unik kebijakan retensi
stateStatus saat ini dari fitur WORM
retention_period_in_daysPeriode retensi dalam hari
creation_dateTanggal kebijakan dibuat
expiration_dateTanggal kedaluwarsa kebijakan

Kunci kebijakan retensi

Panggil complete_bucket_worm() untuk mengunci kebijakan. Setelah dikunci, kebijakan tidak dapat dihapus dan periode retensi tidak dapat diperpendek.

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()

Perpanjang periode retensi

Panggil extend_bucket_worm() untuk menambah periode retensi kebijakan retensi.

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()

Batalkan kebijakan retensi yang belum dikunci

Panggil abort_bucket_worm() untuk menghapus kebijakan yang belum dikunci.

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()

Langkah selanjutnya

  • Untuk error umum terkait kebijakan retensi, lihat 27-WORM.