S3 オブジェクトロックの仕組み
S3 オブジェクトロックでは、Write Once Read Many (WORM) モデルを使用してオブジェクトを保存できます。オブジェクトロックにより、オブジェクトが削除または上書きされることを、一定期間または無期限に防止できます。S3 オブジェクトロックを使用して、WORM ストレージを必要とする規制要件を満たしたり、オブジェクトの変更や削除に対する保護レイヤーを追加したりできます。
Amazon S3 オブジェクトのロックステータスの管理に関する詳細については、「オブジェクトロックの管理」を参照してください。
注記
S3 オブジェクトロックが設定された S3 バケットは、サーバーアクセスログの送信先バケットとして使用できません。詳細については、「サーバーアクセスログを使用したリクエストのログ記録」を参照してください。
以下のセクションでは、S3 オブジェクトロックの主な機能について説明します。
リテンションモード
S3 オブジェクトロックでは、次の 2 つのリテンションモードが提供されます。
-
ガバナンスモード
-
コンプライアンスモード
これらのリテンションモードは、さまざまなレベルの保護をオブジェクトに対して適用します。どちらのリテンションモードも、オブジェクトロックで保護されているオブジェクトバージョンに適用できます。
ガバナンスモードでは、特別なアクセス許可を持たない限り、ユーザーはオブジェクトのバージョンの上書きや削除、ロック設定を変更することはできません。ガバナンスモードでは、ほとんどのユーザーからのオブジェクトの削除を防止しますが、必要に応じて一部のユーザーにリテンション設定の変更、またはオブジェクトの削除を許可することができます。ガバナンスモードを使用して、コンプライアンスモードの保持期間を作成する前に、保持期間の設定をテストすることもできます。
ガバナンスモードのリテンション設定を上書きまたは削除するには、ユーザーは s3:BypassGovernanceRetention
アクセス許可を持っている必要があり、また、ガバナンスモードの上書きを必要とするリクエストで、x-amz-bypass-governance-retention:true
を要求ヘッダーとして明示的に含める必要があります。
注記
Amazon S3 コンソールにはデフォルトで、x-amz-bypass-governance-retention:true
ヘッダーが含まれています。ガバナンスモードで保護されているオブジェクトを削除しようとする場合、s3:BypassGovernanceRetention
アクセス権限があれば、そのオペレーションは成功します。
コンプライアンスモードでは、AWS アカウント の root ユーザーを含め、ユーザーが、保護されたオブジェクトのバージョンを上書きまたは削除することはできません。コンプライアンスモードでオブジェクトをロックすると、そのリテンションモードを変更することはできず、保持期間を短縮することはできません。コンプライアンスモードでは、保持期間中にオブジェクトのバージョンを上書きまたは削除できないようにします。
注記
オブジェクトロックを配置または変更したときのように、オブジェクトバージョンのメタデータを更新しても、オブジェクトバージョンが上書きされたり、Last-Modified
タイムスタンプがリセットされることはありません。
保持期間
保持期間は、一定期間オブジェクトバージョンを保護します。オブジェクトバージョンに保持期間を設定すると、Amazon S3 はオブジェクトバージョンのメタデータにタイムスタンプを保存して、保持期間の有効期限を示します。保持期間が終了すると、オブジェクトバージョンをリーガルホールドしない限り、オブジェクトバージョンを上書きまたは削除することができます。
保持期間は明示的に、またはバケットのデフォルト設定を通じてオブジェクトバージョンに配置することができます。オブジェクトバージョンに保持期間を明示的に適用する場合は、オブジェクトバージョンに対して [リテンション期日] を指定します。Amazon S3 は、保持期間が終了するまで、Retain Until Date
の設定をオブジェクトバージョンのメタデータに保存します。
バケットのデフォルト設定を使用するときは、Retain Until
Date
を指定しません。代わりに、バケット内に配置されたすべてのオブジェクトバージョンを保護する期間を日数または年単位で指定します。オブジェクトをバケットに配置すると、Amazon S3 が、オブジェクトバージョンの作成タイムスタンプに、指定された期間を追加して、オブジェクトバージョンの Retain Until Date
を計算します。オブジェクトバージョンのメタデータに Retain Until Date
を保存します。オブジェクトバージョンは、オブジェクトバージョンにその保持期間のロックを明示的に配置した場合とまったく同様に保護されます。
注記
バケットにオブジェクトバージョンを配置する要求に明示的なリテンションモードと期間が含まれている場合、それらの設定は、そのオブジェクトバージョンのバケットのデフォルト設定を上書きします。
他のすべての オブジェクトロック設定と同様に、保持期間は個々のオブジェクトバージョンに適用されます。単一のオブジェクトのバージョンが異なれば、リテンションモードや期間も異なる可能性があります。
たとえば、30 日間の保持期間に 15 日のオブジェクトがあり、同じ名前と 60 日間の保持期間を持つオブジェクトを Amazon S3 に PUT
するとします。この場合、PUT
が正常に実行され、Amazon S3 は保持期間が 60 日の新しいバージョンを作成します。古いバージョンは元の保持期間を維持し、15 日後に削除可能になります。
保持設定をオブジェクトバージョンに適用した後、保持期間を延長することができます。これを行うには、現在設定されているオブジェクトバージョンよりも後のRetain Until Date
を持つオブジェクトバージョンに新しいロック要求を送信します。Amazon S3 は、既存の保持期間を新しい、より長い期間に置き換えます。オブジェクトの保持期間を設定するアクセス許可を持つユーザーは、どちらのモードでもロックされたオブジェクトバージョンの保持期間を延長できます。
リーガルホールド
オブジェクトロックを使用すると、オブジェクトバージョンにリーガルホールドを設定することもできます。保持期間と同様に、リーガルホールドは、オブジェクトバージョンが上書きまたは削除されるのを防ぎます。ただし、リーガルホールドには関連する保持期間はなく、削除するまで有効です。リーガルホールドは、s3:PutObjectLegalHold
アクセス許可を持つ任意のユーザーが自由に適用および解除できます。Amazon S3 アクセス許可の詳細なリストについては、「Amazon S3 のアクション、リソース、条件キー」を参照してください。
リーガルホールドは、保持期間から独立しています。オブジェクトを含むバケットにオブジェクトロックが有効になっている限り、指定されたオブジェクトバージョンに保持期間が設定されているかどうかにかかわらず、リーガルホールドを適用および解除できます。オブジェクトバージョンをリーガルホールドしても、そのオブジェクトバージョンのリテンションモードや保持期間には影響しません。
たとえば、オブジェクトバージョンをリーガルホールドし、オブジェクトバージョンも保持期間で保護するとします。保持期間が終了すると、オブジェクトは WORM 保護を失いません。むしろ、リーガルホールドは、許可されたユーザーが明示的に解除するまでオブジェクトを保護し続けます。同様に、オブジェクトバージョンに有効な保持期間がある間にリーガルホールドを解除すると、保護期間が終了するまでオブジェクトバージョンは保護されたままになります。
オブジェクトロックを使用するには、バケットに対して有効にする必要があります。オプションで、バケットに配置された新しいオブジェクトに適用されるデフォルトのリテンションモードと期間を設定することもできます。詳細については、「コンソールを使用した S3 オブジェクトロックの設定」を参照してください。
バケット設定
オブジェクトロックを使用するには、バケットに対して有効にする必要があります。オプションで、バケットに配置された新しいオブジェクトに適用されるデフォルトのリテンションモードと期間を設定することもできます。
注記
S3 オブジェクトロックを使用する場合は、暗号化技術を考慮してください。例えば、AWS KMS キーでサーバー側の暗号化を使用する場合は、キーの削除の可能性が S3 オブジェクトロックとどのように相互作用するかを検討してください。キーの保護も検討することが重要です。
S3 オブジェクトロックの有効化
オブジェクトをロックする前に、S3 オブジェクトロックを使用するようにバケットを設定する必要があります。これを行うには、オブジェクトロックを有効にするバケットをいつ作成するかを指定します。オブジェクトロック用のバケットを設定した後、そのバケット内のオブジェクトを保持期間やリーガルホールド、またはその両方を使用してロックすることができます。
注記
-
新しいバケットに対してのみオブジェクトロックを有効にすることができます。既存のバケットのオブジェクトロックをオンにする場合は、 にお問い合わせくださいAWS Support
-
オブジェクトロックが有効になっているバケットを作成すると、Amazon S3 は自動的にバケットのバージョニングを有効にします。
-
オブジェクトロックを有効にしたバケットを作成すると、オブジェクトロックを無効にしたり、バケットのバージョニングを停止することはできません。
コンソールでオブジェクトロックを有効にする方法の詳細は、「コンソールを使用した S3 オブジェクトロックの設定」を参照してください。
デフォルトの保持設定
バケットのオブジェクトロックをオンにすると、バケットは保護されたオブジェクトを格納できます。ただし、バケットに入れたオブジェクトは自動的には保護されません。バケットに配置されたオブジェクトのバージョンを自動的に保護する場合は、デフォルトの保持期間を設定できます。オブジェクトを作成するときにオブジェクトに各リテンションモードと期間を明示的に指定しない限り、バケットに配置されたすべての新しいオブジェクトにはデフォルト設定が適用されます。
ヒント
バケット内に配置されたすべての新しいオブジェクトバージョンに対して、バケットのデフォルトのリテンションモードと期間を適用する場合は、バケットのデフォルトを設定し、オブジェクト保持設定を行うユーザーアクセス許可を拒否します。Amazon S3 は、バケットに配置された新しいオブジェクトバージョンにデフォルトのリテンションモードと期間を適用し、リテンションモードと設定を含むオブジェクトの配置リクエストをすべて拒否します。
バケットのデフォルト設定には、モードと期間の両方が必要です。バケットのデフォルトモードはガバナンスまたはコンプライアンスのいずれかです。詳細については、「リテンションモード」を参照してください。
デフォルトの保持期間は、タイムスタンプではなく、日数または年数として示されます。デフォルトの保持期間が設定されているバケットにオブジェクトバージョンを配置すると、オブジェクトロックはリテンション期日を計算します。これは、オブジェクトバージョンの作成タイムスタンプにデフォルトの保持期間を追加することによって行われます。Amazon S3 は、結果のタイムスタンプを、手動で計算してオブジェクトバージョンに配置した場合と同じように、オブジェクトバージョンの Retain Until Date
として保存します。
デフォルト設定は、バケットに配置された新しいオブジェクトにのみ適用されます。バケットにデフォルトの保持設定を配置しても、バケット内に既に存在するオブジェクトには保持設定は適用されません。
重要
オブジェクトロックは個々のオブジェクトバージョンにのみ適用されます。デフォルトの保持期間を持つバケットにオブジェクトを配置し、そのオブジェクトの保持期間を明示的に指定しない場合、Amazon S3 はバケットのデフォルトと一致する保持期間でオブジェクトを作成します。オブジェクトの作成後、その保持期間はバケットのデフォルト保持期間とは無関係です。バケットのデフォルトの保持期間を変更しても、そのバケット内のオブジェクトのデフォルトの保持期間は変更されません。
注記
バケットにデフォルトの保存期間を設定する場合、そのようなバケット内のオブジェクトをアップロードするリクエストには Content-MD5
ヘッダーが含まれている必要があります。詳細については、Amazon Simple Storage Service API リファレンスの「Put Object」を参照してください。
必要なアクセス許可
オブジェクトロックオペレーションにはアクセス許可が必要です。試している正確なオペレーションによっては、次の許可のいずれかが必要になる場合があります。
-
s3:BypassGovernanceRetention
-
s3:GetBucketObjectLockConfiguration
-
s3:GetObjectLegalHold
-
s3:GetObjectRetention
-
s3:PutBucketObjectLockConfiguration
-
s3:PutObjectLegalHold
-
s3:PutObjectRetention
アクセス許可で条件を使用する方法の詳細については、「Amazon S3 条件キーの例」を参照してください。