AWSは「高い」のではなく、
設定ミスで課金メーターが暴走する
AWSでは、EC2のサーバー代だけでなく、通信量・ログ・APIリクエスト・放置リソース・権限ミスによって 短期間で大きな費用が発生することがあります。本資料では、実務で起こりやすい高額請求事故を設定ミスの観点から整理します。
1. 講義の目的
AWSの高額請求事故は、悪意ある攻撃だけでなく、日常的な設定ミス・放置・監視不足でも発生します。
| 項目 | 内容 |
|---|---|
| 対象者 | 情報システム担当、Web制作会社、インフラ担当、クラウド管理者、経営者 |
| 目的 | AWSで高額請求が起きる仕組みを理解する |
| 重点 | 設定ミス、放置、監視不足、権限過大による事故 |
| 到達目標 | 高額請求を未然に防ぐチェックリストを持ち帰る |
2. AWS高額請求の本質
AWSは基本的に従量課金です。つまり、利用した分だけ費用が発生します。 問題は、管理者が「使っている」と認識していない場所でも課金が発生する点です。
通信量
NAT Gateway、AZ間通信、リージョン間通信、インターネット向け転送で費用が膨らみます。
ログ
CloudWatch Logsに大量のDEBUGログや巨大JSONを出すと、ログ取り込み・保存で課金されます。
放置リソース
EC2を止めても、EBS、Snapshot、Elastic IP、Load Balancer、NAT Gatewayが残ることがあります。
3. 事故パターン一覧
| No | 事故パターン | 主な原因 | 危険度 |
|---|---|---|---|
| 1 | NAT Gateway通信量爆発 | Private Subnetから大量外部通信、VPC Endpoint未使用 | 非常に高い |
| 2 | Lambda無限実行 | S3イベント、EventBridge、再帰処理、リトライ設定ミス | 非常に高い |
| 3 | CloudWatch Logs大量出力 | DEBUGログ、本番ログ過多、保持期間Never Expire | 高い |
| 4 | S3リクエスト課金事故 | 大量PUT/GET、外部からの誤アクセス、アプリのリトライ暴走 | 高い |
| 5 | EC2 / RDS / EBS / Snapshotの消し忘れ | 検証環境、バックアップ、固定IP、ロードバランサー放置 | 中〜高 |
| 6 | Terraform / CloudFormationの設定ミス | リージョン指定ミス、count / for_eachミス、大量作成 | 高い |
| 7 | アクセスキー漏洩 | GitHub公開、.env流出、IAM権限過大 | 非常に高い |
4. 事故事例① NAT Gatewayの通信量爆発
Private Subnet内のサーバーやLambdaが外部APIへ大量通信し、その通信がすべてNAT Gatewayを通ることで高額化します。
よくある原因
| 原因 | 内容 |
|---|---|
| VPC Endpoint未設定 | S3やDynamoDB向け通信までNAT Gateway経由になる |
| 外部APIへの過剰アクセス | バッチ処理やLambdaが大量通信を発生させる |
| AZ設計ミス | 別AZのNAT Gatewayを通り、追加のデータ転送料が発生する |
| 監視不足 | 通信量の増加に気づけない |
防止策
5. 事故事例② Lambdaの無限実行・再帰実行
Lambdaは自動でスケールするため、イベント設定を誤ると短時間で大量実行されます。
高額化する課金対象
| 課金対象 | 内容 |
|---|---|
| Lambda実行回数 | 呼び出されるたびに課金対象となる |
| Lambda実行時間 | 処理時間が長いほど費用が増える |
| CloudWatch Logs | 実行ログが大量に出力される |
| S3 API | ファイル作成・読取・一覧取得のリクエストが増える |
| NAT Gateway | 外部通信がある場合、通信量課金も加わる |
防止策
6. 事故事例③ CloudWatch Logsの大量出力
CloudWatch Logsは便利ですが、ログを大量に出す設計にすると、ログ取り込み・保存・検索で費用が増えます。
よくある設定ミス
| 設定ミス | 結果 |
|---|---|
| DEBUGログのまま本番化 | 通常の数十倍のログ量になる |
| 巨大JSON全文をログ出力 | 1件あたりのログサイズが大きくなる |
| ログ保持期間がNever Expire | 古いログが消えず、保存費用が積み上がる |
| CloudWatch Logs Insights多用 | 検索・分析量に応じた追加費用が発生する |
防止策
7. 事故事例④ S3のリクエスト課金事故
S3は保存容量だけでなく、PUT・GET・COPY・LISTなどのリクエストにも課金が発生します。
よくある原因
| 原因 | 内容 |
|---|---|
| ありがちなバケット名 | 外部システムや第三者の誤送信先になりやすい |
| アプリの再試行処理 | 失敗時に大量のPUT / GETを繰り返す |
| ライフサイクル設定ミス | 不要な移行・削除リクエストが増える |
| アクセスログ未設定 | どこからリクエストが来たか分からない |
防止策
8. 事故事例⑤ 放置リソースによる継続課金
EC2を止めても、関連リソースが残っていると課金が続きます。検証環境・開発環境で特に多い事故です。
見落としやすいリソース
| リソース | 見落とし内容 |
|---|---|
| EBS | EC2停止後もボリュームは残る |
| Snapshot | バックアップとして残り続ける |
| Elastic IP | 未使用状態で課金対象になる場合がある |
| Load Balancer | EC2を消してもALB / NLBが残る |
| NAT Gateway | 作成したまま放置されやすい |
| RDS | 停止、バックアップ、Snapshotの扱いに注意 |
防止策
9. 最低限入れるべき防御設定
AWSを使い始める前に、最低限以下の設定を入れるべきです。特に予算アラートは構築前に設定します。
| 優先度 | 設定 | 目的 |
|---|---|---|
| 最重要 | root MFA | rootアカウント乗っ取り防止 |
| 最重要 | AWS Budgets | 月額・予測・サービス別の予算超過を通知 |
| 最重要 | Cost Anomaly Detection | 異常なコスト増加を自動検知 |
| 高 | CloudWatch Billing Alarm | 推定請求額が閾値を超えたら通知 |
| 高 | CloudTrail | 誰が何を操作したか記録する |
| 高 | GuardDuty | 不審なAPI操作や侵害兆候を検知 |
| 高 | IAM最小権限 | ミスや漏洩時の被害を抑える |
| 中 | CloudWatch Logs Retention | ログの永久保存を防ぐ |
| 中 | Lambda同時実行制限 | Lambda暴走時の被害を制限する |
| 中 | S3 / DynamoDB VPC Endpoint | NAT Gateway経由の通信を減らす |
10. 高額請求に気づいた時の初動対応
原因別の止め方
| 原因 | 初動対応 |
|---|---|
| Lambda暴走 | Reserved Concurrencyを0にする |
| EC2大量起動 | Auto Scaling GroupのDesired Capacityを0にする |
| NAT Gateway課金 | 対象通信を止め、必要に応じてVPC Endpoint化する |
| CloudWatch Logs爆増 | ログレベルを下げる、ログ出力を停止する、保持期間を設定する |
| S3リクエスト爆増 | アプリ停止、バケットポリシー確認、リクエスト元調査 |
| アクセスキー漏洩 | Access Key無効化、IAMローテーション、CloudTrail確認 |
11. 受講者向け確認テスト
Q1. NAT Gatewayで高額請求になる主な理由は?
Q2. Lambdaの無限実行を防ぐ代表的な設定は?
Q3. CloudWatch Logsでやってはいけない本番設定は?
Q4. AWS高額請求の初動で最初に見るべき画面は?
Q5. 最低限設定すべきコスト防御は?
12. 講義の締め
| 鉄則 | 内容 |
|---|---|
| 1. 作る前に予算アラート | 構築後ではなく、構築前にBudgetsを設定する |
| 2. 通信経路を確認 | NAT Gateway、VPC Endpoint、AZ間通信を確認する |
| 3. ログ量を制御 | DEBUGログ常時ONとログ永久保存を避ける |
| 4. Lambdaを止められる設計 | 同時実行数、リトライ、イベント設計を確認する |
| 5. 放置リソースを棚卸し | EC2以外のEBS、Snapshot、NAT、ALBを確認する |
| 6. アクセスキーを公開しない | GitHub、.env、コード直書きに注意する |
| 7. Cost Explorerを定期確認 | 週次でService別・Region別の増加を確認する |
構築できることだけではない。
止められること、気づけること、説明できること。
13. 参考リンク
講義資料の補足として、以下のAWS公式ドキュメントを確認すると理解が深まります。
