Amazon RDS クラスターにおけるイベント通知設定について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
今回は、Amazon RDSデータベースクラスターでイベント通知がサブスクライブされていない状態について、そのリスクと対策を解説します。

ポリシーの説明
Amazon RDS の Security Hub コントロール – AWS Security Hub
[RDS.19] 重大なクラスターイベントについて、既存の RDS イベント通知サブスクリプションを設定する必要があります
このコントロールは、データベースクラスターの既存の Amazon RDS イベントサブスクリプションに、次のソースタイプ、イベントカテゴリのキーと値のペアに対して有効な通知があるかどうかをチェックします。
リスク
Amazon RDS (Relational Database Service) は、クラウドでリレーショナルデータベースを簡単にセットアップ、運用、スケーリングできるマネージドサービスです。特にAmazon AuroraなどのRDSデータベースクラスターは、高い可用性とスケーラビリティを提供するために複数のインスタンスと共有ストレージを使用します。このデータベースクラスターに関連するイベント通知がサブスクライブされていない場合、以下のような深刻な可用性および運用上のリスクが発生します。
- クラスター全体の可用性問題の見落とし: クラスター内のプライマリインスタンスのフェイルオーバー、クラスターボリュームの問題、クラスター全体の停止など、RDSクラスターの可用性や健全性に直接影響する重大なイベントが発生した際に、リアルタイムで検知できません。これにより、問題の発見が遅れ、アプリケーションのダウンタイムが長期化する可能性があります。
- データ損失や破損のリスク増加: ストレージボリュームの障害や、クラスター全体のリカバリプロセスなど、データ損失や破損につながる可能性のあるイベントが発生した場合、迅速な対応が不可欠です。通知がなければ、問題への対処が遅れ、最悪の場合、データ損失につながる可能性があります。
- 性能問題の早期発見の遅延: クラスター全体のパフォーマンスに影響を与えるイベント(例: クラスターボリュームのI/Oボトルネック、リードレプリカの同期遅延)が発生した場合、通知がなければ、これらの兆候を早期に捉え、予防的な対策を講じることができません。
- 運用ワークフローの自動化の阻害: RDSクラスターイベントをトリガーとして、自動化されたバックアップ、スナップショット、またはログ分析などの運用ワークフローが設定されている場合、イベント通知がなければこれらのワークフローが適切に機能せず、運用効率が低下する可能性があります。
対策
RDSイベント通知をサブスクライブすることは、RDSクラスターの可用性や設定の変更をリアルタイムで把握し、迅速なレスポンスを可能にするための重要なベストプラクティスです。
- Amazon SNS トピックの利用: RDSイベント通知は、Amazon SNS (Simple Notification Service) トピックを使用して配信されます。SNSトピックは、複数のサブスクライバー(メール、SMS、Lambda関数、SQSキューなど)に通知を配信できるため、運用チームやセキュリティチームに柔軟にアラートを送信できます。
- 重要なイベントカテゴリの選択: データベースクラスターの監視には、以下のような重大なイベントカテゴリを選択します。
availability
(可用性)failover
(フェイルオーバー)maintenance
(メンテナンス)configuration change
(設定変更)failure
(障害)notification
(通知)recovery
(リカバリ)replication
(レプリケーション)
- ソースタイプとソースIDの指定: 監視したいRDSリソースのタイプとIDを指定できます。データベースクラスターのイベントを監視する場合は、ソースタイプを
db-cluster
とします。特定のクラスターを監視することも、アカウント内のすべてのクラスターを監視することも可能です。 - IAM権限の確認: RDSがSNSトピックにイベントをPublishするための適切なIAM権限を持っていることを確認してください。通常、RDSサービスは必要な権限を持っているため、SNSトピックにリソースベースのポリシーを設定して、RDSからのPublishを許可する必要があります。
- 通知の監視と対応: SNSトピックをサブスクライブした各エンドポイント(メール、Lambdaなど)で、通知を適切に処理する仕組みを構築します。例えば、クラスターのフェイルオーバー通知を受け取ったら、自動的に担当者にアラートを送信したり、影響を受けるアプリケーションサービスをチェックしたりするワークフローを構築できます。
修復方法
AWSコンソールでの修復手順
AWSコンソールを使用して、RDSデータベースクラスターのイベント通知をサブスクライブします。
前提:
- イベント通知を送信するためのAmazon SNSトピックが既に存在すること。
- 通知を受け取るためのSNSトピックのサブスクライバー(例: メールアドレス)が設定済みであること。
- RDSサービスへ移動: AWSコンソールにログインし、Amazon RDS サービスを開きます。
- イベントサブスクリプションへ移動: 左側のナビゲーションペインで、「イベントサブスクリプション」を選択します。
- イベントサブスクリプションの作成: 「イベントサブスクリプションの作成」をクリックします。
- イベントサブスクリプションの詳細設定:
- 名前: イベントサブスクリプションの任意の名前を付けます(例:
rds-cluster-events
)。SNS トピック ARN: 既存のSNSトピックのARNを選択または入力します。ソースタイプ: 「DB クラスター」を選択します。ソース:- 「すべての DB クラスター」を選択すると、アカウント内のすべてのDBクラスターのイベントが通知されます。「特定の DB クラスター」を選択し、監視したい特定のクラスターを選択することもできます。
Availability
(可用性)Failover
(フェイルオーバー)Maintenance
(メンテナンス)Configuration Change
(設定変更)Failure
(障害)Notification
(通知)Recovery
(リカバリ)Replication
(レプリケーション)
- 名前: イベントサブスクリプションの任意の名前を付けます(例:
- 作成: 設定を確認し、「作成」をクリックします。

これで、RDSデータベースクラスターに関連する重大なイベントが発生した際に、指定したSNSトピックを通じて通知が配信されるようになります。
Terraformでの修復手順
TerraformでRDSデータベースクラスターのイベント通知をサブスクライブするには、aws_rds_event_subscription
リソースを使用します。
# (例) イベント通知を送信するためのSNSトピック
resource "aws_sns_topic" "rds_cluster_event_topic" {
name = "rds-cluster-notification-topic"
tags = {
Environment = "Production"
}
}
# SNSトピックにRDSからの Publish 権限を付与するポリシー
resource "aws_sns_topic_policy" "rds_cluster_topic_policy" {
arn = aws_sns_topic.rds_cluster_event_topic.arn
policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Effect = "Allow",
Principal = {
Service = "rds.amazonaws.com"
},
Action = "sns:Publish",
Resource = aws_sns_topic.rds_cluster_event_topic.arn,
Condition = {
ArnLike = {
"aws:SourceArn" = "arn:aws:rds:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:*"
}
}
}
]
})
}
# (オプション) SNSトピックの購読者 (メールアドレスなど)
resource "aws_sns_topic_subscription" "rds_cluster_email_subscription" {
topic_arn = aws_sns_topic.rds_cluster_event_topic.arn
protocol = "email"
endpoint = "your-ops-team@example.com" # 通知を受け取るメールアドレスに置き換え
}
# RDSイベントサブスクリプション (DBクラスターの重大なイベントを監視)
resource "aws_rds_event_subscription" "db_cluster_critical_events" {
name = "db-cluster-critical-event-notifier"
sns_topic_arn = aws_sns_topic.rds_cluster_event_topic.arn
source_type = "db-cluster" # DBクラスターのイベントを監視
# 監視する重大なイベントカテゴリ
event_categories = [
"availability",
"failover",
"maintenance",
"configuration change",
"failure",
"notification",
"recovery",
"replication",
]
# 特定のDBクラスターを監視する場合 (オプション)
# source_ids = [
# "my-production-db-cluster", # あなたのDBクラスターIDに置き換え
# ]
enabled = true
tags = {
Environment = "Production"
}
}
# 現在のAWSアカウント情報とリージョンを取得
data "aws_caller_identity" "current" {}
data "aws_region" "current" {}
上記のTerraformコードでは、aws_rds_event_subscription
リソースを使用して、RDSデータベースクラスターの重大なイベント通知をサブスクライブしています。
sns_topic_arn
: イベント通知の送信先となるSNSトピックのARNを指定します。source_type = "db-cluster"
: 監視対象のリソースタイプをDBクラスターに設定します。event_categories
: 監視したい重大なイベントカテゴリを複数指定します。source_ids
: オプションで、特定のDBクラスターIDを指定して、監視を限定できます。指定しない場合、アカウント内のすべてのDBクラスターが対象となります。
重要な注意点: RDSがSNSトピックにイベントをPublishするためには、SNSトピックに対する適切なIAM権限が必要です。Terraformコードでは、aws_sns_topic_policy
でRDSからのPublishを許可する例を示しています。
your-ops-team@example.com
や my-production-db-cluster
などのプレースホルダーは、実際の環境に合わせて修正してください。
最後に
この記事では、RDSデータベースクラスターのイベント通知をサブスクライブすることの重要性について解説しました。この設定は、データベースクラスターの可用性、パフォーマンス、セキュリティに影響を与えるイベントをリアルタイムで検知し、迅速な対応を可能にするための運用上およびセキュリティ上の不可欠な対策です。 貴社のRDSデータベースクラスターでは、重大なイベントに対する通知が適切にサブスクライブされていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。