この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
AWS CloudTrailはセキュリティの観点から、クラウド運用において重要なサービスですよね。
しかし、AWS CloudTrailは名前や機能は知っているけど、実際には使っていない・放置してしまっている方は多いのではないでしょうか。
正直に言うと、わたしもその一人です。
今回AWS CloudTrailについて調べるまで、自分のプライベートAWSアカウントのセキュリティに関しては多要素認証しただけで満足していました。
今回の記事ではAWSCloudTrailについて解説しつつ、IAMユーザーのサインインの失敗検出をする構築のハンズオンを紹介します。
AWS CloudTrailを使ってみよう
AWS CloudTrailはAWSクラウドを利用する上で、重要なサービスです。ハンズオンをやる前に、AWS CloudTrailについて知っておきましょう。
■AWS CloudTrailとは?
AWS CloudTrailは、AWSアカウントの運用とリスクの監査、ガバナンス、コンプライアンスを行えるように支援するAWSのサービスです。
AWS CloudTrailを使用すると、AWSインフラストラクチャ全体でアクティビティを記録し、モニタリング・保持できます。
仕組みとしては、APIのリクエストの証跡を取得することです。AWSはすべてのサービスをAPIを通じて提供していて、APIのエンドポイントに対して、リクエストを行っています。このAPIのリクエストの証跡を取得・保存しているのがAWS CloudTrailです。
AWS CloudTrailが取得している証跡は以下の通りです。
●AWSCloudTrailが保存する証跡の種類
- AWSCloudTrailがサポートするすべてのサービスのAPIイベント
- APIリクエストによって直接トリガーされない一部のイベント
⇒AWSマネジメントコンソール試行、AWSフォーラム、およびさAWSサポートセンター
⇒すべてのIAMユーザーのサインインの試行
⇒AWSアカウントのルートユーザーの成功したサインイン試行
●AWS CloudTrailの証跡ログの出力先やタイミング
どれくらいの頻度で証跡を取得しているのでしょうか。
証跡ログの出力タイミングは、
- ログファイルは1時間に複数回、約5分ごとに発行
- アカウントアクティビティは通常15分位以内に配信
- インサイトイベントは異常なアクティビティから通常30分以内にバケットに配信
証跡ログの出力先はAmazonS3バケットを基本に、AmazonCloudWatchログへの出力もサポートされています。証跡のログの保存だけではなく、他のサービスを併用してモニタリングも可能です。
モニタリングには有効化するだけでいいAmazonGuardDutyやCloudTrail Insightsがおすすめです。
■ハンズオン:AWS CloudTrailを使ってみましょう
AWS CloudTrailに関してまず伝えたいことは、すべてのAWSリージョンでAWSCloudTrailの証跡の有効化をしましょう、ということです。
トラブルシューティングをする際に、ログがないとどうしようもできないからですね。
そして、設定したら実際に使ってみましょう。
ということで、今回はAWS公式ドキュメントにあります「CloudTrailイベントのCloudWatchアラームの作成:例」から、「AWS ManagementConsoleサインインの失敗」のハンズオンをやってみます。
~構築の流れ~
実施する失敗検出の仕組みは以下の通りです。
CloudTrailで取得したログをCloudWatchログで保存し、メトリクスのフィルター機能を使って、任意のメトリクスの異常検知をCloudWatchAlarmで監視します。もし異常を検知したら、Amazon SNSから設定したメールアドレスに通知が来るようにします。
今回使用するAWSサービスは、
- AWS CloudTrail
- Amazon CloudWatch
- Amazon Simple Notification Service(SNS)です。
1.CloudTrail証跡の作成
まずは証跡を作成します。CloudTrailのサービス画面から「証跡の作成」を押してください。
設定値は以下の通りです。
項目 | 設定値 |
---|---|
証跡名 | saitou-handson-cloudtrail |
ストレージの場所 | S3バケット新規作成 |
証跡ログバケット | saitou-handson-cloudtrail-s3 |
CloudWatch Logs | 有効化 |
ロググループ | 新規 |
ロググループ名 | デフォルト可(紛らわしいので名前を足しました) |
IAMロール | 新規 |
ロール名 | saitou-handson-cloudtrail-iamrole |
↓
↓
↓
↓ログのイベントタイプが3種類あります。今回は“管理イベント”を選択します。
↓最後のページは確認ページなので、問題なければ「証跡の作成」をクリックしてください。
2.CloudWatchログでメトリクスフィルターを作成
次にメトリクスフィルターを作成します。CloudWatchのダッシュボード画面の左ペインから、ロググループをクリックしてください。
証跡を作成する際にロググループも一緒に新規作成しましたので、該当のロググループを押してください。
↓
↓メトリクスフィルタータブから「メトリクスフィルター作成」を押してください。
作成画面で必要になるフィルターパターンは、以下の値を入力してください。
{ ($.eventName = ConsoleLogin) && ($.errorMessage = "Failed authentication") }
※「&&」がわからなかったので、調べてみました。
演算子 | 使用例 | 意味 |
---|---|---|
&& | x && y | 左辺も右辺もtrueの場合にtrue(左辺かつ右辺) |
その他の設定値は以下の通りです。
項目 | 設定値 |
---|---|
フィルター名 | ConsoleSignInFailures |
メトリクス名前空間 | CloudTrailMetrics |
メトリクス名 | ConsoleSigninFailureCount |
メトリクス値 | 1 |
デフォルト値 | (空白) |
↓
↓
3.CloudWatchアラームの作成
続いて、CloudWatchアラームを作成していきます。先ほど作成したメトリクスフィルターにチェックを入れ、「アラームを作成」をクリックしてください。
設定値は以下の通りです。
項目 | 設定値 |
---|---|
メトリクス名 | ConsoleSigninFailureCount |
統計 | 合計 |
期間 | 5分 |
しきい値の種類 | 静的 |
いつ | 以上 |
よりも | 2 |
トリガー | アラーム状態 |
次のSNSトピックを選択 | 既存のものでOK(私は新規作成しました) |
アラーム名 | Console sign-in failures |
説明 | Raises alarms if more than 2 console sign-in failures occur in 5 minutes |
↓
↓
↓
↓
↓
↓
※アラームの作成が完了しましたが、私はSNSトピックを新規で作成したので、認証アクションが必要です。トピックを新規作成した方は、下の画面のように“警告”が表示されているかと思います。
↓
↓
↓
↓
警告が消えましたね。構築は以上です。
4.動作確認
構築が完了しましたので、実際にサインインの失敗が検出されて通知がくるか試してみましょう。
アラーム状態になるためには、マネージメントコンソールへのサインインを5分以内に2回失敗する必要があります。パスワードを間違えて、試してみましょう。
↓
↓2回サインインに失敗したので、CloudWatchアラームを確認してみましょう。
↓無事?にアラーム状態になっていることが確認できました。通知されているかも確認しましょう。設定したメールアドレスの受信トレイを見てみてください。
↓
設定したアラーム名で通知が来ていますね。今回の構築検証はここまでです。
まとめ:AWS CloudTrailでIAMユーザーのサインイン失敗を検出してみる
AWSCloudTrailはセキュリティやトラブルシューティングにおいて重要なサービスだとわかりました。自分で設定することで、より細かいセキュリティを可能にしてくれそうですよね。
設定はAWSにお任せしたいという方には、GuardDutyやCloudTrailInsightがおすすめです。自動でモニタリングしてくれるので便利ですよ。
参考リンク:AWS公式ドキュメント、【AWS Black Belt Online Seminar】AWS CloudTrail
↓ほかの協栄情報メンバーもAWS監視サービスに関する記事を公開しています。ぜひ参考にしてみてください。
■CloudWatch Logsのメトリクスフィルターでセキュリティイベントをチェックする(liyo)
https://cloud5.jp/cloudwatch_log_metric_filter/
■CloudWatchでサーバーを監視し、メトリクスの閾値を超えた時にメールで通知を受けとる。(nakaniwa)
https://cloud5.jp/cloudwatch-agent-nakaniwa/
■CloudWatchでWindowsサーバのポートを監視する(chin)
https://cloud5.jp/port-monitor-windows/
■CloudWatch Logs の利用量が急増の場合、問題ロググループを特定する方法(dapeng)
https://cloud5.jp/cloudwatch-logs-incomingbytes/