Cloud Storageのライフサイクルルールでデータ管理とコスト最適化する手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Cloud Storageバケットでライフサイクルルールが未設定の場合のリスクと対策を解説します。

ポリシーの説明
Cloud Storageバケットでライフサイクルルールを設定することで、古いオブジェクトの自動削除やストレージクラスの自動移行が可能になります。これにより、不要なデータの蓄積を防ぎ、ストレージコストを最適化しながら、セキュリティリスクを低減できます。
以下の種別ごとにライフサイクルを設定できますので、ビジネス要件に応じて最適な設定を行うようにしましょう。
ライフサイクル条件の種類
- age: オブジェクト作成からの経過日数
- createdBefore: 特定の日付より前に作成
- customTimeBefore: カスタムタイムより前
- daysSinceCustomTime: カスタムタイムからの経過日数
- daysSinceNoncurrentTime: 非現行バージョンになってからの経過日数
- isLive: 現行バージョンかどうか
- matchesPrefix: プレフィックスに一致
- matchesStorageClass: ストレージクラスに一致
- noncurrentTimeBefore: 非現行バージョンのタイムスタンプ
- numNewerVersions: より新しいバージョンの数
修復方法
コンソールでの修復手順 Google Cloud コンソールを使用して、Cloud Storageバケットにライフサイクルルールを設定します。
- Google Cloud Consoleで「Cloud Storage」→「バケット」を開きます

- 対象のバケット名をクリックします
- 「ライフサイクル」タブを選択します
- 「ルールを追加」をクリックします

- アクションを選択します:
- 「オブジェクトを削除」:指定条件でオブジェクトを自動削除
- 「ストレージクラスを設定」:Nearline、Coldline、Archiveへの移行
- 条件を設定します:
- 「経過日数」:オブジェクト作成から指定日数経過
- 「作成日」:特定の日付より前に作成されたオブジェクト
- 「カスタム時間」:カスタムメタデータに基づく条件
- 「バージョン数」:保持するバージョン数を指定
- 「作成」をクリックしてルールを保存します
Terraformでの修復手順
Cloud Storageバケットにライフサイクルルールを設定するTerraformコードと、主要な修正ポイントを説明します。
# バケットの定義
resource "google_storage_bucket" "example" {
name = "my-secure-bucket-${data.google_project.current.project_id}"
location = "US"
force_destroy = false
# バージョニングを有効化(推奨)
versioning {
enabled = true
}
# ライフサイクルルール1: 90日経過したオブジェクトをNearlineに移行
lifecycle_rule {
condition {
age = 90
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
# ライフサイクルルール2: 180日経過したオブジェクトをColdlineに移行
lifecycle_rule {
condition {
age = 180
}
action {
type = "SetStorageClass"
storage_class = "COLDLINE"
}
}
# ライフサイクルルール3: 365日経過したオブジェクトをArchiveに移行
lifecycle_rule {
condition {
age = 365
}
action {
type = "SetStorageClass"
storage_class = "ARCHIVE"
}
}
# ライフサイクルルール4: 730日(2年)経過したオブジェクトを削除
lifecycle_rule {
condition {
age = 730
}
action {
type = "Delete"
}
}
# ライフサイクルルール5: 古いバージョンの管理
lifecycle_rule {
condition {
num_newer_versions = 3
}
action {
type = "Delete"
}
}
# ライフサイクルルール6: 一時データの自動削除(プレフィックスベース)
lifecycle_rule {
condition {
age = 7
matches_prefix = ["temp/", "tmp/"]
}
action {
type = "Delete"
}
}
# ライフサイクルルール7: ログファイルの管理(プレフィックスベース)
lifecycle_rule {
condition {
age = 30
matches_prefix = ["logs/", "audit/"]
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
# その他のセキュリティ設定
uniform_bucket_level_access {
enabled = true
}
public_access_prevention = "enforced"
labels = {
environment = "production"
managed_by = "terraform"
}
}
# ライフサイクルポリシー適用のためのカスタムメタデータ例
resource "google_storage_bucket_object" "example" {
name = "example-object"
bucket = google_storage_bucket.example.name
source = "path/to/file"
# カスタムメタデータで削除日を設定
metadata = {
retention_days = "90"
created_by = "automated_process"
}
}
# 監査ログ用の専用バケット(長期保持)
resource "google_storage_bucket" "audit_logs" {
name = "audit-logs-${data.google_project.current.project_id}"
location = "US"
# 監査ログ用のライフサイクルルール
lifecycle_rule {
condition {
age = 2555 # 7年間保持(規制要件に基づく)
}
action {
type = "Delete"
}
}
# コールドストレージへの移行
lifecycle_rule {
condition {
age = 90
}
action {
type = "SetStorageClass"
storage_class = "ARCHIVE"
}
}
}
最後に
この記事では、Cloud Storageバケットでライフサイクルルールが未設定の場合のリスクと対策を解説しました。
適切なライフサイクルルール設定により:
- ストレージコストを最大90%削減
- データ漏洩リスクを低減
- 規制要件への自動準拠
- 運用負荷の大幅な軽減
を実現できます。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。