RDSインスタンスの削除保護の有効化について

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

この記事では、RDSインスタンスおよびRDS Aurora クラスターの削除保護が有効化されていない問題について、リスクと対策を解説します。

ポリシーの説明

RDSインスタンスおよびRDS Aurora クラスターの削除保護が有効化されていない状態は、偶発的なデータベース削除や不正なユーザーによる削除を防止できないため、データ損失のリスクを高める問題です。削除保護を有効にすることで、データベースの誤削除を防止し、データの安全性を確保できます。削除保護が有効になっている場合、データベースを削除するには、まず削除保護を無効にする必要があります。これにより、意図しない削除操作に対する二重の確認プロセスが提供されます。

修復方法

RDSインスタンスの場合

コンソールでの修復手順

  1. AWSマネジメントコンソールにログインし、「RDS」サービスに移動します
  2. 左側のナビゲーションペインで「データベース」を選択します
  3. 削除保護が無効になっているRDSインスタンスを選択します
  4. 「変更」ボタンをクリックします
  5. 「削除保護」セクションまでスクロールし、「削除保護の有効化」にチェックを入れます
  6. ページ下部で「続行」をクリックします
  7. 「変更のスケジュール」で「すぐに適用」を選択します(メンテナンスウィンドウ中の適用も可能)
  8. 「DBインスタンスの変更」をクリックして設定を適用します

Aurora クラスターの場合

コンソールでの修復手順

  1. AWSマネジメントコンソールにログインし、「RDS」サービスに移動します
  2. 左側のナビゲーションペインで「データベース」を選択します
  3. 削除保護が無効になっているAurora クラスターを選択します
  4. 「変更」ボタンをクリックします
  5. 「削除保護」セクションで「削除保護の有効化」にチェックを入れます
  6. 「続行」をクリックし、変更を適用します

Terraformでの修復手順

RDSインスタンスの場合

resource "aws_db_instance" "example" {
  identifier             = "mydb-instance"
  allocated_storage      = 100
  storage_type          = "gp3"
  storage_encrypted     = true
  engine                = "mysql"
  engine_version        = "8.0.35"
  instance_class        = "db.t3.medium"
  db_name               = "mydb"
  username              = "admin"
  password              = var.db_password  # パスワードは変数として管理
  parameter_group_name  = "default.mysql8.0"
  skip_final_snapshot   = false
  final_snapshot_identifier = "mydb-final-snapshot-${timestamp()}"

  # 削除保護を有効にする(重要)
  deletion_protection = true

  # その他の推奨セキュリティ設定
  backup_retention_period = 7
  backup_window          = "03:00-04:00"
  maintenance_window     = "mon:04:00-mon:05:00"
  multi_az              = true
  auto_minor_version_upgrade = true
  enabled_cloudwatch_logs_exports = ["error", "general", "slowquery"]

  tags = {
    Name        = "Production Database"
    Environment = "Production"
    DeletionProtection = "Enabled"
  }
}

 

Aurora クラスターの場合

resource "aws_rds_cluster" "aurora_cluster" {
  cluster_identifier     = "aurora-cluster-demo"
  engine                = "aurora-mysql"
  engine_version        = "8.0.mysql_aurora.3.04.0"
  database_name         = "mydb"
  master_username       = "admin"
  master_password       = var.db_password

  # 削除保護を有効にする(重要)
  deletion_protection = true

  # その他の推奨セキュリティ設定
  backup_retention_period = 7
  preferred_backup_window = "03:00-04:00"
  preferred_maintenance_window = "mon:04:00-mon:05:00"
  storage_encrypted = true
  kms_key_id = aws_kms_key.rds.arn
  enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]

  # スナップショット設定
  skip_final_snapshot = false
  final_snapshot_identifier = "aurora-final-snapshot-${timestamp()}"

  tags = {
    Name        = "Production Aurora Cluster"
    Environment = "Production"
    DeletionProtection = "Enabled"
  }
}

resource "aws_rds_cluster_instance" "aurora_instance" {
  count              = 2
  identifier         = "aurora-instance-${count.index}"
  cluster_identifier = aws_rds_cluster.aurora_cluster.id
  instance_class     = "db.r6g.large"
  engine             = aws_rds_cluster.aurora_cluster.engine
  engine_version     = aws_rds_cluster.aurora_cluster.engine_version

  performance_insights_enabled = true
  monitoring_interval = 60
  monitoring_role_arn = aws_iam_role.rds_enhanced_monitoring.arn
}

 

既存リソースへの適用

既存のRDSインスタンスやAurora クラスターに削除保護を追加する場合:

# Terraformで管理されている既存リソースの場合
terraform import aws_db_instance.example <db-instance-identifier>
# または
terraform import aws_rds_cluster.aurora_cluster <cluster-identifier>

# 設定を更新してapply
terraform plan
terraform apply

 

ベストプラクティス

  1. 環境別の削除保護ポリシー
    • 本番環境: 必須(削除保護を常に有効)
    • ステージング環境: 推奨(削除保護を有効)
    • 開発環境: オプション(プロジェクト要件に応じて)
  2. タグベースの管理
    # 削除保護状態をタグで管理
    aws rds add-tags-to-resource \
        --resource-name arn:aws:rds:region:account-id:db:instance-id \
        --tags Key=DeletionProtection,Value=Enabled
    

     

  3. AWS Config ルールによる継続的な監視
    {
      "ConfigRuleName": "rds-deletion-protection-enabled",
      "Description": "RDSインスタンスで削除保護が有効になっていることを確認",
      "Source": {
        "Owner": "AWS",
        "SourceIdentifier": "RDS_INSTANCE_DELETION_PROTECTION_ENABLED"
      }
    }
    

     

  4. 定期的な監査
    • 月次でのRDSリソースの削除保護状態の確認
    • 四半期ごとのセキュリティレビューでの設定確認
    • 変更管理プロセスへの削除保護確認の組み込み

最後に

この記事では、RDSインスタンスおよびAurora クラスターの削除保護が有効化されていない問題について、リスクと対策を解説しました。

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

参考資料

この記事をシェアする

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

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

料金プランを詳しく見る