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

Object Storage Service:保持ポリシー

最終更新日:Feb 23, 2024

Object Storage Service (OSS) では、ユーザーがデータを変更または削除できないように、保持ポリシーによりWORM (Write Once Read Many) 機能が提供されます。 リソース所有者を含め、特定の期間内にバケット内のオブジェクトを変更または削除したくない場合は、バケットの保持ポリシーを設定できます。 保持ポリシーを設定すると、指定された期間が終了するまで、ユーザーはバケット内のオブジェクトを読み取るか、新しいオブジェクトをバケットにアップロードすることしかできません。 指定された期間外にバケットでオブジェクトの変更と削除が許可されます。

前提条件

  • 保持ポリシーを設定するバケットは、中国 (杭州) 、中国 (上海) 、中国 (福州-地方地域) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (ヘユアン) 、中国 (広州) のいずれかのリージョンにあります。中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、日本 (東京) 、韓国 (ソウル) 、シンガポール (シドニー) 、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、インド (ムンバイ) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ)

  • 保持ポリシーを設定するバケットのバージョン管理は有効になっていません。 バージョン管理の詳細については、「概要」をご参照ください。

シナリオ

OSSの保持ポリシーによって提供されるWORM機能は、企業が米国の規制およびコンプライアンス要件を満たすのに役立ちます。 証券取引委員会 (SEC) および金融業界規制当局 (FINRA) 。 この機能は、金融、保険、ヘルスケア、証券などのシナリオ、およびログデータの多層保護スキーム (MLPS) 監査などのシナリオに適用できます。

説明

OSSは、Cohasset Associatesによって認定および監査されており、電子記録の保持に関する厳しい要件を満たしています。 保持ポリシーが構成されるOSSバケットは、SEC規則17a − 4(f) 、CFTC規則1.31(c) − (d) 、およびFINRA規則4511(c) などの規制規則に準拠する。 詳細については、「OSS Cohasset評価レポート」をご参照ください。

使用上の注意

  • OSSのバケットに対してのみ保持ポリシーを設定できます。

  • OSS-HDFSサービスの有効化とバケットの保持ポリシーの設定を同時に行うことは推奨しません。

    保持ポリシーが設定されているバケットに対してOSS-HDFSが有効になっているとします。 OSS-HDFSでサポートされているメソッドを使用して、からオブジェクトを削除する場合。dlsdata/ ディレクトリでは、オブジェクトが削除されたことを示すメッセージが表示されます。 ただし、保存期間内に削除が発生した場合、OSSは実際にオブジェクトを保持し、保存期間の終了後にオブジェクトを認識して削除することはできません。

  • 保持期間中に、バケット内のオブジェクトのストレージクラスを変更するライフサイクルルールを設定できます。 これにより、コストを削減し、コンプライアンスを確保できます。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

保持ポリシーの説明

  • 実装

    デフォルトでは、バケットに対してポリシーが作成された後、時間ベースの保持ポリシーはIN_PROGRESS状態になります。 保持ポリシーは、24時間IN_PROGRESS状態のままです。 保持ポリシーは、ポリシーが作成されてから24時間以内にバケット内の指定されたリソースを保護します。

    • 保持ポリシーを作成した後の24時間ウィンドウで

      • 保持ポリシーがロックされていない場合、バケット所有者と許可されたユーザーはポリシーを削除できます。

      • 保持ポリシーがロックされている場合、ポリシーの保持期間を短縮することはできず、ポリシーを削除することもできません。 しかし、保持期間を延長することができる。

      • 保持ポリシーがロックされている場合、バケット内のデータは保持ポリシーによって保護されます。 バケット内のデータを削除または変更しようとすると、409 FileImmutableエラーが返されます。

    • 保持ポリシーの作成から24時間後

      保持ポリシーが作成されてから24時間後に保持ポリシーがロックされていない場合、ポリシーは無効になります。 ポリシーを削除できます。

  • 削除

    • 時間ベースの保持ポリシーは、バケットのメタデータ属性です。 バケットが削除されると、バケットの保持ポリシーも削除されます。

    • ポリシーが作成されてから24時間以内に保持ポリシーがロックされない場合、バケット所有者と許可されたユーザーはポリシーを削除できます。

    • 保持期間内に保護されたオブジェクトがバケットに含まれている場合、バケットまたは保持ポリシーを削除することはできません。

  • 例:

    たとえば、2022年6月1日にバケットに対して30日間の保持期間を持つ保持ポリシーを作成し、すぐにポリシーをロックしたとします。 次の表は、オブジェクトのアップロード日と保護の有効期限を示しています。

    オブジェクト

    アップロード日

    保護の有効期限

    file1.txt

    2022年4月1日

    2022年4月30日

    file2.txt

    2022年6月1日

    2022年6月30日

    file3.txt

    2022年9月1日

    2022年9月30日

