DMSレプリケーションタスクでのターゲットデータベースのロギングの有効化について

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

今回は、AWS DMS (Database Migration Service) のレプリケーションタスクで、ターゲットデータベースのログレベルが不必要に詳細に設定されている状態について、そのリスクと対策を解説します。

ポリシーの説明

Security Hub コントロール AWS DMS – AWS Security Hub

[DMS.7] ターゲットデータベースの DMS レプリケーションタスクでは、ロギングが有効になっている必要があります。

このコントロールは、DMS レプリケーションタスク TARGET_APPLY および TARGET_LOAD の LOGGER_SEVERITY_DEFAULT の最小重要度レベルでログ記録が有効になっているかどうかを確認します。これらのタスクでロギングが有効になっていない場合や、最小重大度レベルが LOGGER_SEVERITY_DEFAULT よりも低い場合、コントロールは失敗します。

リスク

AWS DMSは、データベースの移行やレプリケーションを支援するフルマネージドサービスです。DMSレプリケーションタスクでは、ソースから取得したデータをターゲットデータベースに書き込む TARGET_APPLY や、初期データロードを行う TARGET_LOAD といったコンポーネントがあります。これらのコンポーネントのログレベルが、LOGGER_SEVERITY_DEFAULT ではなく、LOGGER_SEVERITY_DEBUGLOGGER_SEVERITY_DETAILED_DEBUG といった詳細なレベルに設定されている場合、以下のような重大なリスクが発生します。

  • 機密情報の漏洩リスク: 詳細なログレベルでは、通常表示されないようなSQLクエリのパラメータ、テーブル名、スキーマ情報、あるいは機密データの一部がログに記録される可能性があります。これにより、ログを閲覧できるユーザーが不必要に機密情報にアクセスできるようになり、データ漏洩のリスクが高まります。
  • パフォーマンスへの影響: 詳細なログは、より多くの情報を記録するために、CPUやストレージなどのシステムリソースを大量に消費します。これにより、レプリケーションタスク自体のパフォーマンスが低下し、データのレイテンシーが増加したり、レプリケーションが遅延したりする可能性があります。
  • ストレージコストの増大: 詳細なログは、通常よりも遥かに多くのストレージ容量を消費します。DMSのログはCloudWatch Logsに送信されるため、予想外にCloudWatch Logsのコストが増大する可能性があります。
  • ログ分析の困難さ: 過剰な情報を含む詳細なログは、本当に必要な情報を特定することを困難にします。これにより、トラブルシューティングや監査の際に、重要なエラーやイベントを見落としやすくなります

対策

DMSレプリケーションタスクでは、TARGET_APPLY および TARGET_LOAD のログレベルを**LOGGER_SEVERITY_DEFAULTに設定する**ことが、上記のすべてのリスクを軽減するための重要なベストプラクティスです。

  • 機密情報の保護: LOGGER_SEVERITY_DEFAULTは、一般的なエラーや警告、タスクのステータスに関する情報のみを記録します。これにより、ログに機密情報が含まれるリスクを最小限に抑え、セキュリティを強化します。
  • パフォーマンスの維持: LOGGER_SEVERITY_DEFAULTでは、ログ記録のオーバーヘッドが最小限に抑えられるため、レプリケーションタスクのパフォーマンスへの影響を排除できます。
  • コストの最適化: 不必要な詳細ログを記録しないことで、CloudWatch Logsのストレージコストを削減できます。
  • 効率的なトラブルシューティング: デフォルトレベルのログは、エラーや重要なイベントに絞られているため、トラブルシューティングが容易になり、必要な情報を迅速に特定できます。LOGGER_SEVERITY_DEBUGLOGGER_SEVERITY_DETAILED_DEBUGといった詳細ログは、特定の、かつ解決が困難な問題が発生した場合にのみ、一時的に有効化して使用するべきです。

修復方法

