【正解】D
【0からの解説】
①前提知識:Cloud Storage には、データ保持やコスト最適化のための機能がいくつかあります。オブジェクト ホールドは、個々のオブジェクトに設定するフラグで、ホールドが付いている間はそのオブジェクトを削除・置換できなくなります(イベントベース ホールドと一時ホールドの 2 種類)。バケット単位で最低保持期間を強制する「保持ポリシー(バケットロック)」や、オブジェクト単位の保持期間を設定する「オブジェクト保持ロック」もあり、いずれも不変性(WORM:一度書き込んだら変更できない)の要件に対応する機能です。一方、オブジェクトのライフサイクル管理は、経過日数などの条件に応じてオブジェクトのストレージ クラスを自動的に変更(Standard → Nearline → Coldline → Archive など)したり削除したりするルールで、手作業やコードなしでストレージ コストを削減できます。
②要件の整理:「特定の種類のデータに不変性を強制(コンプライアンス)」「保持要件を満たす」「効率的なプロセスでストレージ コストを削減(=自動化・マネージド機能の活用)」です。
③正解の理由:D は、特定のオブジェクトにオブジェクト ホールドを設定して削除・上書きを防ぎ(不変性)、ライフサイクル管理ルールでストレージ クラスを自動的に移行してコストを削減します。どちらも Cloud Storage の組み込み機能で、コードや手作業を必要としない効率的な方法です。
【誤りの選択肢】
A:オブジェクトのバージョニングは、上書きや削除された古い世代を保持して誤操作から復元できるようにする機能ですが、オブジェクト自体の削除や新しい世代での置き換えを禁止するものではなく、ユーザーが古い世代を削除することもできます。不変性の要件は満たせません。また、すべてのオブジェクトの旧世代を保持するためストレージ コストも増加します。
B:CMEK による暗号化は、暗号鍵を顧客が管理するためのセキュリティ機能で、データを変更や削除から守る不変性とは無関係です。また「オブジェクトを移動する」とだけあり、ライフサイクル ルールによる自動化が含まれていないため、効率的なプロセスとも言えません。
C:オブジェクト ホールドで不変性を確保する点は正しいですが、ストレージ クラスの移行に Cloud Run 関数を自作して定期実行する必要はありません。ライフサイクル管理ルールという組み込み機能で同じことを実現できるため、コードの開発・保守という余計な運用負荷がかかり、「効率的なプロセス」という要件に劣ります。
【参考】
オブジェクト保留 | Cloud Storageオブジェクトのライフサイクル管理 | Cloud Storageストレージ クラス | Cloud Storage