手順

OSSコンソールの使用

  1. 保持ポリシーを作成します。

    1. OSSコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、保持ポリシーを設定するバケットの名前をクリックします。

    3. 左側のナビゲーションツリーで、コンテンツセキュリティ > 保持ポリシー を選択します。

    4. 保持ポリシー ページで、ポリシーの作成 をクリックします。

    5. ポリシーの作成 ダイアログボックスで、保持期間 フィールドで保持期間を指定します。

      説明

      保持期間は日数で測定される。 保持期間の値の範囲は1〜25550です。

    6. OK をクリックします。

      説明

      保持ポリシーはIN_PROGRESS状態です。 保持ポリシーをロックまたは削除しない場合、保持ポリシーは24時間IN_PROGRESS状態のままです。 保持ポリシーは、ポリシーが作成されてから24時間以内にバケット内のリソースを保護します。 保持ポリシーが必要ない場合は、作成後24時間以内にポリシーを削除できます。

  2. 保持ポリシーをロックします。

    1. [保持ポリシー] ページで、ロック をクリックします。

    2. 表示されたメッセージボックスで、OK をクリックします。

      重要

      時間ベースの保持ポリシーがロックされた後は、保持期間を短縮したり、保持ポリシーを削除したりすることはできません。 保持期間中は、バケット内のデータを変更または削除することはできません。

  3. (オプション) 保持ポリシーの保持期間を変更します。

    1. [保持ポリシー] ページで、編集 をクリックします。

    2. [編集] ダイアログボックスで、保存期間を変更します。

      重要

      保持期間を延長することはできますが、保持期間を短縮することはできません。

OSS SDKの使用

次のサンプルコードでは、一般的なプログラミング言語でOSS SDKを使用して保持ポリシーを設定する方法の例を示します。 他のプログラミング言語でOSS SDKを使用して保持ポリシーを設定するためのサンプルコードの詳細については、「概要」をご参照ください。

Java

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。import com.aliyun.oss.mo del.InitiateBucketWormRequest;
import com.aliyun.oss.mo del.InitiateBucketWormResult;

public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // InitiateBucketWormRequestオブジェクトを作成します。 
            InitiateBucketWormRequest initiateBucketWormRequest = new InitiateBucketWormRequest(bucketName);
            // 保持期間を1日に設定します。 
            initiateBucketWormRequest.setRetentionPeriodInDays (1);

            // 保持ポリシーを作成します。 
            InitiateBucketWormResult initiateBucketWormResult = ossClient.initiateBucketWorm(initiateBucketWormRequest);

            // 保持ポリシーのIDを照会します。 
            文字列wormId = initiateBucketWormResult.getWormId();
            System.out.println(wormId);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);

