2022/03/05

クラウドサービス利用のリスク / How I Got Pwned by My Cloud Costs~設定不備によるスパイクで100万円の請求が来ることも~

How I Got Pwned by My Cloud Costs

私は、昔も今も「クラウド」の大推薦者です。私はHave I Been Pwned(HIBP)をクラウドファーストのサービスとして構築し、Azure Table Storageのような最新のクラウドパラダイムを活用して、以前には達成できなかったような異常なレベルのパフォーマンスでコストを大幅に削減することができました。私は、小さなお金で大きなことをすることについて多くのブログ記事を書き、これらのアプローチで得た大きな成功について世界中で講演を行いました。今日はその正反対、クラウド・コストに負けた話について書こう。

それは、2021年12月のAzureの請求書が、通常よりはるかに高額だったことから始まりました。問題を発見するのに少し時間がかかりました。

 


その請求書は2022年1月10日に届いたのだが、私以外の家族が全員武漢ウイルスにかかったため(幸いにも全員無症状かごく軽度)、請求書を見るまでにさらに10日ほどかかってしまった。痛っ それももっとひどいのだが、それはまた今度。

私が最初に見るのはAzureのコスト分析で、上記のような項目を使用しているすべての個別サービスに分解しています。HIBPは、ウェブサイト、関係データベース、サーバーレス「Functions」、ストレージなど、多くの異なるコンポーネントで構成されています。すぐに、あるサービスがトップに浮き上がりました。


この最初の項目が、すべてのサービスにおける帯域幅コストの98%を占めています。すべての HIBP サービスだけでなく、Hack Yourself First から Why No HTTPS まで、私が Azure で実行しているすべてのサービスです。ここで話しているのは、Microsoft の Azure インフラストラクチャから送信されるデータのイグレス帯域幅(GB あたり 0.1205 豪ドル)であり、通常は Web サイトへのトラフィックなどです。しかし、このアカウントはストレージアカウントです。まず、使用量が急増し始めた時期から見てみましょう。

2021年12月20日。NCAから提供された何億もの新しいパスワードとともに、FBIのためのPwned Passwordsインジェスト・パイプラインが開始されたのです。オープンソースのコードベースが初めて製品としてリリースされたのでしょうか。それとも他に何か?私は、帯域幅の使用状況をより細かく調べることから始め、さらに深く掘り下げていく必要がありました。

一貫して、それぞれのスパイクは17.3GBでした。完全に直線的な分布ではありませんが、かなり規則的なスパイクです。Pwned Passwordsのダウンロード可能なハッシュです。しかし、これらは常にCloudflareのエッジノードにキャッシュされます。そのため、私は無料でサービスを提供することができ、オリジンサービスからの帯域幅を無視できるように、そこの人々と多くの仕事をしました。実際、それが問題だったのでしょうか?ストレージアカウントで診断を有効にして、個々のリクエストのレベルまで、もう一度深く掘り下げてみましょう。

さて、そこで問題です。これらのリクエストは定期的にログに現れ、そのたびに私の財布に17.3GBの穴が開いていたのです。このIPアドレスはCloudflareのもので、トラフィックは間違いなく彼らのインフラを経由しており、したがってキャッシュされるはずでした。Cloudflareのダッシュボードが何を言っているのか見てみましょう。

Cloudflareがキャッシュすべきものをキャッシュしていないという症状は明らかでしたが、根本的な原因は明らかではありませんでした。私はすべての設定、例えば「downloads」サブドメインのキャッシュポリシーを定義するページルールを調べ直しました。

そして、その結果、両方のSHA-1アーカイブが15GBを超えました。くっそー。根本的な原因がはっきりしたので、Cloudflareのルールを微調整してみました。

HIBPのウェブサイトから直接ダウンロードできるリンクを削除し、シードがたくさんあるトレントだけを残したので、データを入手するのはまだ簡単でした。その後、Cloudflareが15GBの上限を上げたので、torrentをダウンロードできる環境にない人たちのためにリンクを復活させました。危機は去りました。

それで、被害総額はどうなったんですか?ええと...よくないですね。

その期間の通常の使用量に加え、11,000オーストラリアドル以上の費用がかかっています。痛っ! 他の地域の人たちからすると、約8千米ドル、6千英ポンド、7千ユーロに相当します。これは、1日あたり約350豪ドル、1カ月間かかったことになる。本当に痛かったし、起こってはならないことだった。もっと早く気づいて、このようなことが起こらないような安全策をとっておくべきだったのです。私の責任です。しかし、以前、クラウドがいかに費用対効果が高いかという話をしたように、今回はクラウドがいかに悪い影響を与えるかという話もする必要がありました。しかし、単に悲惨な話をするだけでなく、このようなことが二度と起こらないようにするために私が行ったことをお話ししましょう。

まず、Azureの帯域幅が高価であることは常に知っていましたし、特に最も多くのデータを扱うストレージアカウントについて、もっとよく監視するべきだったのです。この記事の最初のグラフを見ると、トラフィックが異常になる前、通常の使用では、イグレス帯域幅は1日に50GBを超えることはありませんでした。この閾値を超えたときに、ストレージアカウントにアラートを設定しましょう。