こんにちは!虎の穴開発室N.Tです。
今回は自宅で勉強中に起きた事故についてご紹介します。
AWSからのメール
ある日AWSから[Your AWS account is Compromised]という表題メールが送られてきました。
私は英語が全くできませんが、自分のアカウントに何かが起きていることは読み取れるので、
気になって表題を翻訳して見ると「あなたのAWSアカウントが侵害されている」と出たため、
びっくりしてAWSコンソールにログインしてみました。
被害状況
幸いなことにAWSコンソールにはログインできました。以下、主な被害状況です。
- 請求額は約$600以上。
- EC2の請求金額だけが異常に高額。
- 全てのリージョンから料金発生。
- 各リージョンで作成した覚えのないインスタンスが大量に稼働。
原因
そもそもなぜアカウントが侵害されてしまったのかというと
数日前、練習のためRailsで画像ファイルのアップロード処理を実装する際、
Amazon S3との接続のためソースコードにアクセスキーとシークレットキーを直接記載し、
そのままコミットしてしまいました。
玄人から見ればそんなバカなことするわけないと思いますが、
素人の私はアクセスキーがネットに流出することの恐ろしさを認識していませんでした。
また、自分が勉強用に作ったリポジトリにアクセスするような暇人はいないとも思っていたのです。
しかし、悪意のあるBOTがGitHubをクローリングしており、
私のようにミスを犯す人を狙っていたのです。
これは後で調べたことですが、AWSも同様にクローリングを行なっており、
誤ってアクセスキーをコミットするとAWSから通知が来ることもあるそうです。
対応
AWSから送られて来たメールに対応すべきことが記載されていました。
以下、日本語で要約したものです。
- rootアカウントのパスワードを更新する。
- AWSアクセスキーをローテーションし削除する。
- すべてのリージョンで不正利用のためのアカウントを確認する。(被害にあったインスタンスはメールに記載されています。)
- IAMユーザー、AMI、EBSボリューム、スナップショットで自分が認識していないものを全て削除する。
- 不正なリソースを全て終了させる。
- 上記を行なった上で5日以内にAWSに返答*1する。
アカウントの復活作業をユーザー側で対応していることが確認されたら、
AWS側で審査の上、認められれば正しい請求額に修正してくださいます。
ベストプラクティス
今回のようなことが2度と起きないようにするためにもアクセスキーの正しい管理を知る必要があります。 AWS公式がアクセスキーの管理についてのベストプラクティスを提供しています。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-access-keys-best-practices.htmldocs.aws.amazon.com
再発防止策
AWSから対応完了の連絡がくるとともに、予期せぬ請求にそなえていくつか解決策をご教示いただきました。
http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.htmldocs.aws.amazon.com
http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.htmldocs.aws.amazon.com
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-user-guide.htmldocs.aws.amazon.com
これらのサービスについては今後当ブログで詳細を解説できればと思います。
エンジニア大募集!!
虎の穴ではエンジニアを大募集中です!!
JavaやRubyでの開発やAWSやGCPに興味のある方、ぜひご応募ください!
*1:AWSとのやりとりはAWSコンソールのサポートセンターで行います。
私は間違えて、最初メールでやりとりをしてしまいましたが、
AWSカスタマーセンターから日本人の担当者の方から日本語でメッセージが届き、
改めて海外拠点と料金の調整についてやりとりするように言われました。
とても丁寧で素晴らしい対応でした。