筆者は2018年の夏にAWSから高額請求を受けました。
とある開発合宿の夜、LaravelでS3に画像をあげ、CroudFront経由で表示させるための実装を行っていた時の出来事です。
AWSのコンソール画面とにらめっこしていた時に、ふと左サイドバーの履歴の項目に、気になる項目が目に付きました。
ん?
請求?
普段はこんな項目出て来ないため、気になったのでクリックしてみました。その瞬間、恐ろしい現実を目の当たりにしたのです。
請求を押した時に開かれた画面が、以下の通りでした。
【請求画面の画像】
及び10000$!日本円にして、約124万円の請求が来ていました。
何かの間違えだと思ったが、少し怖くなったのでひとまず、こういった事例がなぜ起こるのか、自分に当てはまる原因がないかを調べるため、「AWS 高額請求」などでググってみました。
すると、いくつか記事が早速上位にヒットしました。
https://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694
https://qiita.com/AkiyoshiOkano/items/72002409e3be9215ae7e
記事の書かれた時期が少し古いですが、どちらも高額の請求が来ていて、最終的には免除されています。(そういえば、過去に請求されてた友人がいた事もあり、前にこういった記事を調べて読んだことあったんだ・・)
内容を読んで、原因が
githubの公開レポジトリにAWSのキーを公開してしまった事
とあったので、もしや、自分が先ほどプッシュした時の.env.exampleの事では無いか!
と思い、すぐに手順に従って、レポジトリからキーを載せていたコミットの削除(ついでにレポジトリも削除)を行いました。また、EC2インスタンスを見てみると、いろんなリージョンで見覚えのないインスタンスが大量に立っていたので削除、IAMの見覚えのないユーザーも削除、AWSのキーも削除しました(下記でも述べますが、正確には全部の対応はこの時点では終わっていなかったです。)。
ひとまず対処も終わった事だし、後は料金を返す要求をすれば、大丈夫だろうと安心し、AWSに一報入れました(この連絡を入れる窓口も、分かりづらかったので最初は戸惑いました。電話対応も受け付けていないので、メッセージを送って返事を待つしかないです。)
以下の画面から連絡しました。
手順は、
1. AWSのサービス画面で「サポート」と検索
2. サポート画面で「Create case」というボタンを押してメッセージ(ケース)を作成する
という流れになります。
あまり騒ぎを大きくしたくなかったので、このまま職場の人にも一緒に来ていた友人にも相談せずに、なかったことになる様祈ろうと考えていました。(とりあえず、翌日になればこの要望が受け入れられて、料金請求も無くなっているだろう。)
しかし、一向にAWSからの返信もない。料金請求額も変わらない。
このままではまずいと思い、ひとまず、職場の人の指示を仰ごうと思い、救助要請のメッセージをslackで投げました。
俺「AWSから高額請求が来たのですが、こういったケースを知ってる方いますか?」
すると一斉に、上記であげた、なすべき対処法をチームの皆様が瞬時に返してくれました。
- 不正に作られたIAMユーザーの削除
- 発行してしまったキーの削除
- パスワードの変更
- 見覚えのないインスタンスの全削除
これらが出来ていたか確認し、漏れた部分の対処を終え、AWSにもその旨を伝えると、なんと、帰って来ません。
でもめげずに何通も送り続け、徐々に丁寧語を使いながら質問していくと、しばらくしてから返信が来ました。
「ご対応ありがとうございます。料金の取り下げについては、別部署が担当してるので、そちらにご連絡ください」
的な内容が来ていました。
内容は全て英語らしいので、そこからは英語のやりとりになります。
[Case ○○○○]Your AWS account is compromised
というタイトルのメールを確認したので、ここに添付されていたリンク先に、英語で返事しました。
あとは英語のやりとりで、審査をジャッジするのにしばらく時間がかかると言われ、結果を数日間待ちました。
自分の場合は5日間経つと、結果が返って来ました。
結果は、
無事免除!!!!
正確には、免除の申請を通すというメールが返って来たのですが、そのメールが届いてからすぐに請求額面に反映されたわけではなく、差し戻し分の領収書のような画面が開かれました。その内容からだと、10万円くらいは戻ってこないようにも見えたのですが、まあそれでも十分にありがたいと思っていました。
数日経って、無事不正利用分の請求金額が元に戻っている画面を確認出来たので、その時に初めて全額免除されたと知り、AWSには感謝しました。差し戻しの領収書の金額は、税金を差し引いた分だったため、そのまま計算しても、不正利用分にはいかないという話でした。
本当に助かりました。120万円を免除されたのですから。感謝してもしきれないほどです。
追伸:AWSを使う上で、高額な料金請求を避けるために出来ること
今回みたいな特殊なケースとは別に、インスタンスを普通に使って、高額請求に至ったという例を周りでちらほら聞いていたので、高額請求に至らないように普段から心がける事をまとめてみました。
- 使わないインスタンスは止めておく(複数個ある場合は止めておくか、AMIでバックアップを取って消す)
- t2.microなどの軽めのインスタンスを使う
- CloudFrontでキャッシュする
- インスタンスに紐づかない(紐づける予定のない)ElasticIPは削除(1つにつき1時間0.005円と少額だが、無駄なものは極力減らす)
- 個人用でEC2を複数作る場合は、複数のアカウントに登録し、1アカウント1インスタンスを用いる(複数用いると、インスタンス1つにつきElasticIPを無料枠が適応できる。同じクレカでの複数登録可能。Gmailを使う)。使わなくなったインスタンスは止めておく
- CloudWatchの設定を行う(有料。1度設定したら外せない)
- サポートプランのデベロッパーサポートなどで質問する(有料)
- AWSロフトで作業し、質問(エキスパートが常駐しており、デベロッパーサポートレベルの内容も、無料で聞けます。)
※ この記事は、筆者自身の出来事であり、全ての人に同じ事例の対処を適応してもらえる保証はありません。返金されなくても、 責任は負えない ので、その点はご了承ください。