
CloudTrail 管理イベントの重複コストをAWS Budgets で検知、Eメールに送信する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 コストが発生していない環境の場合) ↩











