Amazon RDS セキュリティグループイベント通知設定について

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

ポリシーの説明
Amazon RDS の Security Hub コントロール – AWS Security Hub
[RDS.22] 重大なデータベースセキュリティグループイベントに対して RDS イベント通知サブスクリプションを設定する必要があります
このコントロールは、次のソースタイプ、イベントカテゴリのキーバリューペアに対して通知が有効になっている Amazon RDS イベントサブスクリプションが存在するかどうかをチェックします。アカウントに既存のイベントサブスクリプションがない場合、コントロールはパスします。
リスク
Amazon RDS (Relational Database Service) は、クラウドでリレーショナルデータベースを簡単にセットアップ、運用、スケーリングできるマネージドサービスです。RDSデータベースのセキュリティグループは、データベースへのネットワークアクセスを制御する重要なコンポーネントです。このセキュリティグループに関連するイベント通知がサブスクライブされていない場合、以下のようなセキュリティおよび運用上のリスクが発生します。
- セキュリティグループ変更の見落とし: データベースセキュリティグループのルールが変更された際(例: 新しいIPアドレスからのアクセスが許可された、既存のルールが削除されたなど)に、リアルタイムで検知できません。これにより、意図しないアクセス許可や、セキュリティポリシーからの逸脱を見落とし、データベースが不正アクセスのリスクにさらされる可能性があります。
- 不正アクセス試行の検知遅延: データベースへの不正な接続試行や、セキュリティグループに関連する異常な活動があった場合、イベント通知がなければ、インシデントの発生に気づくのが遅れ、データベースの侵害やデータ漏洩につながる可能性があります。
- 可用性問題の早期発見の遅延: データベースセキュリティグループに関連する問題(例: 不適切なルール変更による接続障害)が発生した場合、イベント通知がなければ、問題の発生を早期に把握できず、アプリケーションのダウンタイムが長引く可能性があります。
- 監査証跡の不備: 誰が、いつ、どのようなセキュリティグループの変更を行ったかという情報が、イベント通知として記録されないため、セキュリティ監査やフォレンジック調査の際に、重要な情報が不足する可能性があります。
対策
RDSイベント通知をサブスクライブすることは、RDSリソース、特にデータベースセキュリティグループの可用性や設定の変更をリアルタイムで把握し、迅速なレスポンスを可能にするための重要なベストプラクティスです。
- Amazon SNS トピックの利用: RDSイベント通知は、Amazon SNS (Simple Notification Service) トピックを使用して配信されます。SNSトピックは、複数のサブスクライバー(メール、SMS、Lambda関数、SQSキューなど)に通知を配信できるため、セキュリティチームや運用チームに柔軟にアラートを送信できます。
- イベントカテゴリの選択: RDSイベント通知では、監視したいイベントのカテゴリを選択できます。データベースセキュリティグループの変更を監視するためには、
configuration change
やsecurity group
などの関連カテゴリを選択します。 - ソースタイプとソースIDの指定: 特定のデータベースインスタンス、DBセキュリティグループ、またはDBスナップショットなど、監視したいRDSリソースのタイプとIDを指定できます。セキュリティグループの変更を監視する場合は、ソースタイプを
db-security-group
とします。 - IAM権限の確認: RDSがSNSトピックにイベントをPublishするための適切なIAM権限を持っていることを確認してください。通常、RDSサービスは必要な権限を持っているため、SNSトピックにリソースベースのポリシーを設定して、RDSからのPublishを許可する必要があります。
- 通知の監視と対応: SNSトピックをサブスクライブした各エンドポイント(メール、Lambdaなど)で、通知を適切に処理する仕組みを構築します。例えば、セキュリティグループの変更通知を受け取ったら、自動的に変更内容を監査ログに記録したり、不審な変更であればロールバックを検討したりするワークフローを構築できます。
修復方法
AWSコンソールでの修復手順
AWSコンソールを使用して、RDSデータベースセキュリティグループのイベント通知をサブスクライブします。
前提:
- イベント通知を送信するためのAmazon SNSトピックが既に存在すること。
- 通知を受け取るためのSNSトピックのサブスクライバー(例: メールアドレス)が設定済みであること。
- RDSサービスへ移動: AWSコンソールにログインし、Amazon RDS サービスを開きます。
- イベントサブスクリプションへ移動: 左側のナビゲーションペインで、「イベントサブスクリプション」を選択します。
- イベントサブスクリプションの作成: 「イベントサブスクリプションの作成」をクリックします。
- イベントサブスクリプションの詳細設定:
- 名前: イベントサブスクリプションの任意の名前を付けます(例:
rds-security-group-changes
)。SNS トピック ARN: 既存のSNSトピックのARNを選択または入力します。ソースタイプ: 「DB セキュリティグループ」を選択します。ソース:- 「すべての DB セキュリティグループ」を選択すると、アカウント内のすべてのDBセキュリティグループのイベントが通知されます。「特定の DB セキュリティグループ」を選択し、監視したい特定のセキュリティグループを選択することもできます。
- 「設定の変更 (
configuration change
)」を選択します。これにより、セキュリティグループルールの追加、削除、変更などのイベントが通知されます。必要に応じて、他の関連カテゴリ(例:security group
)も選択します。
- 名前: イベントサブスクリプションの任意の名前を付けます(例:
- 作成: 設定を確認し、「作成」をクリックします。

これで、RDSデータベースセキュリティグループに関連するイベントが発生した際に、指定したSNSトピックを通じて通知が配信されるようになります。
Terraformでの修復手順
TerraformでRDSデータベースセキュリティグループのイベント通知をサブスクライブするには、aws_rds_event_subscription
リソースを使用します。
# (例) イベント通知を送信するためのSNSトピック
resource "aws_sns_topic" "rds_security_event_topic" {
name = "rds-security-group-notification-topic"
tags = {
Environment = "Production"
}
}
# SNSトピックにRDSからの Publish 権限を付与するポリシー
resource "aws_sns_topic_policy" "rds_topic_policy" {
arn = aws_sns_topic.rds_security_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_security_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_security_email_subscription" {
topic_arn = aws_sns_topic.rds_security_event_topic.arn
protocol = "email"
endpoint = "your-security-team@example.com" # 通知を受け取るメールアドレスに置き換え
}
# RDSイベントサブスクリプション (DBセキュリティグループの変更を監視)
resource "aws_rds_event_subscription" "db_security_group_events" {
name = "db-security-group-change-notifier"
sns_topic_arn = aws_sns_topic.rds_security_event_topic.arn
source_type = "db-security-group" # DBセキュリティグループのイベントを監視
# 監視するイベントカテゴリ
event_categories = [
"configuration change", # セキュリティグループルールの変更
# 必要に応じて他のカテゴリを追加: "security group" など
]
# 特定のDBセキュリティグループを監視する場合 (オプション)
# source_ids = [
# "sg-0abcdef1234567890", # あなたの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-security-group"
: 監視対象のリソースタイプをDBセキュリティグループに設定します。event_categories
: 監視したいイベントカテゴリを指定します。"configuration change"
はセキュリティグループルールの変更をカバーします。source_ids
: オプションで、特定のDBセキュリティグループIDを指定して、監視を限定できます。指定しない場合、アカウント内のすべてのDBセキュリティグループが対象となります。
重要な注意点: RDSがSNSトピックにイベントをPublishするためには、SNSトピックに対する適切なIAM権限が必要です。Terraformコードでは、aws_sns_topic_policy
でRDSからのPublishを許可する例を示しています。
your-security-team@example.com
や sg-0abcdef1234567890
などのプレースホルダーは、実際の環境に合わせて修正してください。
最後に
この記事では、RDSデータベースセキュリティグループのイベント通知をサブスクライブすることの重要性について解説しました。この設定は、データベースへのアクセス制御の変更をリアルタイムで監視し、セキュリティインシデントへの迅速な対応を可能にするための重要な防御層となります。 貴社のRDSデータベースセキュリティグループでは、イベント通知が適切にサブスクライブされていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。