管理データ管理オブジェクト

オブジェクトロック

保持期間とリーガルホールドで、バージョニングされたオブジェクトを削除から保護する方法を説明します。

RustFS のオブジェクトロックは、個々のオブジェクトバージョンに、書き込みは 1 回・読み取りは複数回(WORM)の保護を適用します。期限のある保護には保持期間を、あらかじめ有効期限を定めない保護にはリーガルホールドを使います。

概要

オブジェクトロックには、バケットのバージョニングが必要です。バケットの作成時に有効にするか、バージョニングが有効な既存バケットに対して S3 の PutObjectLockConfiguration API を使います。上書きのたびに新しいバージョンが作成されます。保持とリーガルホールドが保護するのは、オブジェクトキー全体ではなく、特定のバージョンです。

保護動作
GOVERNANCE 保持呼び出し元がバイパス権限を持ち、バイパスを明示的に要求した場合を除き、削除と保持期間の短縮を拒否します。保持期間は、バイパスなしで延長できます。
COMPLIANCE 保持ガバナンスバイパスがあっても削除を拒否します。日付は延長できますが、短縮はできません。
リーガルホールドホールドが OFF に設定されるまで削除を拒否します。有効期限はなく、ガバナンスバイパスでは解除されません。

バージョン ID を指定せずにキーを削除すると、削除マーカーが作成されます。保護されたバージョンは保存されたままで、バージョン ID を指定すれば引き続き取得できます。

有効にする前に保持を計画する

COMPLIANCE 保持は、保持期限(retain-until)の日時より前にバイパスすることも、短縮することもできません。本番データを保護する前に、非本番のバケットでポリシーを試し、時刻同期、権限、ライフサイクルルール、レプリケーション、バックアップ手順を確認します。

Console で設定する

  1. RustFS Console にサインインし、Buckets(バケット)を開きます。
  2. Create Bucket(バケットの作成)を選択し、バケット名を入力します。
  3. Object Lock(オブジェクトロック)を有効にします。オブジェクトロックにはバージョニングが必要なため、Console は Version(バージョン)も有効にします。
  4. 新しいオブジェクトバージョンへ保持を自動適用する場合は、Retention(保持)を有効にします。
  5. COMPLIANCE(コンプライアンス)または GOVERNANCE(ガバナンス)を選択し、保持期間を入力して、Day(日)または Year(年)を選択します。
  6. Create(作成)を選択します。

バージョニング、オブジェクトロック、既定の保持を有効にしたバケット作成ダイアログ

既定の保持を有効にすると、Console は最初に 180 日を表示します。保持ポリシーで必要な期間に置き換えます。これは UI の初期値であり、一般的な推奨値ではありません。

保護されたオブジェクトを確認するには、バケットを開き、オブジェクト名を選択して、Versions(バージョン)タブと Info(情報)タブを使います。Info タブには、Legal Hold(リーガルホールド)と RetentionPolicy(保持ポリシー)のフィールドがあります。

rc を使う

これらの例を実行する前に、エイリアスを設定します。

rc alias set rustfs http://localhost:9000 \
	<your-access-key> <your-secret-key> \
	--region us-east-1 --bucket-lookup path

rc 0.1.29 におけるバケット作成の制限

rc bucket create --with-lock と --with-versioning は rc 0.1.29 のヘルプ出力に表示されますが、実行すると not implemented を返します。オブジェクトロックのバケットは Console で作成します。以下に示すアップロードヘッダーはサポートされており、RustFS に対して検証済みです。

GOVERNANCE 保持付きのオブジェクトバージョンをアップロードします。保持ヘッダーは 2 つとも同時に指定し、未来の RFC 3339 UTC タイムスタンプを使います。

rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \
	-H "x-amz-object-lock-mode:GOVERNANCE" \
	-H "x-amz-object-lock-retain-until-date:2027-01-01T00:00:00Z"

リーガルホールドを有効にしたオブジェクトバージョンをアップロードします。

rc object copy /path/to/hello.txt rustfs/my-bucket/legal-hold.txt \
	-H "x-amz-object-lock-legal-hold:ON"

保護されたバージョンを一覧し、特定のバージョンを確認します。

rc bucket version list rustfs/my-bucket --json
rc object stat rustfs/my-bucket/hello.txt \
	--version-id <version-id> --json

rc 0.1.29 には、保持を変更するコマンドや、既存のリーガルホールドを ON と OFF の間で切り替えるコマンドはありません。これらの操作には、Console または S3 SDK を使います。

保護を検証する

  1. GOVERNANCE 保持またはリーガルホールドを付けて、テストオブジェクトをアップロードします。
  2. rc bucket version list で、そのバージョン ID を記録します。
  3. バイパスなしで、そのバージョンを S3 クライアントから削除しようとします。保護が有効な間、RustFS は AccessDenied を返す必要があります。
  4. Console と rc object stat --version-id で、そのバージョンが引き続き表示されることを確認します。

GOVERNANCE 保持のバイパスは、s3:BypassGovernanceRetention を持つ専用の管理アイデンティティだけで試します。COMPLIANCE 保持とリーガルホールドは、ガバナンスバイパスからは保護されたままです。

運用上の考慮事項

  • バケットの既定保持は、新しいオブジェクトバージョン、またはマルチパートアップロードを開始した時点で計算されます。
  • オブジェクトをコピーすると、宛先に新しいバージョンが作成されます。宛先の保持ポリシーは、独立して適用されます。
  • オブジェクトロックのバケットでバージョニングを一時停止するのは、適切ではありません。
  • 保持またはリーガルホールドが削除を拒否している間、ライフサイクルの有効期限ではそのバージョンを削除できません。
  • ロックされたオブジェクトのレプリケーション先は、互換性のあるオブジェクトロックの動作に対応している必要があります。

次のステップ

On this page