try {
    // 保持ポリシーを作成し、保持期間を30日に設定します。 
    $wormId = $ossClient->initiateBucketWorm($bucket, 30);

    // 保持ポリシーのIDを照会します。 
    印刷 ($wormId);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 

Node.js

const OSS = require('ali-OSS ');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  region: 'yourregion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、});
// 保持ポリシーを作成します。 
async関数initiateBucketWorm() {
 // バケットの名前を指定します。 
  const bucket = 'yourbucketname'
  // 保持ポリシーの保持期間を指定します。 
  const days = '<Retention Days>'
    const res = await client.initiateBucketWorm(bucket, days)
  console.log(res.wormId)
}

initiateBucketWorm() 

Python

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')

# 保持ポリシーを作成し、保持期間を1日に設定します。 
result = bucket.init_bucket_worm (1)
# 保持ポリシーのIDを照会します。 
print(result.worm_id) 

行く

パッケージメイン

import (import (import)
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func HandleError (エラーエラー) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

    // 保持ポリシーを設定するバケットの名前を指定します。 
    bucketname := "<yourBucketName>"
    // 保持ポリシーの保持期間を60日に設定します。 
    result,err := client.InitiateBucketWorm(bucketname,60)
    if err! =nil {
        HandleError(err)
    }

    fmt.Println (結果)
} 

C ++

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";

      /* ネットワークリソースなどのリソースを初期化します。 */
      InitializeSdk();

      ClientConfiguration conf;
      /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);
  
      /* 保持ポリシーを作成し、保持期間を10日に設定します。 */
      auto outcome = client.InitiateBucketWorm(InitiateBucketWormRequest(BucketName, 10));

      if (outcome.isSuccess()) {      
            std::cout << "InitiateBucketWorm success" << std::endl;
            std::cout << "WormId:" << outcome.result().WormId() <<< std::endl;
      }
      else {
        /* 例外を処理します。 */
        std::cout << "InitiateBucketWorm fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
      }

      /* ネットワークリソースなどのリソースをリリースします。 */
      ShutdownSdk();
      0を返します。} 

ossutilの使用

ossutilを使用して保持ポリシーを構成できます。 詳細については、「ワーム (保持ポリシーの管理) 」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「InitiateBucketWorm」をご参照ください。

よくある質問

保持ポリシーのメリットは何ですか?

保持ポリシーは、安全で準拠したデータストレージを提供します。 保持ポリシーの保持期間内では、データを変更または削除することはできません。 代わりにResource Access Management (RAM) ポリシーとバケットポリシーを使用してデータを保護する場合、データを変更または削除できます。

どのようなシナリオで保持ポリシーが必要ですか?

医療記録、技術文書、契約書などの重要なデータを長期間バケットに保存し、データの変更や削除を禁止する場合は、バケットの保持ポリシーを設定できます。

保持ポリシーを削除できますか。

保持ポリシーのステータスによって異なります。

  • 保持ポリシーがロックされていない場合は、バケット所有者または許可されたユーザーとしてポリシーを削除できます。

  • 保持ポリシーがロックされている場合、誰もポリシーを削除できません。

バケット内の特定のオブジェクトに対して保持ポリシーを設定できますか?

いいえ、できません。 保持ポリシーは、バケットレベルでのみ設定できます。 OSSは、ディレクトリまたはオブジェクトレベルでの保持ポリシーをサポートしていません。

保持ポリシーによって保護されているオブジェクトの有効期限を計算するにはどうすればよいですか。

保持ポリシーで保護されているオブジェクトの有効期限を計算するには、保持ポリシーで指定された保持期間を、オブジェクトが最後に変更された日付に追加します。 たとえば、バケットの保持期間が10日で、バケット内のオブジェクトが2022年2月15日に最後に変更された場合、オブジェクトは2022年2月25日に期限切れになります。

保持ポリシーで保護されているバケットを削除するにはどうすればよいですか?

  • バケットにオブジェクトが含まれていない場合は、バケットを直接削除できます。

  • バケットにオブジェクトが含まれていて、すべてのオブジェクトが保持期間を超えている場合は、バケット内のすべてのオブジェクトを削除した後にバケットを削除できます。 バケット内のオブジェクトを最初に削除せずにバケットを削除すると、削除失敗が表示されます。

  • 保持期間内に保護されたオブジェクトがバケットに含まれている場合、バケットを削除することはできません。

Alibaba CloudアカウントでOSSの支払いが滞納している場合、保持ポリシーの保持期間内に保護されているオブジェクトは保持されていますか。

Alibaba Cloudアカウントに料金滞納がある場合、Alibaba Cloudは契約条件に基づいて保持ポリシーを適用します。

許可されたRAMユーザーは保持ポリシーを設定できますか?

はい、許可されたRAMユーザーは保持ポリシーを設定できます。 保持ポリシーに関連するAPI操作が利用可能です。 これらのAPI操作はRAMポリシーをサポートしています。 関連するRAMポリシーがアタッチされているRAMユーザーは、OSSコンソールで、またはOSS API操作またはOSS SDKを使用して、保持ポリシーを作成または削除できます。