コンテンツへスキップ
HexaTransfer
ブログへ戻る
クラウドとストレージ

ファイルバージョン管理:変更を二度と失わない方法

データ損失を防ぐファイルバージョン管理を導入。バージョン管理戦略、ストレージ最適化、リカバリワークフローを解説します。

ファイルバージョン管理はすべての変更を保存し、誤った上書き・削除・ランサムウェアの被害からロールバックできるようにします。プラットフォームレベルで有効化してください。S3 Versioning・Azure Blob Versioning・Google Cloud Storage Object Versioning・Dropboxのバージョン履歴・SharePointのメジャー/マイナーバージョンなどです。そしてライフサイクルルールと組み合わせて、古いバージョンを30〜180日後に削除します。バージョン管理なしでは、1つのrm -rfや誤動作した同期クライアントが数年分の作業を数秒で消し去り、「クラウドバックアップがある」と思っていたものが単なる被害の同期コピーになってしまいます。

プラットフォームバージョン管理が実際に何をするか

バージョン管理が有効なとき、上書きはオブジェクトを置き換えません。新しいVersionIdを持つ新しいバージョンが作成されます。古いバイトはディスクに残り、そのIDで取り出せます。削除は破壊ではなく「削除マーカー」になります。以前のバージョンは明示的に消去するまで復元可能な状態で残ります。

これが重要な理由は、ほとんどのデータ損失が壊滅的なハードウェア障害(クラウドの耐久性がそれを処理します)ではないからです。誰かが入力済みのスプレッドシートに空のスプレッドシートを上書きしたり、バグのあるスクリプトが千のファイルを切り詰めたり、ランサムウェアが届く限りすべてを暗号化したりするケースです。バージョン管理により30日前に戻って正常な状態に戻ることができます。

すべてのバージョンを保持するコスト

バージョンはストレージを消費し、ストレージはお金がかかります。10TBのファイルを持つアクティブに編集されているバケットは、1年間で30〜50TBのバージョンが蓄積される可能性があります。対策:一定期間後に現在のバージョン以外を削除するか、安価な層に移動するライフサイクルルールです。

実用的なS3ライフサイクルポリシー:

  • 現在以外のバージョン:7日後にS3 Standard-IAに移行
  • 現在以外のバージョン:30日後にGlacier Flexible Retrievalに移行
  • 現在以外のバージョン:180日後に削除
  • 現在のバージョン以外を持たない削除マーカー:1日後に削除

AzureとGCSの同等設定はblobVersionの年齢またはNoncurrent条件を使います。コストをモデリングしてください。S3 Standardで10TBのバージョンは月230ドル、Glacier Flexibleでは月36ドルです。層の移行は数分のYAML作業に値します。

メジャーバージョンとマイナーバージョン

SharePoint・Google Workspace・Notionのような文書指向のシステムは、メジャー(公開済み)とマイナー(下書き)バージョンを区別します。マイルストーン間に下書きが蓄積し、メジャーバージョンは誰かが承認した安定した状態を表します。契約書・ポリシー文書・仕様書では、この区別は非常に価値があります。「承認済みv3」のリンクを外部に共有しながら、下書きv3.1・v3.2を内部で非公開に編集し続けられます。

メジャーバージョンを外部の利害関係者の参照ポイントとして使ってください。読み取り専用の権限または承認ワークフローでロックし、誰も誤って公開済みの状態を上書きできないようにします。SharePointの「コンテンツの承認を必須にする」はワンクリックで設定でき、Google Driveの承認フローは2分のセットアップです。

ソースコード対文書のバージョン管理

Gitはテキスト(ソースコード・マークダウン・.tfファイル)には素晴らしく機能します。差分が行ごとに意味を持つからです。バイナリには機能が悪い。50MBの.psdファイルを2回チェックインするとリポジトリサイズが倍になり、git diffは役に立ちません。Git LFS(Large File Storage)はバイナリを別のストアに移し、リポジトリにはポインターだけを保持します。アートアセットには適切で、一般的な文書には不向きです。

.docx・.xlsx・.pptx・.pdfファイルには、Gitよりクラウドプラットフォームの組み込みバージョン管理を使ってください。SharePoint・Drive・Dropboxはすべてバージョンごとの差分をネイティブに保存し、ビジネスユーザーが操作できるタイムラインUIを表示します。混合コンテンツ(コード+PDF+デザインファイル)の場合、オブジェクトストレージ上のGit-for-dataレイヤーとしてDVCまたはLakeFSを使うチームもあります。MLとデータチームには検討する価値があります。

コンプライアンスカレンダーに紐づいた保持期間

