AWSの請求額が一夜で$4000を超えて青ざめた話

¥4000ではなく$4000.

要約

AWSのアクセスキーが書かれたファイルをpublicなリポジトリに上げるという場外ホームラン級におバカな行為が原因で,何者かによってEC2インスタンスを大量に立ち上げられ,一夜にして請求額が$4000を超えて青ざめた.

詳細

アクセスキー入りのファイルをpush

AnsibleのPlaybook内のファイルに,dynamic inventory用にAWSのアクセスキーを書いていて,「これは良くないな」と思ってdirenvで環境変数にセットするやり方に変えたものの,肝心のアクセスキーを消し忘れてGithubにpushしていた.

翌朝気づいて青ざめる

翌日の昼ごろAWSコンソールを開くと,起動した覚えのないEC2インスタンスが立ち上がっているのに気づいた. この瞬間は,「Playbookの設定を間違ったかなあ」とかのんきに考えていた.立ち上がるとしてもm2.microだし,削除しておけばいいや,と.

でもよく考えたらインスタンスを立ち上げるPlaybookは書いてない.この辺りから心拍数が上がり始めるのを感じる.

実際,fitbitのログを見ると露骨に心拍数が上がっていた. f:id:thomas_aki:20151124225827p:plain

インスタンスをよく見てみると,m3.2xlargeというバカでかいインスタンスで,「あ,これはヤバい」となる.

次に確認したのは請求額. f:id:thomas_aki:20151124224957p:plain

ここで焦りが最高潮になる.鼓動が聞こえた(気がする).なにやら全身が脱力するのを感じた.この30万円であれが買えたなあとかそこそこリッチに旅行もできたなあとか考えてた.後述するが,実際の請求額は$4000を超えていた.

ひとしきり慌てふためいたのち,サポートに連絡.

AWSの良心的対応

「こんな事情で...なんとかお助け願えませんでしょうか...」と土下座する感じでサポート依頼.

夕方には電話がかかってきた.早口の英語にたじろぎながらも,平身低頭,こちらが悪いのは分かってますが$3000はなんとかなりませんか...ということは伝えた.

その後のやり取りはWebだったが,ほぼ即レスで対応していただいた.

  • アクセスキーの削除
  • 意図せず立ち上げられたリソースの削除(普段利用していたリージョン以外にも,全リージョンでバカでかいEC2インスタンスが立ち上がっていたため,サポートに指摘されて削除するまでの間にさらに約$1000が積み上がっていた)

などを行ったのち,レビュー待ち.

レビューが済むと,払い戻しがされるとのことだった.

10日後の今日,実際に払い戻しがされ,ようやく胸をなでおろした.

完全にこちらの不注意が原因なのに全額を払い戻していただいて,感謝しかない.

Lesson learned

git管理しているディレクトリ配下にアクセスキーとかを入れない

.gitignoreに書いておくとかすればいいと思うけど,不注意な自分では防ぎきれないおそれがあるし,防ぎきれなかった時のリスクが大きすぎる.

多少の不便は受け入れてでも,安全に.

CloudWatchを使うなりして,日常的にAWSの使用状況を監視しておく

今回は比較的早く気づいたので命拾いしたが,請求が来て気づいた,とかだと流石に払い戻しはしてもらえないようだ.

AWSのRole設定とか,インスタンス数の上限など,適切に設定しておく

今回悪用されたのはEC2関連の権限しか与えていないアカウントだったので被害が限定的だった.

悪意を持った人物の視点を持つ

Githubで「AWS_ACCESS_KEY」とかで検索することで容易に発見できる.