CloudTrail 管理イベントの重複コストをAWS Budgets で検知、Eメールに送信する

2023.05.02

CloudTrailの管理イベント証跡は 2つ目以降のS3コピーが有料 です。

証跡

Amazon S3 に配信された管理イベント: 配信される管理イベント 100,000 あたり 2.00 USD (初回無料コピー後、詳細は AWS 無料利用枠を参照)

– 引用: AWS CloudTrail の料金 | AWS

いつのまにか同一リージョンに複数証跡が出来てしまっていたら、 思わぬコストになる可能性があります。

今回は 「2つ目以降のS3コピー」を検知する仕組みを AWS Budgets を使って作成してみます。

前提: コストの使用タイプについて

管理イベント周りの使用タイプは大きく2種類あります。 FreeEventsRecordedPaidEventsRecorded です

  • FreeEventsRecorded : 初回 S3コピー分
  • PaidEventsRecorded : 2つ目以降の S3コピー分

img

FreeEventsRecorded サンプル

img

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}"

予算(+ アラート)が作成されました。

img

アラートを飛ばしてみる

試しに、一時的に「2つ目の証跡」を作成してみます。

img

次の日には以下のようなメールが届きました。

img

メールを受けたあとの対応も計画しておきましょう。 明細を確認して、コストが発生しているアカウントとリージョンを特定します。 例えば APN1-PaidEventsRecorded が発生しているAWSアカウントがあった際は、 東京リージョンにて管理イベント証跡の重複が発生しています。

おわりに

以上、CloudTrailの冗長コスト(の可能性がある事象)を検知する仕組みの紹介でした。

他にも「出る想定のないコスト」は顧客環境次第で、有ると思います。 そういったものは今回紹介したような予算アラートで検知ガードレールを作成しておくと良さそうです。

以上、参考になれば幸いです。

参考


  1. マネジメントコンソールからの作成の場合、「使用タイプ」選択部分で PaidEventsRecorded が出てこない可能性があります (おそらく過去に PaidEventsRecorded コストが発生していない環境の場合)