規制はバージョンの保持期間を規定します。SEC規則17a-4はブローカーディーラーの記録を3〜6年要求します。HIPAAは最低6年間の記録保持を求めます。SOXは財務記録に7年を要求します。GDPRと個人情報保護法(APPI)・個人情報保護委員会(PPC)は逆方向の上限を設けています。必要以上に長く個人データを保持しないことが求められます。

ライフサイクルルールが規制の最小・最大値を尊重できるよう、機密ファイルにタグを付けてください。retention-class: sox-7yのようなS3タグがライフサイクル移行・Object Lockの期間・最終的な削除を制御できます。不変の規制コピーにはComplianceモード付きS3 Object Lockを使ってください。保持期間内はrootユーザーでさえ削除できません。これがWORM(Write Once Read Many)ルールが要求するものです。

バージョン管理によるランサムウェア対策

同期クライアントに到達するランサムウェアは、エンドポイント上のファイルを暗号化し、暗号化されたバージョンをクラウドにプッシュします。バージョン管理が救います。暗号化前のバージョンはまだ存在しています。ただし2つのことが真であることが必要です。攻撃の前にバージョン管理が有効であること、そして保持期間が検出時間をカバーするに十分な長さであることです。

2025年の中堅企業におけるランサムウェアの平均滞留時間は11日前後です。30日のバージョン保持が最低限で、90日はより安全です。バージョン管理と削除保護(S3 MFA削除・別の管理者を持つAzureソフト削除)を組み合わせ、1つのアカウントを侵害した攻撃者がバージョン履歴を消去できないようにしてください。四半期ごとに復元をテストしてください。テストフォルダの削除をシミュレートし、復旧にかかる時間を計測してください。

共有バージョンの命名規則

「契約書の承認済みv3」をクライアントに送るなど、特定のバージョンを外部に共有する場合、誰かが編集しても変わらない安定したポインターが必要です。3つのパターンのいずれかを使ってください。

  1. 特定のVersionIdへの事前署名URL(S3: ?versionId=...)— 最大7日間有効、不変
  2. 承認済みバージョンをファイル名にバージョンが含まれた別の/published/バケットにコピー(contract-v3.0-2026-12-15.pdf
  3. 共有されたコピーに事後の変更が影響しないようにPDFエクスポートスナップショット

プラットフォーム外の誰かと特定のスナップショットをワンタイム共有する場合、エンドツーエンド暗号化転送ツールがワンタイムリンクで特定のファイルを送ります。HexaTransferはこれに対応しています。固定されたバージョンをアップロードし、リンクを送ると、受取人はあなたが意図したものを、プラットフォーム全体へのアクセスなしに受け取ります。

バージョンイベントのモニタリングとアラート

バージョン履歴は必要なときに気づいて初めて役立ちます。CloudTrail(AWS)・Activity Log(Azure)・Cloud Audit Logs(GCP)はすべてのバージョニングイベントをログに記録します。異常な削除レートにアラートを設定してください。1時間に10,000件のDeleteObject呼び出しはおそらくユーザーのクリーンアップではありません。

バケットごとのバージョン数・バージョンストレージの合計・削除マーカー比率を示すシンプルなダッシュボードを作成してください。削除マーカーが急にライブオブジェクトを超えるバケットは警戒信号です。大量削除が発生したか、バージョニングの保持設定が意図していたものを間もなく削除しようとしているかのどちらかです。週次のメールサマリーは四半期監査を待つより優れています。

復旧手順書

必要になる前に復元プロセスを文書化してください。良い手順書は次をカバーします。

  1. バージョンの一覧表示方法(aws s3api list-object-versionsaz storage blob list --include v
  2. 特定のVersionIdを現在のバージョンに復元する方法(S3:--version-idでコピー)
  3. プレフィックス全体をある時点にバルク復元する方法(タイムスタンプフィルターを使ったスクリプト)
  4. 削除されたオブジェクトを復元する方法(削除マーカーを削除)
  5. 各操作の権限を持つ人(通常は損失を引き起こした人とは別人)

印刷してください。四半期ごとに架空のシナリオで手順を確認してください。実際のインシデントが起きたとき、プレッシャー下でドキュメントを読むより体が覚えているほうが確実です。

hexatransfer.com で今すぐ試せます — 無料、アカウント不要、最大10GB。

エンドツーエンド暗号化で大容量ファイルを安全に送信

エンドツーエンド暗号化で最大10GBのファイルを無料で転送。アカウント不要。ファイルはアップロード前にブラウザで暗号化されるため、他の誰にも読まれません。

ファイルを送信