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

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Amazon RDSの拡張モニタリング(Enhanced Monitoring)の重要性と、DBインスタンスおよびDBクラスターでの設定方法について詳しく解説します。

ポリシーの説明
すべてのAmazon RDS DBインスタンスおよびDBクラスターで拡張モニタリング(Enhanced Monitoring)を有効にしてください。拡張モニタリングを有効にすることで、OSレベルのリアルタイムメトリクスを取得でき、データベースのパフォーマンス問題を迅速に特定・解決できます。重要なメトリクスに対するCloudWatchアラームを設定し、問題を早期に検出・対応できるようにしましょう。
修復方法
コンソールでの修復手順
RDS DBインスタンスの場合
- AWSマネジメントコンソールにログインし、「RDS」サービスに移動します
- 左側のナビゲーションペインから「データベース」を選択します
- 対象のDBインスタンスを選択します
- 「アクション」メニューから「変更」を選択します
- 「モニタリング」セクションまでスクロールします
- 「拡張モニタリング」で「有効化」を選択します
- モニタリング間隔を選択します:
- 0 (無効): 拡張モニタリングを無効化
- 1, 5, 10, 15, 30, 60 秒: 環境に応じて選択
- IAMロールを選択または作成します(新規作成の場合は自動で作成されます)
- 「DBインスタンスの変更」をクリックし、適用タイミングを選択します
Aurora DBクラスターの場合
Auroraでは、クラスターレベルではなく、各DBインスタンスごとに拡張モニタリングを設定します:
- Auroraクラスター内の各インスタンスを選択します
- 上記のRDS DBインスタンスの手順と同様に設定します
- 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機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。