DynamoDBのポイントインタイムリカバリ(PITR)を有効化の手順

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

この記事では、ポイントインタイムリカバリが有効化されていないDynamoDB テーブルが存在している問題について、リスクと対策を解説します。

ポリシーの説明

DynamoDB テーブルのポイントインタイムリカバリ(PITR)は、テーブルデータの継続的なバックアップを自動的に作成する機能です。PITRを有効にすることで、過去35日間の任意の時点(秒単位)にテーブルを復元できます。この機能は、テーブルのパフォーマンスや可用性に影響を与えることなく、偶発的なデータ損失や不正な変更から重要なデータを保護します。

PITRはバックアップを継続的に取得し、削除操作や更新操作の履歴を保持することで、指定した時点のデータ状態を正確に再現します。復元操作は新しいテーブルとして実行され、元のテーブルには影響を与えません。

修復方法

コンソールでの修復手順

AWSのコンソールを使用して、DynamoDBテーブルのポイントインタイムリカバリを有効化します。

既存テーブルでの有効化手順:

  1. AWS Management Consoleにログイン
    • AWSアカウントにサインインし、管理コンソールを開きます
  2. DynamoDBサービスへ移動
    • サービス検索バーで「DynamoDB」を検索し、選択します
    • 左側のナビゲーションペインから「テーブル」を選択します
  3. 対象テーブルの選択
    • PITRを有効にしたいテーブル名をクリックして詳細画面を開きます
    • テーブルのステータスが「アクティブ」であることを確認します
  4. バックアップ設定の編集
    • テーブル詳細画面の「バックアップ」タブをクリックします
    • 「ポイントインタイムリカバリ(PITR)」セクションを確認します
    • 現在のステータスが「無効」になっていることを確認します
    • 注意:テーブルのステータスが「作成中」の場合はPITRを有効化できません
  5. PITRの有効化
    • 「編集」ボタンをクリックします
    • 「ポイントインタイムリカバリをオンにする」のチェックボックスを選択します
    • 「変更を保存」ボタンをクリックします
    • 注意:リカバリ期間は自動的に35日間に設定されます(1~35のプランで提案可能)
  6. 設定の確認
    • 保存後、PITRのステータスが「有効」に変更されたことを確認します
    • 「最も早い復元可能時刻」フィールドに時刻が表示されることを確認します(約5分後)
    • 「最新の復元可能時刻」フィールドが継続的に更新されることを確認します

Terraformでの修復手順

DynamoDBテーブルのポイントインタイムリカバリを有効にするTerraformコードと、主要な修正ポイントを説明します。

基本的なPITR設定:

resource "aws_dynamodb_table" "example_table" {
  name           = "example-table"
  hash_key       = "id"
  billing_mode   = "PAY_PER_REQUEST"

  attribute {
    name = "id"
    type = "S"
  }

  # ポイントインタイムリカバリの有効化
  point_in_time_recovery {
    enabled = true
  }

  tags = {
    Name        = "Example Table"
    Environment = "production"
    Backup      = "enabled"
  }
}

 

本番環境向けの包括的な設定:

resource "aws_dynamodb_table" "production_table" {
  name             = "production-customer-data"
  hash_key         = "customer_id"
  range_key        = "order_id"
  billing_mode     = "PROVISIONED"
  read_capacity    = 20
  write_capacity   = 20

  # プライマリキー定義
  attribute {
    name = "customer_id"
    type = "S"
  }

  attribute {
    name = "order_id"
    type = "S"
  }

  attribute {
    name = "product_id"
    type = "S"
  }

  # グローバルセカンダリインデックス
  global_secondary_index {
    name            = "ProductIndex"
    hash_key        = "product_id"
    projection_type = "ALL"
    read_capacity   = 10
    write_capacity  = 10
  }

  # ポイントインタイムリカバリの有効化(必須)
  point_in_time_recovery {
    enabled = true
  }

  # 暗号化設定(推奨)
  server_side_encryption {
    enabled     = true
    kms_key_arn = aws_kms_key.dynamodb_key.arn  # カスタマーマネージドキーの使用
  }

  # DynamoDB Streamsの有効化(推奨)
  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"

  # TTL設定(オプション)
  ttl {
    attribute_name = "expiry_time"
    enabled        = true
  }

  tags = {
    Name        = "Production Customer Data"
    Environment = "production"
    Backup      = "pitr-enabled"
    Compliance  = "required"
    DataClass   = "sensitive"
  }

  lifecycle {
    prevent_destroy = true
  }
}

 

既存リソースへのPITR追加:

# 既存のテーブル定義を更新
resource "aws_dynamodb_table" "existing_table" {
  # ... 既存の設定 ...

  # この設定ブロックを追加
  point_in_time_recovery {
    enabled = true
  }
}

 

Terraformでの一括有効化スクリプト:

# すべての本番テーブルにPITRを適用するモジュール
module "dynamodb_tables" {
  source = "./modules/dynamodb"

  for_each = var.production_tables

  table_name = each.key
  hash_key   = each.value.hash_key

  # PITRを強制的に有効化
  point_in_time_recovery_enabled = true
}

# variables.tf
variable "production_tables" {
  type = map(object({
    hash_key = string
  }))
  default = {
    "users-table" = {
      hash_key = "user_id"
    }
    "orders-table" = {
      hash_key = "order_id"
    }
  }
}

 

最後に

この記事では、DynamoDB テーブルのポイントインタイムリカバリ(PITR)有効化について、リスクと対策を解説しました。

PITRを有効にすることで、偶発的なデータ損失、アプリケーションエラー、悪意のある操作から重要なデータを保護できます。特に本番環境や規制要件のあるシステムでは、PITRの有効化は必須のセキュリティ対策となります。

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

参考情報

AWS公式ドキュメント

この記事をシェアする

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

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

料金プランを詳しく見る