編入関連の質問はTwitter,@mast15yamachiにてこの広告は、90日以上更新していないブログに表示しています。calendaradventar.orgの24日目の記事です。この聖なる日の前夜に,(追記:この日予定が入ったので記事の公開を前倒ししました)mast3編でもっともキラキラしてない男が記事を書きます。普段はPythonで自分の興味のある諸々をかたかたしたり、変態力の高い友人の妄想を形にするようなクソゲーゲーム作りを細々やってるヒキニートです。今回のお話はタイトルの通り素人がAWSでミスを犯して身に覚えのない45万相当の請求を食らい、1週間ほど食事が喉を通らなかった話です。自体は怖くない、素晴らしいサービスだということは言っておきたいです。本記事をご覧になったmastのみなさんが今後クラウドサービスを使ったサービス開発をするときに、筆者と同じ轍を踏まないことを切に願っております。筆者は極度のバカで豆腐メンタルのIT初心者です。知識のある方にとっては「初心者ってここまで無知なもんか」と気分が悪くなる記事です。AWSとはaws.amazon.comもうすでに知ってる人はたくさんいるかと思われますが、AWSとは世界最大手のクラウドサービスであり、仮想マシン(EC2)やストレージ(S3)、データベース(AmazonRDS)をはじめとした幅広いサービスを提供しています。事の始まりは「なんかアプリつくろーぜ」的な流れに参加し、iosアプリケーションを開発することになったのがきっかけでした。私はWinユーザーであるうえに、Swiftのことはさっぱりわからなかったので、もっぱらサーバーサイドの開発に従事していました。録音の機能が必須でした。サーバーはherokuを使っていましたが、heroku単体では音ファイルのアップロードはできないということが判明し、S3にクライアントからファイルを一回アップロードしてからそれを今度はheroku側で処理する、という方式をとっていました。開発が行き詰まっていたところに、S3という救世主が現れたことによって実装したい機能が実現し、喜んでいたのもつかの間、悲劇が起こりました。朝起きたらこんなメールが届いていました。要するに「おまえの垢、のっとられとるで」的な内容だろ。「ま、またまたぁ~ご冗談を~(笑)」とか笑い飛ばしながら、震える手で請求画面を見ると・・・いやいやいや、これ450円だろ?.5fとかいれてんだろ?とか思いつつも、点がふたつある小数なんて存在しないことに気づく。ああ・・・45万円か・・・しばし真顔の後、どうしてこうなったのかすぐに原因を究明すべく各所に回りました。おかしいところを探した結果、今回のアプリケーションに必要のないEC2が、インスタンスを全リージョン全力で回されていたことがわかりました。*2おそらく流行りのビットコインマイニングにでも使われたのでしょう。起こったミスとしては・クライアント側のメンバーのgithubにシークレットキーをそのままのっけたswiftコードをうpしてしまっていた(githubに誤ってうpされたシークレットキーをクローリングする悪い奴らがたくさんいます。)・シークレットキーが管理者権限アクセス可能なものとなっていた(外したつもりが外せてなかったっぽい)その後の対処まず、クライアント側のメンバーのGitHubのリポジトリごと削除してもらいました。公開してしまったアクセスキーとシークレットキーを削除、また、身に覚えのないEC2インスタンスの削除と、すべてのやるべきことを済ませ、あとは全力でAWSサポートに返金要求という名の命乞い(もはや比喩ではない)をしました。命乞いすべての作業を済ませ、AWSサポート側にメールをします。it.(^p^)「なんか身に覚えのないものごっつい請求来て困っています、どうにかできませんか?」AWSサポート「・・・」(^p^)「おーいこの件どうなりました?」AWSサポート「・・・」(;^p^)「あの返事・・・」AWSサポート「・・・」こんな感じですぐに返信が来ず、非常に胃の痛い時間を過ごしました。このままではらちが明かなかったので、サポートのプランをBasic($0、現地時間の営業時間のみしか対応できない)→Developer(月$30,24時間対応可)のプランにしました。45万の請求来てるからこのくらいの課金なんていまさらどうってことありません。してすぐにサポートから返事をもらい、「基本的にこのようなケースでは支払い義務は発生するが、今回に限り特別に対処することも検討する」とのことで返信を頂きました。すべての行程を終えたあとは支払い免除されることを祈るのみです。このときのメンタルはまるでパトラッシュです。「免除されなかったらどうやって金の当てをつけよう?友人に土下座して回るかな、いっそ闇金かな」みたいな今思えばしょうもないことを考えていました。「支払い免除リクエストを出しました。請求チームが動きます。無事45万円の支払いを免除していただきました。Amazonに一生頭があがらないです。安堵で思わず泣きました。お忙しい中対応してくださったAWSサポートの担当者には本当に本当に感謝の気持ちでいっぱいです。迷惑をかけたチームのメンバーには申し訳ない事をしたと思っております。そんななかでも彼らは解決策を探してくれたりして、感謝感謝です。今後の対策これからAWSを使うときは、同じ失敗をしないようにしなければいけません。今回のようなミスを今後防ぐにはアクセスキーを発行するときは、AWSアカウントではなく、操作権限を絞ったIAMアカウントのものを発行する(要するに、特定のサービスのみを使えるようにする)、管理者権限は絶対につけないGithubにシークレットキーをハードコーディングしたコードは絶対にうpしない、やむを得ずどうしてもうpしたいときはprivateリポジトリにあげる(awsが用意したgit-secretsなるプライベートキーをcommitさせないツールなんてものもあるらしいです)*3AWSの請求アラート(ある金額になったり、無料枠を超えそうになったらメールで警告してくれる機能)は必ずつけるチームで開発するとき、何かアクションを起こすときはすぐに報告、まずそうなことがあったらまずチームメンバーに相談、そして解決策をとにかくググって調べるということを徹底していきたいです。今は無事S3を使って音声認識のシステムを無事使える状態にしてあります。今後こういったことを守り、アプリケーションを使っていきたいです。「無知と油断は身を滅ぼす」ということです。アクセスキーペアの重要性の話はコンピュータリテラシーやネットワーク、セキュリティの講義で耳にたこができるほど説明されます。それにもかかわらず、アクセスキーがいかに大切なものなのかを知らずにいた「無知」、そして「こうしとけば大丈夫やろ~」「まさか自分がそんな不正利用に遭うわけがない」という「油断」、こうしたある種の傲りがあったからこそ、今回のような事件は起きてしまったのだと思います。起きそうなときにも踏みとどまってしくじりを防ぐ「細心さ」が必要なのかな、と思いました。今回運よくAWSサポートさんに助けていただきましたが、何度も同じ対応をしてくれることはありません。次同じことを起こしたらおそらく自腹です。失敗は起きたとしても1度に納めなければいけません。2度同じ失敗を繰り返せばその時こそ身を滅ぼします。自戒も込めて皆さんには伝えたいです。(;ω;)ほかのmastの人がすごくためになる記事だったり、なにかに全力で取り組みその裏を見せる素晴らしい記事を書いている中、私はこういうクソみたいなしくじりしか書けないことが本当悔しいし、力不足を感じます。自分は音の信号処理だったり音楽データに関するプログラミングだったりのことを勉強中なので、今後このようなmastの皆で記事を書くような機会があれば、音処理沼に引き込めるようなファビュラスな記事を書ければ、と思います。p.s痛風の話はまたどこかでしたいと思います。*1:このような話は何番煎じかわかりませんが書きます*2:CPU64個、メモリ256GBのインスタンス(一番サイズが大きいやつ)が全リージョン合計200個ぐらい回ってて大草原だった*3:ほかに何か対策があったら教えてほしいです。2018の出展のお手伝いをした話こんにちは、やまちです。久々に記事を書きます。pythonで音関連ファイルをあれこれするまとめ28日チャレンジ1日目は音データの扱いについて書きます。月別アーカイブはてなブログをはじめよう!yamatchさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。