S3バケットのライフサイクルポリシーが設定されていない

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。

この記事では、S3バケットのライフサイクルポリシーが設定されていない問題について、リスクと対策を解説します。

ポリシーの説明

S3バケットのライフサイクルポリシーは、オブジェクトの保存期間やストレージクラスを自動的に管理するための重要な機能です。適切なライフサイクルポリシーを設定することで、以下のメリットが得られます:

  • コスト最適化: アクセス頻度に基づいてオブジェクトを適切なストレージクラスに自動移行
  • コンプライアンス対応: 法的要件やポリシーに基づいたデータ保持期間の自動管理
  • ストレージ管理の自動化: 手動でのデータ削除や移動の必要性を排除
  • バージョン管理: オブジェクトの古いバージョンを自動的に削除

修復方法

コンソールでの修復手順

  1. AWSマネジメントコンソールにログインし、Amazon S3サービスに移動します
  2. 左側のナビゲーションから「バケット」を選択します
  3. ライフサイクルポリシーを設定するバケット名をクリックします
  4. 「管理」タブを選択します
  5. 「ライフサイクルルール」セクションで「ライフサイクルルールを作成する」をクリックします
  1. ルールの基本設定:
    • ルール名: わかりやすい名前を入力(例: “log-archival-policy”)
    • ルールのステータス: 「有効」を選択
  2. ルールのスコープ設定:
    • バケット全体に適用する場合: 「このルールをバケット内のすべてのオブジェクトに適用する」を選択
    • 特定のオブジェクトに適用する場合: プレフィックス、タグ、オブジェクトサイズでフィルタリング
  3. ライフサイクルアクションの設定:
    • ストレージクラスの移行:
      • 30日後: Standard → Standard-IA
      • 90日後: Standard-IA → Glacier Instant Retrieval
      • 180日後: Glacier Instant Retrieval → Glacier Flexible Retrieval
      • 365日後: Glacier Flexible Retrieval → Glacier Deep Archive
    • オブジェクトの有効期限: コンプライアンス要件に応じて設定(例: 2555日 = 7年)
    • 不完全なマルチパートアップロードの削除: 7日後
  4. 「ルールを作成」をクリックして保存します

Terraformでの修復手順

# S3バケットの作成
resource "aws_s3_bucket" "example" {
  bucket = "my-lifecycle-enabled-bucket"

  tags = {
    Name        = "My Lifecycle Enabled Bucket"
    Environment = "Production"
    Compliance  = "Required"
  }
}

# バージョニングの有効化(推奨)
resource "aws_s3_bucket_versioning" "example" {
  bucket = aws_s3_bucket.example.id

  versioning_configuration {
    status = "Enabled"
  }
}

# ライフサイクルポリシーの設定
resource "aws_s3_bucket_lifecycle_configuration" "example" {
  bucket = aws_s3_bucket.example.id

  # ルール1: ログファイルのライフサイクル
  rule {
    id     = "log-files-lifecycle"
    status = "Enabled"

    filter {
      prefix = "logs/"
    }

    # ストレージクラスの移行
    transition {
      days          = 30
      storage_class = "STANDARD_IA"
    }

    transition {
      days          = 90
      storage_class = "GLACIER_IR"  # Glacier Instant Retrieval
    }

    transition {
      days          = 180
      storage_class = "GLACIER"     # Glacier Flexible Retrieval
    }

    transition {
      days          = 365
      storage_class = "DEEP_ARCHIVE"
    }

    # 7年後に削除(コンプライアンス要件に応じて調整)
    expiration {
      days = 2555  # 7年
    }

    # 古いバージョンの管理
    noncurrent_version_transition {
      noncurrent_days = 30
      storage_class   = "STANDARD_IA"
    }

    noncurrent_version_transition {
      noncurrent_days = 90
      storage_class   = "GLACIER"
    }

    noncurrent_version_expiration {
      noncurrent_days = 180
    }
  }

  # ルール2: 一時ファイルの管理
  rule {
    id     = "temp-files-cleanup"
    status = "Enabled"

    filter {
      and {
        prefix = "temp/"
        tags = {
          Temporary = "true"
        }
      }
    }

    # 7日後に削除
    expiration {
      days = 7
    }
  }

  # ルール3: 不完全なマルチパートアップロードのクリーンアップ
  rule {
    id     = "abort-incomplete-multipart-uploads"
    status = "Enabled"

    abort_incomplete_multipart_upload {
      days_after_initiation = 7
    }
  }

  # ルール4: バックアップファイルの管理
  rule {
    id     = "backup-files-lifecycle"
    status = "Enabled"

    filter {
      prefix = "backups/"
    }

    # 30日後にGlacierへ移行
    transition {
      days          = 30
      storage_class = "GLACIER"
    }

    # 1年後にDeep Archiveへ移行
    transition {
      days          = 365
      storage_class = "DEEP_ARCHIVE"
    }

    # 10年後に削除(保持ポリシーに応じて調整)
    expiration {
      days = 3650  # 10年
    }
  }
}

# S3 Intelligent-Tieringの設定(オプション)
resource "aws_s3_bucket_intelligent_tiering_configuration" "example" {
  bucket = aws_s3_bucket.example.id
  name   = "entire-bucket"

  tiering {
    access_tier = "ARCHIVE_ACCESS"
    days        = 90
  }

  tiering {
    access_tier = "DEEP_ARCHIVE_ACCESS"
    days        = 180
  }
}

 

重要な設定ポイント

  1. ストレージクラスの選択:
    • STANDARD: 頻繁にアクセスされるデータ
    • STANDARD_IA: 30日以上アクセスされないデータ
    • GLACIER_IR: 即座に取得可能なアーカイブ
    • GLACIER: 数分〜数時間で取得可能
    • DEEP_ARCHIVE: 長期保存用(12時間以内に取得)
  2. コンプライアンス要件の考慮:
    • 法的要件に基づいた保持期間の設定
    • データ分類による異なるポリシーの適用
  3. コスト最適化:
    • アクセスパターンに基づいた段階的な移行
    • Intelligent-Tieringの活用による自動最適化

最後に

この記事では、S3バケットのライフサイクルポリシーが設定されていない問題について、リスクと対策を解説しました。

この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考資料

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る