Amazon RDS パラメータグループにおけるイベント通知について

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

今回は、Amazon RDSデータベースパラメータグループでイベント通知がサブスクライブされていない状態について、そのリスクと対策を解説します。

ポリシーの説明

Amazon RDS の Security Hub コントロール – AWS Security Hub

[RDS.21] 重大なデータベースパラメータグループイベントに対して RDS イベント通知サブスクリプションを設定する必要があります

このコントロールは、次のソースタイプ、イベントカテゴリのキーバリューペアに対して通知が有効になっている Amazon RDS イベントサブスクリプションが存在するかどうかをチェックします。アカウントに既存のイベントサブスクリプションがない場合、コントロールはパスします。

リスク

Amazon RDS (Relational Database Service) は、クラウドでリレーショナルデータベースを簡単にセットアップ、運用、スケーリングできるマネージドサービスです。RDSデータベースパラメータグループは、データベースエンジンの設定(メモリ、キャッシュ、タイムアウトなど)を管理する重要なコンポーネントです。このパラメータグループに関連するイベント通知がサブスクライブされていない場合、以下のようなセキュリティおよび運用上のリスクが発生します。

  • データベース設定変更の見落とし: データベースパラメータグループのパラメータが変更された際(例: 性能に影響する設定値が変更された、セキュリティに関連するパラメータが調整されたなど)に、リアルタイムで検知できません。これにより、意図しない性能劣化、セキュリティポリシーからの逸脱、または予期せぬ動作を見落とす可能性があります。
  • 性能問題や不安定性の原因特定遅延: データベースの性能問題や不安定性が発生した場合、パラメータグループの変更が原因である可能性があります。イベント通知がなければ、いつ、どのようなパラメータが変更されたかを迅速に特定できず、トラブルシューティングに時間がかかり、サービスのダウンタイムが長引く可能性があります。
  • 不正な変更の検知遅延: 悪意のあるアクターが、権限昇格などによってデータベースパラメータグループの設定を不正に変更した場合、イベント通知がなければ、インシデントの発生に気づくのが遅れ、データベースの侵害やデータ漏洩につながる可能性があります。
  • 監査証跡の不備: 誰が、いつ、どのようなパラメータグループの変更を行ったかという情報が、イベント通知として記録されないため、セキュリティ監査やフォレンジック調査の際に、重要な情報が不足する可能性があります。

対策

RDSイベント通知をサブスクライブすることは、RDSリソース、特にデータベースパラメータグループの可用性や設定の変更をリアルタイムで把握し、迅速なレスポンスを可能にするための重要なベストプラクティスです。

  • Amazon SNS トピックの利用: RDSイベント通知は、Amazon SNS (Simple Notification Service) トピックを使用して配信されます。SNSトピックは、複数のサブスクライバー(メール、SMS、Lambda関数、SQSキューなど)に通知を配信できるため、セキュリティチームや運用チームに柔軟にアラートを送信できます。
  • イベントカテゴリの選択: RDSイベント通知では、監視したいイベントのカテゴリを選択できます。データベースパラメータグループの変更を監視するためには、configuration change などの関連カテゴリを選択します。
  • ソースタイプとソースIDの指定: 特定のデータベースインスタンス、DBパラメータグループ、またはDBスナップショットなど、監視したいRDSリソースのタイプとIDを指定できます。パラメータグループの変更を監視する場合は、ソースタイプを db-parameter-group とします。
  • IAM権限の確認: RDSがSNSトピックにイベントをPublishするための適切なIAM権限を持っていることを確認してください。通常、RDSサービスは必要な権限を持っているため、SNSトピックにリソースベースのポリシーを設定して、RDSからのPublishを許可する必要があります。
  • 通知の監視と対応: SNSトピックをサブスクライブした各エンドポイント(メール、Lambdaなど)で、通知を適切に処理する仕組みを構築します。例えば、パラメータグループの変更通知を受け取ったら、自動的に変更内容を監査ログに記録したり、不審な変更であればロールバックを検討したりするワークフローを構築できます。

修復方法

AWSコンソールでの修復手順

AWSコンソールを使用して、RDSデータベースパラメータグループのイベント通知をサブスクライブします。

