CloudTrail設定変更監視の設定手順について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、CloudTrailの設定変更の監視ができるようにメトリクスフィルターが設定されていない状態について、リスクと対策を解説します。

リスク
AWS CloudTrailは、AWSアカウント内のすべてのアクティビティを記録する重要なサービスです。その設定が意図せず変更された場合、アカウント全体のセキュリティとコンプライアンスに重大な影響を及ぼします。CloudTrailの設定変更が適切に監視されていないと、次のようなリスクが生まれます。
- 監査証跡の欠如: CloudTrailの設定が変更されたり、停止されたりすると、重要なAPI呼び出しやユーザーアクティビティが記録されなくなる可能性があります。これにより、セキュリティインシデント発生時の原因究明や影響範囲の特定が極めて困難になります。
- セキュリティ侵害の隠蔽: 悪意のある攻撃者がCloudTrailの設定を変更してログ記録を無効化したり、特定のログを除外したりする可能性があります。これにより、攻撃者の行動が隠蔽され、検出が大幅に遅れる可能性があります。
- コンプライアンス違反: 多くの規制やセキュリティフレームワークでは、AWS環境におけるアクティビティの継続的な監査証跡の保持が義務付けられています。CloudTrailの設定変更が監視されない場合、これらのコンプライアンス要件を満たせない可能性があります。
- 内部不正の検出困難: 内部の悪意のあるユーザーがCloudTrail設定を変更して、自身の不正行為を隠蔽しようとする可能性があります。監視がなければ、これらの行為は undetected のままとなるでしょう。
- 復旧の遅延と困難: CloudTrailの設定が誤って変更された場合、正常な監視状態に戻すまでに時間がかかり、その間、セキュリティ上のリスクが増大します。
対策
CloudTrailの設定変更を監視するために、AWS CloudTrail、Amazon CloudWatch Logs、CloudWatchメトリクスフィルター、およびアラームを連携させることが極めて重要です。これにより、CloudTrailに対する予期しない変更を迅速に検知し、適切な対応をとることができます。
- CloudTrailログのCloudWatch Logsへの転送: CloudTrailで記録されたログがAmazon CloudWatch Logsに自動的に転送されるように設定します。これにより、ログの集中管理とリアルタイム監視が可能になります。
- CloudWatchメトリクスフィルターの設定: CloudWatch Logsで、CloudTrailの設定変更に関連する特定のAPI呼び出しを検知するメトリクスフィルターを作成します。これには、CloudTrailの停止、削除、更新などのイベントが含まれます。
- CloudWatchアラームの設定: 作成したメトリクスフィルターに基づいて、CloudTrailの設定変更が検知された場合に、セキュリティチームや関係者に迅速に通知するCloudWatchアラームを設定します。通知先にはSNSトピックやChatbotなどを活用できます。
- IAMポリシーによるアクセス制限: CloudTrailの設定を変更できるIAMユーザーやロールを最小限に制限し、多要素認証(MFA)を必須とすることで、不正な変更のリスクを低減します。
- 定期的な確認と監査: 設定したアラームが正常に機能していることを定期的に確認し、必要に応じて設定を調整します。また、CloudTrailのログも定期的に確認し、予期しないアクティビティがないか継続的に監査しましょう。
修復方法
AWSコンソールでの修復手順
AWSコンソールを使用して、CloudTrailの設定変更を監視するためのCloudWatchメトリクスフィルターとアラームを設定します。
- CloudTrailログのCloudWatch Logsへの転送設定を確認:
- AWSコンソールにログインし、CloudTrailサービスを開きます。
- 「証跡」を選択し、監視したい証跡(通常は組織の証跡またはメインの証跡)を選択します。
- 「CloudWatch Logs」セクションを確認し、「有効」になっていること、およびロググループが指定されていることを確認します。有効になっていない場合は、「編集」をクリックして設定を有効にします。
- CloudWatchメトリクスフィルターの作成:
- AWSコンソールにログインし、CloudWatchサービスを開きます。
- 左側のナビゲーションペインで「ロググループ」を選択し、CloudTrailのロググループ(例:
/aws/cloudtrail/your-trail-name
)を選択します。 - 「メトリクスフィルター」タブを選択し、「メトリクスフィルターの作成」をクリックします。
- 「フィルターパターン」に、CloudTrail設定変更を検知するためのパターンを記述します。 例:
{ ($.eventName = StopLogging) || ($.eventName = DeleteTrail) || ($.eventName = UpdateTrail) || ($.eventName = StartLogging) || ($.eventName = AddTags) || ($.eventName = RemoveTags) }
- 「メトリクス名前空間」、「メトリクス名」、「メトリクス値」を適切に設定し(例: 名前空間
CloudTrailMetrics
、メトリクス名TrailConfigurationChanges
、メトリクス値1
)、「フィルターの作成」をクリックします。
- CloudWatchアラームの作成:
- CloudWatchの左側のナビゲーションペインで「アラーム」を選択し、「アラームの作成」をクリックします。
- 「メトリクスを選択」をクリックし、先ほど作成したメトリクスフィルターを選択します。
- アラームの条件(例: 期間「1分」、しきい値「1以上」)を設定します。これにより、CloudTrailの設定変更が1回でも発生するとアラームがトリガーされます。
- 「追加のアクションの設定」セクションで、アラームがトリガーされた場合の通知先(既存のSNSトピックなど)を設定します。SNSトピックがない場合は新規作成してください。
- アラーム名と説明を入力し、「アラームの作成」をクリックします。

