S3 バージョニングの仕組み - Amazon Simple Storage Service

S3 バージョニングの仕組み

S3 Versioning を使用すると、オブジェクトの複数のバージョンを 1 つのバケットに保持し、誤って削除または上書きされたオブジェクトを復元できます。例えば、オブジェクトを削除した場合、Amazon S3 はオブジェクトを完全に削除する代わりに削除マーカーを挿入します。これが最新のオブジェクトバージョンになります。これにより、以前のバージョンを復元できます。詳細については、「バージョニングが有効なバケットからのオブジェクトバージョンの削除」を参照してください。オブジェクトを上書きすると、バケット内の新しいオブジェクトバージョンになります。いつでも以前のバージョンを復元できます。

作成する各 S3 バケットには、それに関連付けられたバージョニングのサブリソース があります。(詳しくは、バケット設定オプション を参照してください)。デフォルトでは、バケットのバージョニングは無効で、バージョニングのサブリソースには、以下の通り、空のバージョニング設定が格納されます。

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>

バージョニングを有効にするには、状態を含むバージョニング設定を使用して、Amazon S3 にリクエストを送信します。

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>

バージョニングを停止するには、ステータス値を Suspended に設定します。

注記

バケットで初めてバージョニングを有効にしたときは、変更が完全に反映されるまでに、少し時間がかかることがあります。バケットへのオブジェクトの書き込みオペレーション (PUT または DELETE) は、バージョニングを有効にして 15 分待ってから発行することをお勧めします。

バケット所有者とすべての承認済み IAM ユーザーは、バージョニングを有効にできます。バケット所有者は、バケットを作成した AWS アカウント (ルートアカウント) です。 権限の詳細については、 を参照してくださいAmazon S3 での Identity and Access Management

AWS Management Console、AWS Command Line Interface (AWS CLI)、または REST API を使用した S3 バージョニングの有効化と無効化の詳細は、バケットでのバージョニングの有効化 を参照してください。

バージョン ID

バケットのバージョニングを有効にすると、Amazon S3 は、保存されるオブジェクトに対して一意のバージョン ID を自動的に生成します。例えば、1 つのバケット内に、photo.gif (バージョン 111111) と photo.gif (バージョン 121212) のように、キーは同じだがバージョン ID が異なる 2 つのオブジェクトを保持することができます。

バージョニングを有効にしたかどうかにかかわらず、バケット内の各オブジェクトにはバージョン ID が付いています。S3 バージョニングを有効にしていない場合、バージョン ID の値は Amazon S3 によって null に設定されます。S3 バージョニングを有効にした場合、Amazon S3 がオブジェクトにバージョン ID 値を割り当てます。この値により、同じキーの他のバージョンと区別されます。

既存のバケットで S3 バージョニングを有効にしても、バケットにすでに保存されているオブジェクトは変更されません。バージョン ID (null)、コンテンツ、アクセス権限が変更されることはありません。バケットに対して S3 バージョニングを有効にすると、バケットに追加された各オブジェクトにバージョン ID が与えられ、同じキーの他のバージョンと区別されます。

バージョン ID を生成できるのは Amazon S3 のみです。また、編集はできません。バージョン ID は、Unicode、UTF-8 エンコード、URL 対応の不透明な文字列で、長さは 1,024 バイト以下です。次に例を示します。

3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

注記

簡素化のため、本トピックの他の例ではさらに短い ID を使用します。

バージョニングのワークフロー

バージョニングが有効になっているバケットにオブジェクトを PUT しても、以前のバージョンは上書きされません。次の図は、同じ名前のオブジェクトが既に入っているバケットで、photo.gif の新しいバージョンに対して PUT を実行した場合に、バケット内の元のオブジェクト (ID = 111111) はそのまま残り、Amazon S3 によって新しいバージョン ID (121212) が生成され、その新しいバージョンがバケットに追加される様子を示しています。

この機能により、オブジェクトを誤って上書きしたり削除したりすることを防げます。また、オブジェクトの以前のバージョンを復元することも可能です。

オブジェクトの DELETE を実行するときは、次の図に示すように、バケット内のすべてのバージョンが残り、Amazon S3 によって削除マーカーが挿入されます。

削除マーカーはオブジェクトの最新バージョンになります。デフォルトで、GET リクエストは最後に格納されたバージョンを取得します。最新バージョンが削除マーカーであるときに単純な GET Object リクエストを実行すると、次の図に示すように 404 Not Found エラーが返されます。

ただし、バージョン ID を指定すれば、オブジェクトの以前のバージョンを GET することができます。次の図では、特定のオブジェクトバージョン 111111 の GET を実行します。これはオブジェクトの最新バージョンではありませんが、Amazon S3 はこのバージョンを返します。

詳細については、「バージョニングが有効なバケットからのオブジェクトバージョンの取得」を参照してください。

オブジェクトを完全に削除するには、削除するバージョンを指定します。Amazon S3 バケット所有者のみが、特定のバージョンを永久に削除することができます。次の図は、DELETE versionId によってバケット内のオブジェクトが永久に削除される様子を示しています。Amazon S3 による削除マーカーの挿入も行われません。

MFA (多要素認証) Delete に対応するようにバケットを設定すると、セキュリティを強化できます。この設定を行うと、バケット所有者は特定のバージョンを削除したりバケットのバージョニング状態を変更したりするために、すべてのリクエストに 2 つの認証形態を含める必要があります。詳細については、「MFA 削除の設定」を参照してください。

新しいバージョンは、新しいオブジェクトをPUTした場合にのみ作成されます。COPY 作業のような特定のアクションは、PUT を実装することにより機能することに注意してください。現在のオブジェクトを変更するアクションを実行しても、新しいオブジェクトをPUTしないため、新しいバージョンは作成されません。これには、オブジェクトのタグの変更などのアクションが含まれます。

重要

バージョニングを有効にしたバケットへの Amazon S3 PUT または DELETE オブジェクトリクエストに対して受信される HTTP 503 Slow Down レスポンスの数が著しく増加した場合、バケットに数百万のバージョンが存在するオブジェクトがある可能性があります。詳細については、トラブルシューティングセクションの「バージョニングな有効なバケットへの Amazon S3 リクエストに対する HTTP 503 レスポンスが著しく増加する」を参照してください。