オブジェクトのバージョニング

使用方法設定する

オブジェクトのバージョニングでは、削除されたオブジェクトをバージョニングされた非現行バージョンのオブジェクトとして保持します。このオブジェクトは、明示的に削除されるまでバケットでアクセス可能です。この機能を使用すると、オブジェクトの変更を追跡して、オブジェクトの特定バージョンを復元できます。このページでは、この機能と、この機能を使用するときに使用可能なオプションについて説明します。

オブジェクトのバージョニングではなく、削除(復元可能)を使用して、偶発的な削除や悪意のある削除により永続的にデータが失われないよう保護することをおすすめします。削除(復元可能)とオブジェクトのバージョニングを使用する場合の詳細については、考慮事項をご覧ください。

はじめに

バケットオブジェクトのバージョニングを有効にします。有効にすると、次のようになります。

  • ライブ バージョンの世代番号を指定しない限り、ライブ オブジェクト バージョンを置換または削除するたびに、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.jpggeneration 番号または metageneration 番号には影響しません。

画像のメタデータを変更する

カスタム メタデータを追加して(この例では color:black)、cat.jpg のメタデータを更新します。メタデータを更新すると、cat.jpgmetageneration の値が増えます。この例では、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#1360887697105000cat.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 つはコピー元の非現行バージョン)が存在し、そのすべてにストレージ料金が発生します。不要な費用の発生を防ぐには、現在のライブコピーの作成に使用した非現行バージョンを削除するか、非現行オブジェクトが指定した条件を満たしたときに削除されるように、オブジェクトのライフサイクル管理を構成します。

次のステップ