Terraformでの修復手順
TerraformでCloudTrailの設定変更を監視するためのCloudWatchメトリクスフィルターとアラームを設定するには、aws_cloudwatch_log_metric_filter
および aws_cloudwatch_metric_alarm
リソースを使用します。
# CloudTrailのロググループ (既存のものを参照するか、Terraformで作成)
data "aws_cloudwatch_log_group" "cloudtrail_log_group" {
name = "/aws/cloudtrail/your-cloudtrail-name" # あなたのCloudTrailのロググループ名に置き換えてください
}
# CloudTrailの設定変更を監視するメトリクスフィルター
resource "aws_cloudwatch_log_metric_filter" "cloudtrail_config_changes" {
name = "CloudTrailConfigChangesDetected"
log_group_name = data.aws_cloudwatch_log_group.cloudtrail_log_group.name
pattern = <<PATTERN
{ ($.eventName = StopLogging) || ($.eventName = DeleteTrail) || ($.eventName = UpdateTrail) || ($.eventName = StartLogging) || ($.eventName = AddTags) || ($.eventName = RemoveTags) }
PATTERN
metric_transformation {
name = "CloudTrailConfigurationChangeCount"
namespace = "CloudTrailMetrics"
value = "1"
default_value = 0
}
}
# アラート通知用のSNSトピック (既に存在する場合は data "aws_sns_topic" で参照)
resource "aws_sns_topic" "cloudtrail_alert_topic" {
name = "cloudtrail-config-change-alerts"
}
# SNSトピックへのサブスクリプション (例: Eメール)
resource "aws_sns_topic_subscription" "email_subscription" {
topic_arn = aws_sns_topic.cloudtrail_alert_topic.arn
protocol = "email"
endpoint = "your-email@example.com" # あなたのメールアドレスに置き換えてください
}
# CloudTrailの設定変更を通知するCloudWatchアラーム
resource "aws_cloudwatch_metric_alarm" "cloudtrail_config_change_alarm" {
alarm_name = "CloudTrailConfigurationChangeAlarm"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = 1
metric_name = "CloudTrailConfigurationChangeCount"
namespace = "CloudTrailMetrics"
period = 60 # 監視間隔 (秒)
statistic = "Sum"
threshold = 1
alarm_description = "CloudTrail configuration change detected!"
alarm_actions = [aws_sns_topic.cloudtrail_alert_topic.arn]
ok_actions = [aws_sns_topic.cloudtrail_alert_topic.arn] # オプション: OK状態への遷移時も通知
}
上記の例では、まずCloudTrailのロググループを参照し、CloudTrail設定変更に関連するイベントを検知するメトリクスフィルターを作成しています。その後、メトリクスフィルターによって生成されたメトリクスを監視し、変更が検出された場合にSNSトピックに通知するCloudWatchアラームを設定しています。
your-cloudtrail-name
や your-email@example.com
などのプレースホルダーは、実際の環境に合わせて修正してください。
最後に
この記事では、CloudTrailの設定変更の監視ができるようにメトリクスフィルターが設定されていない状態について、リスクと対策を解説しました。CloudTrailの設定変更を適切に監視し、アラートを設定することは、AWSアカウントのセキュリティとコンプライアンスを維持するための基本であり、最も重要な対策の一つです。これにより、予期せぬ変更や悪意のある操作を早期に検知し、迅速に対応することができます。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。