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時間以内に保持ポリシーがロックされない場合、バケット所有者と許可されたユーザーはポリシーを削除できます。
保持期間内に保護されたオブジェクトがバケットに含まれている場合、バケットまたは保持ポリシーを削除することはできません。
例:
たとえば、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コンソールの使用
保持ポリシーを作成します。
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、保持ポリシーを設定するバケットの名前をクリックします。
左側のナビゲーションツリーで、コンテンツセキュリティ > 保持ポリシー を選択します。
保持ポリシー ページで、ポリシーの作成 をクリックします。
ポリシーの作成 ダイアログボックスで、保持期間 フィールドで保持期間を指定します。
説明 保持期間は日数で測定される。 保持期間の値の範囲は1〜25550です。
OK をクリックします。
説明 保持ポリシーはIN_PROGRESS状態です。 保持ポリシーをロックまたは削除しない場合、保持ポリシーは24時間IN_PROGRESS状態のままです。 保持ポリシーは、ポリシーが作成されてから24時間以内にバケット内のリソースを保護します。 保持ポリシーが必要ない場合は、作成後24時間以内にポリシーを削除できます。
保持ポリシーをロックします。
[保持ポリシー] ページで、ロック をクリックします。
表示されたメッセージボックスで、OK をクリックします。
重要 時間ベースの保持ポリシーがロックされた後は、保持期間を短縮したり、保持ポリシーを削除したりすることはできません。 保持期間中は、バケット内のデータを変更または削除することはできません。
(オプション) 保持ポリシーの保持期間を変更します。
[保持ポリシー] ページで、編集 をクリックします。
[編集] ダイアログボックスで、保存期間を変更します。
重要 保持期間を延長することはできますが、保持期間を短縮することはできません。
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を返します。}
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を使用して、保持ポリシーを作成または削除できます。