☣️

Amazon EC2 の大量生成でかなり請求された話し

2023/12/13に公開

背景

他人のポストに便乗して万バズしている @___nix___ です。

AWSとコスト爆発にまつわる話の中で、アクセス権流出による事故も存在します。

6位 ... AWS Private CA($400/月)
5位 ... Amazon Kendra ($810/月)
4位 ... NatGateway($1,000/月)
3位 ... Amazon RDS Proxy($1,190/月)
2位 ... AWS CloudTrail ($62,000/4日)
1位 ... Amazon EC2 ($65,000/2日)

本題

今回は以前1位だった AWS CloudTrail をぶっこ抜いて堂々の1位に躍り出た Amazon EC2 のお話しです。
但し、通常利用でコスト爆発したわけでは無く、クレデンシャル漏洩により EC2 を大量生成されたことによる事故のご紹介です。

始まり

全てはAWSから届いた1つのメッセージでした。

Your AWS Account may be compromised! Please review the following notice and take immediate action to secure your account.

We detected abnormal activity in your AWS account that matches the pattern of unauthorized access. This activity is related to your AWS Access Key xxxxxxxxxxxxxxxx, which may indicate that this Access Key and the corresponding Secret Key are compromised.

This poses a security risk to your account (including other account users), could lead to excessive charges from unauthorized activity, and violates the AWS Customer Agreement or other agreement with us governing your use of our service. To protect your account from excessive charges, we have temporarily limited your ability to use some AWS services. To remove the limits, please follow the instructions below.

お客様のAWSアカウントが危険にさらされている可能性があります!以下の通知を確認し、アカウントを保護するために直ちに対処してください。

お客様のAWSアカウントで、不正アクセスのパターンに一致する異常なアクティビティを検出しました。このアクティビティは、 AWS Access Key xxxxxxxxxxxxxx に関連しており、この Access Key と対応する Secret Key が侵害されている可能性があります。

これは、お客様のアカウント(他のアカウントユーザーを含む)にセキュリティリスクをもたらし、不正な活動による過剰な請求につながる可能性があり、AWS Customer Agreementまたはお客様の当社サービスの使用を規定する当社とのその他の契約に違反します。過剰な請求からお客様のアカウントを保護するため、AWSでは一部のAWSサービスの利用を一時的に制限しています。制限を解除するには、以下の手順に従ってください。

調査

何が起こっているのかを確認すると大きく分けて2つ。

1. CloudFront の DNS が引けない

# host xxxxxxxxxxxxxx.cloudfront.net
#

host の問い合わせに対して何も喋りませんw
これによりサービスへの影響は絶大です。

更に CloudFront に関する操作が全て失敗する状況に遭遇します。
恐らくこのスクリーンショットを見れた方はかなりレアですので運気が上がります。

2. EC2 が大量生成されている


EC2 の一覧画面の様子です。(おぃおぃ、しかもGPUインスタンス...)


こちらは EC2 Global View の様子。(ヤバい状態であることが分かるかと思います)

解説

EC2 を大量生成していたのは アクセスキー を利用した方法でした。
しかしながら、アクセスキーは漏洩したものでは無いことも確認できてました。
この部分に関してはこれ以上詳細を語れないことをお許しください。

X ではイキってこんなことをポストしてますが、実はこのケースでは GuardDuty の通知では間に合いません...(皆さん いいね や リポスト して頂いているのにすみません)

ただ、GuardDuty によるアクセスキーの不正利用はかなり強力で、今までに何度か助けられてますので必ず有効にしておくことをお奨めします。

請求とクレジット


余り詳細を出し過ぎるとアレですが、状況だけは把握できるようにしてます。
Credits が交渉により減額して頂いた費用です。
つまり、$51,837 減額して頂いたということになります。

全てを負担しないのはやはり「責任共有モデル」だからですね。

付録1

AWS からの通知を良く読むと以下の一分があります。

we have temporarily limited your ability to use some AWS services.

実はこれが CloudFront であることが調査やAWSサポートとのやり取りで分かりました。
つまり、全てを綺麗にしない限り正常サービス運用が出来ないという制限です。

何故このような制限が施されるのかを考えると、例えば悪用されたアクセスキーを残したまま、生成された全ての EC2 インスタンスを削除しただけだと、再びアクセスキーの不正利用により攻撃を受けた場合にAWSが何らかの対応をしなければいけなくなる為です。

AWS「ここまでやらないとあなたのサービスは正常稼働させませんよ、何故ならば我々もまた同じような対応を続けるのは嫌なので。」

ということなのだと思います。

CloudFront にロックを掛けるのは非常に効果的な方法だったりします。
CloudFront の代替ドメインは S3バケット名 と同様に世界中で一意で無ければならないので、他のAWSアカウントを利用しても同じ代替ドメインを設定できないのです。

しかもある程度利用状況を見て何を止めるのか幾つかパターンを持っているのかもしれません。今回、CloudFront を利用していない構成の場合、どのサービスが止められたのかと思うと色々と面白いです。

付録2

このやり取りでは海外のAWSサポートとチャットで細かく何度もやり取りを重ねました。
全てが綺麗になり、CloudFront のロックを外したという連絡が来たので名前を引いてみたのですが状況が変わらず。この状況を伝えるとURLを送られ、そこからリセットのような操作をすることで完全回復することができました。
このURLとUIもほとんどの方が見たこと無いだろうなと思いながら操作してましたので、とても貴重な経験をさせて頂きました。

編集後記

「おい、パリピ!お前んところは問題だらけじゃないか!」
という声が聞こえてきそうな程レアな事象や経験を沢山積んでいるわけですが、その理由は簡単です。皆さんが30年で経験することを私は5年で経験する環境に身を置いている為です。
そう、それは「精神と時の部屋」(´・ω・`)?

Discussion