オブジェクトのバージョニングでは、削除されたオブジェクトをバージョニングされた非現行バージョンのオブジェクトとして保持します。このオブジェクトは、明示的に削除されるまでバケットでアクセス可能です。この機能を使用すると、オブジェクトの変更を追跡して、オブジェクトの特定バージョンを復元できます。このページでは、この機能と、この機能を使用するときに使用可能なオプションについて説明します。
オブジェクトのバージョニングではなく、削除(復元可能)を使用して、偶発的な削除や悪意のある削除により永続的にデータが失われないよう保護することをおすすめします。削除(復元可能)とオブジェクトのバージョニングを使用する場合の詳細については、考慮事項をご覧ください。
はじめに
バケットのオブジェクトのバージョニングを有効にします。有効にすると、次のようになります。
ライブ バージョンの世代番号を指定しない限り、ライブ オブジェクト バージョンを置換または削除するたびに、Cloud Storage には、非現行オブジェクト バージョンが保持されます。
非現行バージョンではオブジェクトの名前が保持されますが、世代番号によって一意に識別されます。
非現行バージョンは、それを含めるよう明示的に要求するリクエストにのみ表示されます。
オブジェクトの非現行バージョンを削除するには、削除リクエストで世代番号を指定するか、オブジェクトのライフサイクル管理を使用します。
削除(復元可能)が有効になっているバケットで、非現行バージョンのオブジェクトを削除すると、Cloud Storage はその状態を削除済み(復元可能)に変更します。削除済み(復元可能)オブジェクトは、削除(復元可能)の保持期間が終了すると完全に削除されます。
オブジェクトの非現行バージョンは、ライブ バージョンとは独立して存在します。
このバケットでは、オブジェクトの新しい非現行バージョンが蓄積されなくなります。
バケットにすでに存在するオブジェクトのバージョンは影響を受けません。
考慮事項
オブジェクト バージョンの数にデフォルトの上限はありません。オブジェクトの各非現行バージョンは、ライブ時と同じレートで課金されます。
早期削除料金は、オブジェクト バージョンがバケットから削除された場合にのみ適用されます。バージョンが非現行バージョンになったときは適用されません。バケットから削除されたバージョンの保存期間は、そのバケットが非現行バージョンになった時刻ではなく、バケットに追加された時刻に基づきます。
バージョニングを有効にする場合は、オブジェクトのライフサイクル管理の使用を検討してください。これを使用すると、指定した期間が終了するか、新しいバージョンが非現行になった場合に、オブジェクトの古いバージョンが削除されます。考えられる設定については、オブジェクトの削除のライフサイクル構成例をご覧ください。
バケットでオブジェクトのバージョニングと削除(復元可能)のどちらを有効にするかを判断する場合は、次の点を考慮してください。
誤って削除されたり、悪意を持って削除されたりしてデータが完全に失われるのを防ぐには、オブジェクトのバージョニングではなく削除(復元可能)を使用します。削除(復元可能)は、最近削除されたライブ オブジェクトまたは非現行オブジェクトをすべて保持することで、バケットレベルの保護を保証します。また、バケットレベルの削除も防止できます。
特定の課金要件があり、指定した数の非現行バージョンを保持するためにオブジェクトのライフサイクル管理のルールを構成している場合は、オブジェクトのバージョニングを使用します。
このようなシナリオでは、誤って削除されたものが部分的にしか保護されません。これは、オブジェクトのバージョニングではバケットレベルのイベントや、不要な非現行オブジェクトの削除を防止できないためです。
非現行オブジェクトはアクセス可能で読み取り可能ですが、復元可能な形で削除されたオブジェクトはオフラインで保持され、読み取りできません。復元可能な形で削除されたオブジェクトを復元するには、ストレージ管理者(
roles/storage.admin
)IAM ロールで使用可能な特定の IAM 権限が必要です。最近削除されたオブジェクトにアクセスし、データが誤って、または悪意を持って永続的に削除されないよう確実に保護したい場合は、同じバケットでオブジェクト バージョニングと削除(復元可能)を有効にします。オブジェクトのライフサイクル管理のポリシーを構成して、特定の日数の経過後に非現行バージョンを自動的に削除し、削除(復元可能)を使用して保護をさらに強化できます。
非現行オブジェクトのメタデータ
非現行バージョンのオブジェクトに、ライブ バージョンのメタデータとは異なる独自のメタデータが存在する場合があります。ここで重要なことは、非現行バージョンはその ACL を保持しており、必ずしもライブ バージョンと同じ権限を持っているとは限らないということです。
各バージョンには、それがライブ バージョンか非現行バージョンかにかかわらず、メタデータのセットが 1 つ含まれます。また、最新のメタ世代番号のみがメタデータを参照します。古いメタ世代番号を使用して、変更されたメタデータにアクセスすることはできません。
非現行バージョンのオブジェクトのメタデータを更新するには、リクエストでその generation
を指定します。read-modify-write セマンティクスの安全性を確保するため、metageneration-match 前提条件を使用できます。この前提条件を使用した場合、メタデータを読み取ってから更新を送信するまでの間に、更新しようとしているメタデータが変更されていると、更新が失敗します。
オブジェクトのバージョニングの例
以下の例では、ファイルを置換、更新、削除したときに、オブジェクトのバージョニングと削除(復元可能)が有効になっているバケット内の cat.jpg
ファイルに何が起こるかを示します。
- 新しい画像をアップロードする
最初に
cat.jpg
を Cloud Storage にアップロードすると、Cloud Storage はgeneration
番号とmetageneration
番号を受け取ります。この例では、generation 番号は1360887697105000
です。新しいオブジェクトなので、metageneration
番号は1
です。cat.jpg
は、オブジェクトのバージョニングが有効になっていない場合でも、generation
番号とmetageneration
番号を受け取ります。これらの番号は、オブジェクトのメタデータを表示すると確認できます。- オブジェクトのバージョニングを有効にする
この時点で、バケットのオブジェクトのバージョニングを有効にするかどうかを決定します。有効にしても、
cat.jpg
のgeneration
番号またはmetageneration
番号には影響しません。- 画像のメタデータを変更する
カスタム メタデータを追加して(この例では
color:black
)、cat.jpg
のメタデータを更新します。メタデータを更新すると、cat.jpg
のmetageneration
の値が増えます。この例では、1
から2
になります。ただし、オブジェクト自体は変更されていないため、引き続きcat.jpg
の 1 つのバージョンのみが保存され、バージョンのgeneration
番号は1360887697105000
のままです。- 画像の新しいバージョンをアップロードする
cat.jpg
の新しいバージョンを Cloud Storage バケットにアップロードします。新しいバージョンをアップロードすると、オブジェクトのバージョニング機能により、既存のcat.jpg
オブジェクトが非現行状態になります。非現行バージョンは、これまでと同じストレージ クラスとメタデータを保持します。非現行バージョンは、バージョンを一覧表示した場合にのみ表示されます。通常の一覧表示コマンドでは表示されません。非現行バージョンはcat.jpg#1360887697105000
として参照されます。一方、新たにアップロードされた
cat.jpg
は、オブジェクトのライブ バージョンになります。この新しいcat.jpg
は、固有のgeneration
番号を取得します。この例では1360887759327000
です。また、固有のメタデータとmetageneration
番号1
を取得します。つまり、メタデータcolor:black
は、指定しない限りこれには含まれません。cat.jpg,
に対してアクセスまたは変更を行う場合、このバージョンが使用されます。また、cat.jpg
のこのバージョンは、そのgeneration
番号でも参照できます。たとえば、Google Cloud CLI を使用する場合は、cat.jpg#1360887759327000
として参照します。- 画像のライブ バージョンを削除する
次に、
cat.jpg
を削除します。これにより、世代番号が1360887759327000
のバージョンが非現行になります。したがって、バケットにはcat.jpg
の非現行バージョンが 2 つあり、ライブ バージョンはありません。非現行バージョンはどちらもgeneration
番号で参照できますが、generation
番号を指定せずにcat.jpg
にアクセスしようとすると失敗します。同様に、バケットの通常のオブジェクト リストには、バケット内のオブジェクトの 1 つとして
cat.jpg
は表示されなくなります。非現行バージョンのオブジェクトの一覧表示の詳細については、非現行バージョンのオブジェクトの一覧表示をご覧ください。- オブジェクトのバージョニングを無効にする
オブジェクトのバージョニングを無効にします。これにより、オブジェクトは非現行にならなくなります。オブジェクトの既存の非現行バージョンは Cloud Storage に残ります。オブジェクトのバージョニングを無効にしても、
cat.jpg#1360887697105000
とcat.jpg#1360887759327000
はユーザーが削除するまでバケットに保存されたまま残ります。- 非現行バージョンの 1 つを復元する
オブジェクトのバージョニングを無効にしている場合でも、既存の非現行バージョンのコピーを作成することで、実質的にそのバージョンを復元できます。これにより、バケットには
cat.jpg
の 3 つのバージョン(2 つの非現行バージョンと復元したライブ バージョン)が存在することになります。- 非現行バージョンの 1 つを削除する
非現行バージョンのオブジェクトは、手動で、またはオブジェクトのライフサイクル管理を使用して削除できます。
非現行バージョン
cat.jpg#1360887697105000
を削除すると、復元可能な形で削除されます。この復元可能な形で削除されたオブジェクトは、バケットの削除(復元可能)ポリシーで指定された削除(復元可能)の保持期間だけ保持されます。保持期間が終了すると、Cloud Storage は、復元可能な形で削除されたこのオブジェクトのバージョンを完全に削除します。- 復元可能な形で削除されたオブジェクト バージョンの 1 つを復元する
オブジェクトのバージョニングを無効にしても、復元可能な形で削除された非現行オブジェクトのバージョンを復元できます。復元可能な形で削除されたバージョンのコピーが、新しいオブジェクト メタデータと新しい作成日を含むライブ バージョンとして復元されます。復元可能な形で削除された元のオブジェクトもバケットに残り、削除(復元可能)の保持期間が経過すると完全に削除されます。
オブジェクトのバージョニングのリファレンス
このリファレンス表には、オブジェクトのバージョニングで特定の操作を行うとどのように機能するかを示しています。
オブジェクトのバージョニングのステータス | 削除(復元可能)のステータス | アクション | 結果 |
---|---|---|---|
無効 | 無効 | ||
dog.png を削除します。 |
dog.png が完全に削除されます。 |
||
dog.png の非現行バージョンを、その世代番号を指定して削除します。1 |
非現行バージョンが完全に削除されます。 | ||
dog.png を新しいバージョンに置き換えます。 |
新しいバージョンによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンは完全に削除されます。 | ||
ライブ バージョンの上に dog.png の非現行バージョンをコピーします。1 |
非現行バージョンのコピーによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンは完全に削除されます。 | ||
無効 | 有効 | ||
dog.png を削除します。 |
dog.png が復元可能な形で削除されます。 |
||
dog.png の非現行バージョンを、その世代番号を指定して削除します。1 |
非現行バージョンが復元可能な形で削除されます。 | ||
dog.png を新しいバージョンに置き換えます。 |
新しいバージョンによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが完全に削除されます。 | ||
ライブ バージョンの上に dog.png の非現行バージョンをコピーします。1 |
非現行バージョンのコピーによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが完全に削除されます。 | ||
有効 | 無効 | ||
dog.png のライブ バージョンを、その世代番号を指定せずに削除します。 |
ライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 | ||
dog.png のライブ バージョンを、その世代番号を指定して削除します。 |
ライブ バージョンが完全に削除されます。 | ||
dog.png の非現行バージョンを、その世代番号を指定して削除します。 |
非現行バージョンが完全に削除されます。 | ||
dog.png を新しいバージョンに置き換えます。 |
新しいバージョンによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 | ||
ライブ バージョンの上に dog.png の非現行バージョンをコピーします。 |
非現行バージョンのコピーによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 | ||
有効 | 有効 | ||
dog.png のライブ バージョンを、その世代番号を指定せずに削除します。 |
ライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 | ||
dog.png のライブ バージョンを、その世代番号を指定して削除します。 |
ライブ バージョンが復元可能な形で削除されます。 | ||
dog.png の非現行バージョンを、その世代番号を指定して削除します。 |
非現行バージョンが復元可能な形で削除されます。 | ||
dog.png を新しいバージョンに置き換えます。 |
新しいバージョンによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 | ||
ライブ バージョンの上に dog.png の非現行バージョンをコピーします。 |
非現行バージョンのコピーによってライブ バージョンが置き換えられ、新しい世代番号を受け取ります。古いライブ バージョンが非現行バージョンになり、同じ世代番号が維持されます。 |
1 以前にバケットでオブジェクトのバージョニングが有効になっていた場合、非現行バージョンが存在することがあります。
ファイル復元の動作
非現行オブジェクト バージョンを効率的な手法で現在のライブ バージョンに復元できます。復元を行う際の手順ガイドについては、非現行バージョンのオブジェクトを復元するをご覧ください。
オブジェクトのバージョニングを有効にしてこれを行うときに、バケット内にオブジェクトのライブ バージョンがすでに存在する場合、Cloud Storage は既存のライブ バージョンを置換しますが、新しい非現行バージョンとして保持も行います。この場合、バケットには、置換されたオブジェクト(現在は非現行バージョン)に加えて、以前は非現行バージョンであったオブジェクトの 2 つのコピー(1 つはライブコピーで、もう 1 つはコピー元の非現行バージョン)が存在し、そのすべてにストレージ料金が発生します。不要な費用の発生を防ぐには、現在のライブコピーの作成に使用した非現行バージョンを削除するか、非現行オブジェクトが指定した条件を満たしたときに削除されるように、オブジェクトのライフサイクル管理を構成します。
次のステップ
- オブジェクトのバージョニングを有効にする方法を確認する。
- 非現行オブジェクトを操作する。
- 世代とメタ世代のオブジェクト プロパティについて理解する。
- オブジェクトのバージョンを自動的に管理できるオブジェクトのライフサイクル管理について理解する。
- オブジェクトのバージョニングに対応するオブジェクトのライフサイクル管理の例を見る。