AWS S3バケットを利用する際に気をつけて頂きたいことがあります。それは、AWS S3バケットを放棄した際、適切な後処理をしないと、リモートコードの実行やサプライチェーンアタックの危険性が存在するということです。
概要
AWS S3バケットは、データをクラウド上に保存し、URL経由でアクセスすることができる、クラウドストレージの一種です。
例えば、webサイトやECサイトで使う画像などのデータをバケットに保存し、任意のページから参照するような使い方をします。
使う分には問題ないのですが、気をつけないといけないのは、そのバケットが必要なくなった時です。バケットを削除(放棄)すると、データは削除され参照できなくなるのですが、問題は他のAWSユーザが任意のバケットを作った時に、この放棄したバケットに割り当てられていたURLが新しく作られたバケットに割り当てられてしまうことです。
webサイトやECサイトで参照していた画像に代わり、どこの誰が作ったのかわからないバケットのデータを表示することになってしまうのです。
これは非常に危険です。新しいバケットの作成者が悪意のあるコードを含んだデータをバケットに入れていると、あなたのwebサイトやECサイトでそれが実行されてしまうのです。
また、これは自分たちのサイトに限った話ではありません。例えば自分たちの用意した資料をバケットに入れていて、取引先の企業が使うような管理画面の中から参照しているとしましょう。そのバケットのデータが悪意のあるものに代わってしまうと、自分たちだけでなく、取引先の企業にまで影響が及びます。
記事による調査では、軍事ネットワークや大企業、銀行、政府機関などもその被害を被る可能性があったということで、非常に潜在的なリスクが高いものになります。
対策
1つ目は、バケット名を予測されないランダムな文字列を含むものにすること。
2つ目は、バケットを放棄したと同時に、割り当てられていたURLを使って参照している箇所を全て削除することです。webサイトからの参照を削除するのです。
3つ目は、AWSによって導入された「bucket ownership condition」機能を使うことです。この機能は、一度割り当てられたURLを再度割り当てる際に、その割り当て先を制限するというものです。この機能により、自分たちのAWSアカウント以外では割り当てが行われることがなくなります。オプション機能ですので、しっかりと設定を行いましょう。
ちなみに必須機能となっていないのは、機能として柔軟性を持たせたり、互角性を維持するなどの理由からだそうです。
おわりに
AWS S3 は、ストレージ容量を気にすることなく利用できたり、使った分だけ請求される従量課金、ハードウェアの障害も心配しなくて済むなど、メリットも多いサービスです。
しっかりとリスク対策をすれば、安心して長く使えるものですので、ぜひ対策をしてみて頂ければと思います。