CloudTrail 管理イベントの重複コストをAWS Budgets で検知、Eメールに送信する
CloudTrailの管理イベント証跡は 2つ目以降のS3コピーが有料 です。
証跡
Amazon S3 に配信された管理イベント: 配信される管理イベント 100,000 あたり 2.00 USD (初回無料コピー後、詳細は AWS 無料利用枠を参照)
– 引用: AWS CloudTrail の料金 | AWS
いつのまにか同一リージョンに複数証跡が出来てしまっていたら、 思わぬコストになる可能性があります。
今回は 「2つ目以降のS3コピー」を検知する仕組みを AWS Budgets を使って作成してみます。
前提: コストの使用タイプについて
管理イベント周りの使用タイプは大きく2種類あります。 FreeEventsRecorded
と PaidEventsRecorded
です
FreeEventsRecorded
: 初回 S3コピー分PaidEventsRecorded
: 2つ目以降の S3コピー分
▲ FreeEventsRecorded
サンプル
▲ PaidEventsRecorded
サンプル
PaidEventsRecorded
を検知する Budgets 予算アラームを これから作成していきます。
作ってみる
今回は AWS CLIから作成します 1 。
以下、スクリプトを実行します。
##### 入力(適宜変更してください) # 予算名 budget_name="CloudTrail_Detect_DuplicatedEventsRecord" # 通知先Eメールアドレス mail_to_notify="cost@example.com" ##### CreateBudget API パラメータの準備 budget_config=$(cat <<EOF { "BudgetName": "${budget_name}", "BudgetLimit": { "Amount": "1.0", "Unit": "Events" }, "CostFilters": { "UsageType": [ "USW2-PaidEventsRecorded", "USW1-PaidEventsRecorded", "USE1-PaidEventsRecorded", "USE2-PaidEventsRecorded", "SAE1-PaidEventsRecorded", "EUW3-PaidEventsRecorded", "EUW2-PaidEventsRecorded", "EUN1-PaidEventsRecorded", "EUC1-PaidEventsRecorded", "EU-PaidEventsRecorded", "CAN1-PaidEventsRecorded", "APS3-PaidEventsRecorded", "APS2-PaidEventsRecorded", "APS1-PaidEventsRecorded", "APN3-PaidEventsRecorded", "APN2-PaidEventsRecorded", "APN1-PaidEventsRecorded" ] }, "TimeUnit": "DAILY", "BudgetType": "USAGE" } EOF ) notification_config=$(cat <<EOF [ { "Notification": { "NotificationType": "ACTUAL", "ComparisonOperator": "GREATER_THAN", "Threshold": 100.0, "ThresholdType": "PERCENTAGE", "NotificationState": "ALARM" }, "Subscribers": [ { "SubscriptionType": "EMAIL", "Address": "${mail_to_notify}" } ] } ] EOF ) account_id=$(aws sts get-caller-identity --query Account --output text) ##### 予算作成 aws budgets create-budget \ --account-id "${account_id}" \ --budget "${budget_config}" \ --notifications-with-subscribers "${notification_config}"
予算(+ アラート)が作成されました。
アラートを飛ばしてみる
試しに、一時的に「2つ目の証跡」を作成してみます。
次の日には以下のようなメールが届きました。
メールを受けたあとの対応も計画しておきましょう。 明細を確認して、コストが発生しているアカウントとリージョンを特定します。 例えば APN1-PaidEventsRecorded
が発生しているAWSアカウントがあった際は、 東京リージョンにて管理イベント証跡の重複が発生しています。
おわりに
以上、CloudTrailの冗長コスト(の可能性がある事象)を検知する仕組みの紹介でした。
他にも「出る想定のないコスト」は顧客環境次第で、有ると思います。 そういったものは今回紹介したような予算アラートで検知ガードレールを作成しておくと良さそうです。
以上、参考になれば幸いです。
参考
- AWS::Budgets::Budget - AWS CloudFormation
- CloudFormationでAWS Budgets の予算超過アラートを Slack へ通知してみた | DevelopersIO
- マネジメントコンソールからの作成の場合、「使用タイプ」選択部分で PaidEventsRecorded が出てこない可能性があります (おそらく過去に PaidEventsRecorded コストが発生していない環境の場合) ↩