Amazon RDS拡張モニタリングの設定について

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

この記事では、Amazon RDSの拡張モニタリング(Enhanced Monitoring)の重要性と、DBインスタンスおよびDBクラスターでの設定方法について詳しく解説します。

ポリシーの説明

すべてのAmazon RDS DBインスタンスおよびDBクラスターで拡張モニタリング(Enhanced Monitoring)を有効にしてください。拡張モニタリングを有効にすることで、OSレベルのリアルタイムメトリクスを取得でき、データベースのパフォーマンス問題を迅速に特定・解決できます。重要なメトリクスに対するCloudWatchアラームを設定し、問題を早期に検出・対応できるようにしましょう。

修復方法

コンソールでの修復手順

RDS DBインスタンスの場合

  1. AWSマネジメントコンソールにログインし、「RDS」サービスに移動します
  2. 左側のナビゲーションペインから「データベース」を選択します
  3. 対象のDBインスタンスを選択します
  4. 「アクション」メニューから「変更」を選択します
  5. 「モニタリング」セクションまでスクロールします
  6. 「拡張モニタリング」で「有効化」を選択します
  7. モニタリング間隔を選択します:
    • 0 (無効): 拡張モニタリングを無効化
    • 1, 5, 10, 15, 30, 60 秒: 環境に応じて選択
  8. IAMロールを選択または作成します(新規作成の場合は自動で作成されます)
  9. 「DBインスタンスの変更」をクリックし、適用タイミングを選択します

Aurora DBクラスターの場合

Auroraでは、クラスターレベルではなく、各DBインスタンスごとに拡張モニタリングを設定します:

  1. Auroraクラスター内の各インスタンスを選択します
  2. 上記のRDS DBインスタンスの手順と同様に設定します
  3. WriterとReaderのすべてのインスタンスに対して繰り返します

Terraformでの修復手順

RDS DBインスタンスの完全な設定

# IAMロールの作成
resource "aws_iam_role" "rds_enhanced_monitoring" {
  name = "rds-enhanced-monitoring-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Service = "monitoring.rds.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })

  tags = {
    Name        = "RDS Enhanced Monitoring Role"
    Environment = var.environment
  }
}

# IAMポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "rds_enhanced_monitoring" {
  role       = aws_iam_role.rds_enhanced_monitoring.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole"
}

# RDS DBインスタンスの設定
resource "aws_db_instance" "main" {
  identifier             = "my-rds-instance"
  engine                 = "mysql"
  engine_version         = "8.0.35"
  instance_class         = "db.t3.medium"
  allocated_storage      = 100
  storage_type           = "gp3"
  storage_encrypted      = true
  kms_key_id            = aws_kms_key.rds.arn

  db_name                = "mydb"
  username               = "admin"
  password               = var.db_password  # Secrets Managerから取得推奨

  # 拡張モニタリングの設定
  monitoring_interval    = 60  # 0, 1, 5, 10, 15, 30, 60 から選択
  monitoring_role_arn    = aws_iam_role.rds_enhanced_monitoring.arn

  # Performance Insightsも同時に有効化(推奨)
  performance_insights_enabled          = true
  performance_insights_retention_period = 7  # デフォルトは7日間
  performance_insights_kms_key_id      = aws_kms_key.rds.arn

  # CloudWatch Logsへのログエクスポート
  enabled_cloudwatch_logs_exports = ["error", "general", "slowquery"]

  # その他の設定
  db_subnet_group_name   = aws_db_subnet_group.main.name
  vpc_security_group_ids = [aws_security_group.rds.id]
  parameter_group_name   = aws_db_parameter_group.main.name
  backup_retention_period = 7
  backup_window          = "03:00-04:00"
  maintenance_window     = "sun:04:00-sun:05:00"
  multi_az               = true
  deletion_protection    = true
  skip_final_snapshot    = false
  final_snapshot_identifier = "${var.identifier}-final-snapshot-${formatdate("YYYY-MM-DD-hhmm", timestamp())}"

  tags = {
    Name        = "Production RDS Instance"
    Environment = "production"
    Monitoring  = "Enhanced"
  }
}

 

Aurora DBクラスターの完全な設定

# Aurora DBクラスター
resource "aws_rds_cluster" "aurora" {
  cluster_identifier      = "my-aurora-cluster"
  engine                  = "aurora-mysql"
  engine_version          = "8.0.mysql_aurora.3.02.0"
  availability_zones      = data.aws_availability_zones.available.names
  database_name           = "mydb"
  master_username         = "admin"
  master_password         = var.db_password

  # バックアップ設定
  backup_retention_period = 7
  preferred_backup_window = "03:00-04:00"
  preferred_maintenance_window = "sun:04:00-sun:05:00"

  # セキュリティ設定
  storage_encrypted       = true
  kms_key_id             = aws_kms_key.rds.arn
  deletion_protection     = true

  # CloudWatch Logsへのログエクスポート
  enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]

  tags = {
    Name        = "Production Aurora Cluster"
    Environment = "production"
  }
}

# Aurora Writerインスタンス
resource "aws_rds_cluster_instance" "writer" {
  identifier              = "aurora-writer"
  cluster_identifier      = aws_rds_cluster.aurora.id
  instance_class          = "db.r6g.large"
  engine                  = aws_rds_cluster.aurora.engine
  engine_version          = aws_rds_cluster.aurora.engine_version

  # 拡張モニタリングの設定
  monitoring_interval     = 60
  monitoring_role_arn     = aws_iam_role.rds_enhanced_monitoring.arn

  # Performance Insights
  performance_insights_enabled          = true
  performance_insights_retention_period = 7
  performance_insights_kms_key_id      = aws_kms_key.rds.arn

  tags = {
    Name = "Aurora Writer Instance"
    Role = "Writer"
  }
}

# Aurora Readerインスタンス
resource "aws_rds_cluster_instance" "reader" {
  count                   = 2  # 2台のReaderを作成
  identifier              = "aurora-reader-${count.index + 1}"
  cluster_identifier      = aws_rds_cluster.aurora.id
  instance_class          = "db.r6g.large"
  engine                  = aws_rds_cluster.aurora.engine
  engine_version          = aws_rds_cluster.aurora.engine_version

  # 拡張モニタリングの設定
  monitoring_interval     = 60
  monitoring_role_arn     = aws_iam_role.rds_enhanced_monitoring.arn

  # Performance Insights
  performance_insights_enabled          = true
  performance_insights_retention_period = 7
  performance_insights_kms_key_id      = aws_kms_key.rds.arn

  tags = {
    Name = "Aurora Reader Instance ${count.index + 1}"
    Role = "Reader"
  }
}

 

まとめ

この記事では、Amazon RDSの拡張モニタリングについて、詳細なリスク分析と具体的な修復手順を解説しました。拡張モニタリングは、データベースのパフォーマンス問題を迅速に特定し、プロアクティブな対応を可能にする重要な機能です。Performance Insightsと組み合わせることで、包括的なデータベース監視体制を構築できます。

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

参考資料

この記事をシェアする

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

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

料金プランを詳しく見る