はじめに
この記事ではAWSアカウントでのAPI検知の実装について書きたいと思います。CloudTrailとCloudWatchを組み合わせることで実装できます。
CloudTrail とは
CloudTrailとはAWS上で実行されたAPIアクションを記録し、AWSアカウントの運用と監査を可能にするサービスです。
ユースケース – 監視項目
どのようなアクションを監視するか、ユースケースを考えてみます。
作るもの
- CloudTrail – アカウントのAPIアクションを記録する
- CloudTrailのCloudWatch Log Group
CloudTrailの設定でCloudWatch Logsを有効化するとロググループが作成されます。 - CloudWatch Metrics Filter
上記ロググループにメトリクスフィルターを作成し、検知したいAPIをフィルターします。 - CloudWatch Alarms
メトリクスフィルターから取得したメトリクスを使ってCloudWatch アラームを作成します。
実践
上記を実装してみました。「III.ユースケース– 監視項目」の「CreateAPICall」の作成を以下のステップで説明します。
- CloudTrailの設定
- CloudWatch Logsの確認
- Metrics Filterの作成
- CloudWatch Alarmの作成
- アラームのトリガーテスト
1. CloudTrail の設定
CloudTrailを作成し、CloudWatch Logs を有効にします。AWSコンソール>CloudTrailに遷移し、「証跡の作成」をクリックします。
証跡名に任意の値を入力し、CloudWatch Logsを有効にします。
2. CloudWatch Logs を確認
AWSコンソール>CloudWatch > ロググループに遷移し、cloudtrail証跡のロググループが作成されていることを確認します。
対象のロググループをクリックし、ログが出力されていることを確認します。
ログストリームをクリックすると右のようなログが確認できます。
3. Metrics Filterを作成
ロググループ画面の「メトリクスフィルター」タブに移動し、「メトリクスフィルターを作成」をクリックします。
フィルターパターンに以下を指定します。
{$.eventName = “Create*“ && $.eventName != “CreateLogStream”}
上記はCreate APIが呼ばれた場合、かつ CreateLogStream以外のアクションの場合にメトリクスを「1」と取得します。*CreateLogStreamは大量に呼ばれるため、今回は排除しています。
メトリクス名前空間とメトリクス名に任意の名前を指定します。この例では以下の値とします。
- メトリクス名前空間:「CloudTrailMetrics」
- メトリクス名:「CreateAPICall」
- メトリクス値: 1
- Unit – カウント
確認画面で内容をチェックし、「メトリクスフィルターを作成」をクリックします。
4. CloudWatch Alarm作成
「メトリクスフィルター」タブで3で作成したメトリクスフィルターを選択し、「アラームを作成」をクリックします。
まずはアラームが発砲されることを確認したいので、期間: 1分、閾値:1で設定します。
**このままだと大量のアラートが上がってくるのでアラームの機能を確認後、調整することをお勧めします。
通知先のSNSを設定します。
アラーム名に任意の値を指定し、「アラームの作成」をクリックします。
5. アラームのトリガーテスト
最後にアラームの動作確認を実施します。テスト前のアラームは「OK」状態です。
今回作成したアラームはAWSアカウントでリソースを作成したとき、すなわちCreate APIが呼ばれた時に発砲します。テストとしてS3バケットを作成します。
アラームが「アラーム状態」に変われば動作確認はOKです。
CloudWatch > Metrics画面ではメトリクスとグラフが表示されます。
終わりに
いかがだったでしょうか。以上、CloudTrailとCloudWatchを組み合わせた、AWSでのAPI検知の実装について手順を書かせていただきました。皆様のお役に立てば幸いです。
アイレット株式会社のGlobal Solutions事業部では、お客様のビジネス変革を実現しながら、最新のデータソリューションの導入を加速できるように設計されたデータ分析ソリューションとデータサービスの幅広いポートフォリオを提供しています。ビジネスの成功こそ、私たちが追求するものです。お困りの際はぜひ一度お気軽にお問い合わせください。