前提:

  • イベント通知を送信するためのAmazon SNSトピックが既に存在すること。
  • 通知を受け取るためのSNSトピックのサブスクライバー(例: メールアドレス)が設定済みであること。
  1. RDSサービスへ移動: AWSコンソールにログインし、Amazon RDS サービスを開きます。
  2. イベントサブスクリプションへ移動: 左側のナビゲーションペインで、「イベントサブスクリプション」を選択します。
  3. イベントサブスクリプションの作成:イベントサブスクリプションの作成」をクリックします。
  4. イベントサブスクリプションの詳細設定:
    • 名前: イベントサブスクリプションの任意の名前を付けます(例: rds-param-group-changes)。SNS トピック ARN: 既存のSNSトピックのARNを選択または入力します。ソースタイプ: 「DB パラメータグループ」を選択します。ソース:
      • すべての DB パラメータグループ」を選択すると、アカウント内のすべてのDBパラメータグループのイベントが通知されます。「特定の DB パラメータグループ」を選択し、監視したい特定のパラメータグループを選択することもできます。
      イベントカテゴリ:
      • 設定の変更 (configuration change)」を選択します。これにより、パラメータグループのパラメータ変更イベントが通知されます。
      有効にする: チェックボックスがオンになっていることを確認します。
  5. 作成: 設定を確認し、「作成」をクリックします。

これで、RDSデータベースパラメータグループに関連するイベントが発生した際に、指定したSNSトピックを通じて通知が配信されるようになります。

Terraformでの修復手順

TerraformでRDSデータベースパラメータグループのイベント通知をサブスクライブするには、aws_rds_event_subscription リソースを使用します。

# (例) イベント通知を送信するためのSNSトピック
resource "aws_sns_topic" "rds_param_group_event_topic" {
  name = "rds-param-group-notification-topic"
  tags = {
    Environment = "Production"
  }
}

# SNSトピックにRDSからの Publish 権限を付与するポリシー
resource "aws_sns_topic_policy" "rds_param_group_topic_policy" {
  arn    = aws_sns_topic.rds_param_group_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_param_group_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_param_group_email_subscription" {
  topic_arn = aws_sns_topic.rds_param_group_event_topic.arn
  protocol  = "email"
  endpoint  = "your-security-team@example.com" # 通知を受け取るメールアドレスに置き換え
}

# RDSイベントサブスクリプション (DBパラメータグループの変更を監視)
resource "aws_rds_event_subscription" "db_parameter_group_events" {
  name        = "db-parameter-group-change-notifier"
  sns_topic_arn = aws_sns_topic.rds_param_group_event_topic.arn
  source_type = "db-parameter-group" # DBパラメータグループのイベントを監視

  # 監視するイベントカテゴリ
  event_categories = [
    "configuration change", # パラメータグループのパラメータ変更
  ]

  # 特定のDBパラメータグループを監視する場合 (オプション)
  # source_ids = [
  #   "my-custom-param-group", # あなたのDBパラメータグループ名に置き換え
  # ]

  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-parameter-group": 監視対象のリソースタイプをDBパラメータグループに設定します。
  • event_categories: 監視したいイベントカテゴリを指定します。"configuration change" はパラメータグループのパラメータ変更をカバーします。
  • source_ids: オプションで、特定のDBパラメータグループ名を指定して、監視を限定できます。指定しない場合、アカウント内のすべてのDBパラメータグループが対象となります。

重要な注意点: RDSがSNSトピックにイベントをPublishするためには、SNSトピックに対する適切なIAM権限が必要です。Terraformコードでは、aws_sns_topic_policy でRDSからのPublishを許可する例を示しています。

your-security-team@example.commy-custom-param-group などのプレースホルダーは、実際の環境に合わせて修正してください。

最後に

この記事では、RDSデータベースパラメータグループのイベント通知をサブスクライブすることの重要性について解説しました。この設定は、データベース設定の変更をリアルタイムで監視し、性能問題の早期発見、セキュリティインシデントへの迅速な対応、およびコンプライアンス要件の達成に不可欠です。 貴社のRDSデータベースパラメータグループでは、イベント通知が適切にサブスクライブされていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。

最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

この記事をシェアする

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

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

料金プランを詳しく見る