[AWS]CloudWatchだけで異常な料金増加を検出

はじめに

個人でAWSを扱う上で怖いものが、アクセスキーの流出による不正なリソース利用ですね。

有名なケースとしては「Github上にアクセスキー情報をアップロードしてしまい、仮想通貨のマイニングのために悪用されてしまう」なんて話題がこの界隈では有名だと思います。

本来であればGithub上にアクセスキーなどの機密情報をアップロードしないように監視ツールを導入したり、AWSのパラメータストアやシークレットマネージャーを活用するべきでしょうが、人為的ミスで漏洩しないとも限りません

そこで、もしも不正利用されてしまった場合の検出方法としてCloudWatchによる1日あたりのコスト増加率の監視を紹介します。

CloudWatchの設定


CloudWatchから請求のメトリクスを確認するためには「バージニア」のリージョンからアクセスする必要があります。
バージニアリージョンから「請求」のメトリクスを選択してください。


「概要合算請求額」のメトリクスを確認すると上記の画像のようになります。
今回は1日あたりの急激なコスト増加を測定したいので、比較のために「概要合算請求額」のメトリクスを複製します。


複製したことにより「概要合算請求額」のグラフが2つできるはずです。
それぞれの「概要合算請求額」のグラフの表示を1日での「最大」と「最小」に設定します。
その後、式を挿入して(1日の請求額の最大 / 1日の請求額の最小)を計算します。

こうすることで、1日あたりのコストの増加率を知ることができます。
例えば(1日の請求額の最大 / 1日の請求額の最小)が1.2という値の場合は1日に料金が1.2倍増加したということになります。

この増加率のメトリクスを利用してアラートを作成することで検知に役立てます。


AWSの利用頻度にも寄りますが、料金の発生が少ないアカウントであれば前日比で比較して5~10倍くらい値段が増えたら異常として扱い、元々の料金の請求が大規模なアカウントであれば、1.5~3倍くらい増えたら異常とするなど、環境に合わせた閾値を設定しましょう。

また、毎月1日には最小請求額が0円にリセットされるため、月初では誤検知が発生しやすい可能性があることに注意が必要です。

この方法の問題点


1日あたりの料金増加を検出する方法としては、Lambdaを定期実行させてAPIから料金の一覧を取得して比較する方法をよく見かけます。

今回紹介したCloudWatchで1日あたりの料金増加を検出する方法と比較すると、導入に手間が掛かる代わりに精度が高くカスタマイズ性があります。

一方で今回のCloudWatchのみを使った設定のケースでは、月初に請求金額の最小値が0円にリセットされることで誤検出が起こりうる可能性があることや請求金額の更新タイミングによっては正確な増加率が出ないといった問題があります。

例えば1日の最小・最大がどちらも同じ請求金額でメトリクスが表示されており、1日の増加率の変動がないと判断されてしまう場合がありました。
(請求金額の更新タイミングの問題か?)

今回のようなCloudWatchのみで検知をするパターンでは、あくまで「大雑把に増加率が分かる」くらいのものだと念頭に置いて運用をした方が良さそうです。
ただし、当初の目的である「不正利用による異常なコスト発生を検出する」という用途においてはほぼ問題なく利用できそうです。

おわりに

今回の記事では、不正利用による多額な請求の発生をいち早く検出する方法のひとつとしてCloudWatchを使う方法をまとめました。

AWSを扱う上ではそもそも機密情報を漏洩させないための仕組みをきちんと導入し、その上で不正利用を検知する仕組みをすることが望ましいです。

この記事で紹介した内容は料金ベースの検出のため、「アクセスキーを不正に利用して個人情報を盗まれてしまった」などのケースには一切対応できません。

AWS クラウドセキュリティのドキュメントに、AWSのセキュリティ保護・検出サービスがまとめてありますので、用途に応じて選択できると良さそうですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)