空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表

空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表 - 画像


AmazonのクラウドコンピューティングサービスであるAWSが提供するストレージサービス・Amazon S3では、写真や動画などのデータをアップロードするためにバケットを作成する必要があります。このS3バケットを空の状態にしていると、AWSの請求額が爆発的に増加してしまうという問題を、ソフトウェアエンジニアのMaciej Pocwierz氏が報告しました。
How an empty S3 bucket can make your AWS bill explode | by Maciej Pocwierz | Apr, 2024 | Medium
https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1


Pocwierz氏はクライアント向けに作成していたドキュメントインデックスシステムの概念実証として、AWSの「eu-west-1」リージョンに単一のS3バケットを作成し、テスト用に複数のファイルをアップロードしたそうです。その後、AWS上で行っていたことが無料利用枠の制限内に収まっていることを確認するため、AWSの請求額をチェック。すると、請求額が1300ドル(約20万円)を超えていたそうです。確認したところ、わずか1日で約1億件ものS3 PUTリクエストが実行されていたことが明らかになります。

空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表 - 画像


デフォルトでは、AWSはS3バケットに対して実行されたリクエストをログに記録しません。ただし、AWS CloudTrailやS3のサーバーアクセスログを使用して、ログを記録するように設定を変更することができるそうです。Pocwierz氏はAWS CloudTrailのログ記録を有効にした後、複数のアカウントまたは完全にAWSの外部から発信された数千件の書き込みリクエストを検出することができたと語っています。
なぜ一部のサードパーティーがS3バケットに不正なリクエストを大量に送信するのかを疑問に思ったPocwierz氏は、調査を実施。すると、これはDDoS攻撃のようなものではなく、「人気の高いオープンソースツールのひとつがバックアップをS3に保存するというデフォルト構成を持っているため起きる過剰リクエスト」であることが明らかになります。つまり、このオープンソースツールを使用したあらゆるツールのデプロイメントが、バックアップをS3バケットに保存しようというわけ。Pocwierz氏は「設定を誤った多数のシステムがデータを私のプライベートなS3バケットに保存しようとしたため、過剰な請求が発生してしまったようです」と言及。
Pocwierz氏がAWSのサポートに問い合わせたところ、「はい、S3は不正なリクエストに対しても料金を請求します。それは予期された動作です」という返答が得られたそうです。

空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表 - 画像


そのため、ターミナルを開いて以下のように入力した人がいる場合、「AccessDenied」というエラーメッセージが表示されるものの、リクエストに対する料金がユーザーに請求されることになるわけ。なお、これはAWSアカウントなしで要求可能なリクエストです。
aws s3 cp ./file.txt s3://バケット名/random_key
さらに、Pocwierz氏は「eu-west-1」リージョンにS3バケットを作成したにも関わらず、なぜかリクエストの半数が「us-east-1」リージョンからのものであるという点にも疑問を抱いています。これについてPocwierz氏は、「リージョンが指定されていないS3リクエストはデフォルトでus-east-1になり、必要に応じてリダイレクトされるということでしょう。これによりバケットの所有者は、リダイレクトされたリクエストに応じた追加料金を支払わざるを得なくなります」と指摘。
AWSの請求額が高騰した理由は上記の通りですが、Pocwierz氏は「検討したいアイデアがもうひとつありました」と記しています。検討したいアイデアとは「設定を誤ったシステムがすべて、データをS3バケットにバックアップしようとするのであれば、そのまま放置しておけばどうなるのか?」というもの。そこでPocwierz氏がバケットを公開書き込み用に設定したところ、30秒以内に10GBを超えるデータを収集することができたそうです。Pocwierz氏は「もちろん誰のどういったデータが書き込まれたのかを明かすことはできません。しかし、悪意のない構成の見落としが危険なデータ漏えいにつながる可能性があることに私は驚きました」と言及しています。
なお、上記の通り問題のオープンソースツールの名前を開示してしまうと、影響を受ける企業がデータ漏えいの危険にさらされる可能性があるとして、Pocwierz氏はこのツールの名前を伏せています。

空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表 - 画像


Pocwierz氏はこれらを踏まえて以下の3点がAmazon S3を利用する上での教訓になったとしています。
◆1:S3バケットの名前を知っている人は誰でも好きなようにAWSの請求額を増やすことができる
バケットを削除する以外にこれを防ぐ方法はありません。S3 APIを介して直接アクセスされている場合、CloudFrontやWAFなどのサービスでバケットを保護することはできません。標準のS3 PUTリクエストの価格は1000リクエスト当たりわずか0.005ドル(約0.78円)ですが、1台のマシンで1秒当たり数千件のリクエストを簡単に実行することができます。
◆2:バケット名にランダムなサフィックスを追加するとセキュリティを強化できる
サフィックスを追加することで、システムの構成ミスや意図的な攻撃に対する脆弱性が軽減されます。少なくともS3バケットに短い一般的な名前を使用することは避けてください。
◆3:S3に対して大量のリクエストを実行する場合は必ずAWSリージョンを明示的に指定すべき
リージョンを指定することでS3 APIリダイレクトによる追加コストを回避できる。
Pocwierz氏は調査結果を問題のオープンソースツールの管理者に連絡しています。これによりデフォルト構成はすぐ修正されたそうですが、既存の展開されている利用例を修正することはできません。Pocwierz氏はAWSのセキュリティチームにも問題を通知しており、「ユーザーを不正な請求やデータ漏えいから守るために問題になりそうなS3バケット名を制限するように」と提案しています。しかし、AWSはサードパーティー製品の設定ミスに対処することに消極的だったとのこと。なお、AWSは今回の問題で発生した莫大な請求額をキャンセルしてくれたそうですが、「あくまで例外的な措置」と強調されたそうです。

空のS3バケットでAWSの請求額が爆発的に増加するとの指摘、Amazonはさっそく問題に対処すると発表 - 画像


なお、AWSのJeff Barr氏は問題の報告を受けて「この記事を我々に知らせてくださった皆様に感謝します。お客様が自分で開始していない不正なリクエストに対して料金を支払う必要はないということに私たちは同意します。これらの料金の防止に具体的にどのように取り組むかについては、近日中に詳細をお知らせします」と述べ、今回の問題の対策を講じていると強調しました。
Thank you to everyone who brought this article to our attention. We agree that customers should not have to pay for unauthorized requests that they did not initiate. We’ll have more to share on exactly how we’ll help prevent these charges shortly.#AWS #S3
How an empty S3…— Jeff Barr ☁ (@jeffbarr) April 30, 2024

◆フォーラム開設中
本記事に関連するフォーラムをGIGAZINE公式Discordサーバーに設置しました。誰でも自由に書き込めるので、どしどしコメントしてください!Discordアカウントを持っていない場合は、アカウント作成手順解説記事を参考にアカウントを作成してみてください!
• Discord | "AWSやGCPなどで意図しない使用料が発生したことある?" | GIGAZINE(ギガジン)
https://discord.com/channels/1037961069903216680/1235525804633489448

ジャンルで探す