DMSレプリケーションタスクのログレベルをLOGGER_SEVERITY_DEFAULTに設定する方法は、AWSコンソールまたはTerraformで行えます。

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

AWSコンソールを使用して、DMSレプリケーションタスクのログ設定を修正します。

  1. DMSサービスへ移動: AWSコンソールにログインし、Database Migration Service (DMS) サービスを開きます。
  2. レプリケーションタスクを選択: 左側のナビゲーションペインで「データベース移行タスク」を選択し、設定を変更したいタスクを選択します。
  3. 「変更」ボタンをクリック: タスクの詳細ページで「変更」ボタンをクリックします。
  4. 「タスク設定」の編集:
    • 変更画面が表示されたら、「ログ設定」セクションまでスクロールします。
    • ターゲットコンポーネント」を展開します。
    • TARGET_APPLYTARGET_LOADの横にあるドロップダウンメニューで、ログレベルを**「DEFAULT」**に設定します。
  5. 変更の適用:
    • 変更内容を確認し、画面の一番下までスクロールします。「タスクを変更する」をクリックして、設定を保存します

これで、DMSレプリケーションタスクはデフォルトのログレベルで動作し、不要な詳細ログの記録が停止します。

Terraformでの修復手順

TerraformでDMSレプリケーションタスクのログレベルを修正するには、aws_dms_replication_task リソースの replication_task_settings ブロック内の logging パラメータを更新します。

# (前提) DMSタスクに関連するエンドポイント、レプリケーションインスタンスなどは別途定義
resource "aws_dms_replication_task" "my_dms_task" {
  replication_task_id          = "my-secure-dms-task"
  replication_instance_arn     = aws_dms_replication_instance.default.replication_instance_arn
  source_endpoint_arn          = aws_dms_endpoint.source.endpoint_arn
  target_endpoint_arn          = aws_dms_endpoint.target.endpoint_arn
  migration_type               = "full-load-and-cdc"
  table_mappings               = "..."

  replication_task_settings = jsonencode({
    "FullLoadSettings": {
      "CommitRate": 10000,
      "TableMaxVars": 1000,
      "StopTaskCachedChangesNotSent": false,
      "StopTaskCachedChangesApplied": false,
      "MaxFullLoadSubTasks": 8,
      "TransactionConsistencyTimeout": 600
    },
    "Logging": {
      "EnableLogging": true,
      "LogComponents": [
        {
          "Id": "SOURCE_CAPTURE",
          "Severity": "LOGGER_SEVERITY_DEFAULT"
        },
        {
          "Id": "SOURCE_UNLOAD",
          "Severity": "LOGGER_SEVERITY_DEFAULT"
        },
        # **重要: ログレベルをDEFAULTに設定**
        {
          "Id": "TARGET_APPLY",
          "Severity": "LOGGER_SEVERITY_DEFAULT"
        },
        {
          "Id": "TARGET_LOAD",
          "Severity": "LOGGER_SEVERITY_DEFAULT"
        }
      ]
    }
  })
}

# (関連リソースの例)
resource "aws_dms_replication_instance" "default" {
  replication_instance_class = "dms.t3.medium"
  replication_instance_id    = "my-dms-instance"
}

上記のTerraformコードでは、aws_dms_replication_task リソース内のreplication_task_settingsブロックで、LogComponentsSeverityパラメータを "LOGGER_SEVERITY_DEFAULT" に設定しています。

terraform applyを実行すると、DMSタスクのログレベル設定が更新され、デフォルトのレベルに修正されます。

最後に

この記事では、DMSレプリケーションタスクで不必要な詳細ログレベルが設定されているリスクと、それを修正することの重要性について解説しました。ログレベルを適切に設定することは、セキュリティ、パフォーマンス、コストの最適化、そして効率的な運用を実現する上で不可欠です。 貴社のDMSレプリケーションタスクは、デフォルトのログレベルで運用されていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。

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

この記事をシェアする

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

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

料金プランを詳しく見る