どうも、ご無沙汰しております。
クラ本部の黒田です。
ブログ投稿は久しぶりでしたね。
皆さんはいかがお過ごしでしょうか。
昨年のAWS案件が12月末にお客様に無事納品しましたので、今年から、新たな案件現場からスタートしております。
ワクワクして、たまらないです….
それでは、今回お客様のご要望に合わせてセキュリティー監視についてご提案しました内容をご紹介いたします。
はじめに
今回、ご紹介の技術ブログは、AWS CloudTrailを利用してAWSコンソールへのログインを監視し、Amazon EventBridgeスケジュールを使用して特定の時間帯にCloudWatchアラームの有効化と無効化を自動で切り替えることで業務時間内外のセキュリティ管理を自動化し、効率的な監視システムを構築することを目的としています。
目的
- セキュリティ強化: AWSコンソールへの不正アクセスをリアルタイムで検出し、迅速に対応できるようにします。
- 自動化: 業務時間内外でのセキュリティ監視の自動化により、手動での監視作業を削減し、効率化を図ります。
- 柔軟性: 業務時間に応じた監視設定の自動切り替えにより、不要なアラートの発生を防ぎつつ、必要な時には迅速な通知を受けることができます。
利点
- リアルタイム監視: AWSコンソールへのログイン試行をリアルタイムで監視し、異常なアクセスがあった場合はすぐに警告を発する。
- 時間指定による柔軟性: 業務時間内外での監視設定を自動切り替えることにより、セキュリティ監視の精度を高めるとともに、不要なアラームの発生を減らす。
- 自動化による効率化: 手動での監視作業を削減し、管理者の負担を軽減する。
- 通知システム: SNSを通じての通知により、関連するステークホルダーが迅速に対応できるようにする。
応用
- 企業のAWS環境におけるセキュリティ管理の基盤として機能し、特に業務外時間の不正アクセスやセキュリティ侵害のリスクを最小限に抑えるのに有効です。
また、この自動化された設計では、他のAWSサービスやアプリケーションにも適用可能で、幅広いセキュリティ監視シナリオに活用できます。AWS環境ご利用中のお客様へのご提案にお役に立てると嬉しいですね。
構成図
構築概要
- CloudTrail証跡の設定とログ送信:
- CloudTrail証跡を作成し、ログをCloudWatch Logsのロググループに送信します。
- ロググループからのメトリクスフィルター作成:
- CloudWatchロググループに「ConsoleLogin」イベントのためのメトリクスフィルターを作成します。
- メトリクスフィルターからのアラーム作成とSNS通知設定:
- 作成したメトリクスフィルターを使用して「ConsoleLogin」アラームを作成し、SNSトピックを通じた通知設定を行います。
- Amazon EventBridge Schedulerによるアラームアクションの自動化:
- EventBridge Schedulerを使用して、業務時間内にCloudWatchアラームアクションを自動的に無効化し、業務時間外に再び有効化する設定を行います。
事前準備
- AWSアカウント:
- AWSサービスを使用するためには、AWSアカウントが必要です。まだアカウントを持っていない場合は、AWSの公式サイトからサインアップしてください。
- 適切な権限:
- CloudTrailの設定、CloudWatchログの設定、EventBridgeのスケジュール作成などを行うためには、適切なIAM権限が必要です。これには、CloudTrailの管理、CloudWatchのメトリクスとアラームの作成、EventBridgeのスケジュールの作成などが含まれます。
- S3バケット:
- CloudTrailログを保存するためのAmazon S3バケットが必要です。既にバケットがある場合はそれを使用し、ない場合は新規に作成する必要があります。
- IAMロール:
- CloudTrailとEventBridgeスケジュールが使用するIAMロールを事前に作成しておく必要があります。これらのロールには、CloudTrailがS3バケットとCloudWatchロググループにログを書き込むための権限や、EventBridgeがCloudWatchアラームを有効/無効にするための権限が必要です。
- CloudWatchロググループ:
- CloudTrailログをCloudWatch Logsに送信するためのロググループを作成します。既にロググループがある場合はそれを使用し、ない場合は新規に作成する必要があります。
- SNSトピック:
- アラーム通知を送信するためのAmazon SNSトピックが必要です。既にトピックがある場合はそれを使用し、ない場合は新規に作成する必要があります。
構築手順
- ステップ ①: CloudTrail証跡の設定
- 証跡の作成:
- CloudTrailのトップページで「証跡の作成」を選択。
- 証跡名を入力し、既存のS3バケットをストレージ場所として指定。
- SSE-KMS暗号化は無効にし、CloudWatch Logsを有効化。
- ロググループを選択または新規作成し、CloudTrail用ロールを指定(新規作成するか、または既存ロールを指定)。
- 証跡の作成:
- ログイベント設定:
- 管理イベントとデータイベントを有効化し、S3イベントを選択。
- 設定を完了し、証跡を作成。
- ステップ ②: CloudWatchロググループとメトリクスフィルター設定
項目 | 値 |
---|---|
フィルター名 | ConsoleLogin |
メトリクス空間 | CloudTrailMerics |
メトリクス名 | ConsoleLogin |
メトリクス値 | 1 |
期間 | 10秒 |
フィルターパターン | { ($.eventName = ConsoleLogin) } |
- メトリクスフィルターの作成:
- CloudWatchロググループで「メトリクスフィルターの作成」を選択。
{ ($.eventName = ConsoleLogin) }
フィルターパターンを設定。- フィルター名、メトリクス空間、メトリクス名を指定し、メトリクス値を「1」と設定。
- アラーム設定:
- 期間を10秒に設定し、SNSトピックを選択(新規作成するか、または既存トピックを指定)。)。
- アラーム名と説明を記入し、アラームを作成。
- 作成したアラームのアクション項目が有効になっていることを確認
※ この時点から、全てのユーザーがAWSアカウントにサインインすると通知される。
-
ステップ ③: Amazon EventBridge Schedulerの設定
- アラームアクションのスケジュール:
- 平日業務中にCloudWatchアラームアクションを無効化するスケジュール(
cron(0 0 ? * MON-FRI *)
)と有効化するスケジュール(cron(0 9 ? * MON-FRI *)
)を作成。 - スケジュール名を入力し、定期的スケジュールとcron式の時間を設定。
- ターゲットとしてCloudWatchを選択し、Disable/EnableAlarmActionsにチェックを入れ、作成したアラート名を指定。
- EventBridge Schedulerからアラート有効化/無効化権限アクセスポリシーアタッチされたロールを選択。
- 平日業務中にCloudWatchアラームアクションを無効化するスケジュール(
- ロールを新規作成する場合以下より参照してください。
カスタム信頼ポリシー:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- ロールを新規作成する場合以下より参照してください。
ポリシー名:SwitchAlarmActions{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:EnableAlarmActions", "cloudwatch:DisableAlarmActions" ], "Resource": "*" } ] }
- アラームアクションのスケジュール:
動作確認
スケジューラのタイプ | cron ベース時間設定 | アクション |
---|---|---|
アラームアクション無効化 | 09時実行 | DisableAlarmActions |
アラームアクション有効化 | 18時実行 | EnableAlarmActions |
- アラームアクション無効時:
- アクション無効状態でAWSコンソールにサインインし、通知が来ないことを確認。
- アラームアクション有効時:
- アクション有効状態でAWSコンソールにサインインし、通知が来ることを確認。
- 受信した通知メールを確認し、メール内のURLから詳細を確認。
確認ポイント
- CloudTrailイベント履歴を確認し、ログインしたユーザー、時間、IPアドレスなどの詳細を確認。→どの時間にどのユーザがどこからログインしたのかの情報特定できること。
- 通知時間と確認時間が長く空いた場合、(例えば:朝から前日の通知を確認する場合)検知通知が表示されないケースもあります。その場合は
{ ($.eventName = ConsoleLogin) }
で手動検索を行い、必要に応じてアクションを選択しログイベントを確認。
最後に
以上、AWSサービスを利用してコンソールログインの監視とアラーム管理を自動化するための一連の構築手順の説明となります。
監視範囲に合わせて、ユーザログイン出来なかったエラーで引っかかっているケースを監視し、ユーザログインしようとしましたが、何らかのエラーでログイン出来なかった場合に通知するアラートを作成したりすることもおすすめします。
参考記事:AWS CloudTrailでIAMユーザーのサインイン失敗を検出してみる
このブログ内容を読んで頂いてから、AWSのセキュリティと監視機能の効率的な利用方法を一層理解してもらえるようになれれば幸いです。