プログラミング

AWSアクセスキーが漏洩して破産しかけた話

こんにちは、Nanayakuです。

自分は、AWSアクセスキーをGitHubに公開してしまい、破産しかけたました。

その経緯と予防・対策について説明します。

特に、heroku に画像投稿機能のアプリをデプロイし、S3に画像を保存しようとしている初学者に見て欲しいです。

なぜ漏洩したのか?

自分は、転職用のポートフォリオでTwitterのクローンアプリを作成し、herokuにデプロイしました。

herokuには、投稿された画像を保存しておく事が出来ません。保存できない理由は、こちらを参照ください。

そこで、自分はAWSのS3に画像を保存することにしました。

S3は、AWS以外のサーバでもデータを保存することが出来るので、herokuで画像を保存する場合S3がよく用いられます。

S3にアクセするには、アクセスキーとシークレットキーが必要になります。

自分は、AWSアクセスキーが重要なものだと考えていなかったため、アクセスキーをGitHubにそのまま公開してしまいました。

その日のうちのAWSからメールが何件かきて、AWSのアラートを確認すると「このアクセスキーのユーザーを削除しろ」と警告が来ていました。

すぐにそのユーザーを削除し、何が起きたのかと調べた時、AWSアクセスキーを公開してはいけないと初めて認識しました。

AWSの運営の対応と運が良く自分は損害は出ませんでしたが、ユーザーを作成して6時間も経たず、このようなことが起き非常に恐ろしかったです。

 

漏洩しない為の方法

環境変数に代入

Gemの「dotenv-rails」は環境変数を管理することが出来るGemです。

「.env」の中で、AWSアクセスキーを環境変数に代入することで、オープンソースに表示されるのを防ぐことができます。

注意

「.gitignore」に.envを追記しないといけません。

 

dotenv-railsの設定方法

Gemfileに「gem 'dotenv-rails'」を追記し、「.env」ディレクトリを作成して環境変数を設定します。

 

 

 

GitHubで表示しないために、「.gitignore」に.envを追記します。

viエディタの使い方を参考にしてみて下さい。

 

「gem 'fog-aws'」と「gem 'carrierwave'」でS3に画像を保存する場合、環境変数は以下のように使用します。

各設定の意味を知りたい人は、「【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法 | vdeep」を参考にしてみて下さい。

 

「git-secrets」をインストーする

git-secrets」は、AWSアクセスキーをGitHubにpushした時に、知らせてくれるAWS公式のツールです。

インストール・設定方法は「AWSアクセスキーをGitリポジトリに混入させないために git-secrets を導入した | DevelopersIO」で分かりやすく解説してあるので、こちらを参照して下さい。

 

漏洩した時の対策

AWSから警告があった場合、そのアクセスキーを持つユーザーを直ちに削除して下さい。

自分は、気付くのが早かったおかげで、被害はありませんでした。

 

参考サイト

まとめ

AWSアクセスキーの漏洩は、非常に危険です。

S3を利用するためにAWSアクセスキーが必要な場合は、「dotenv-rails」を使い環境変数に代入し、必ずAWSアクセスキーが公開されないようにしましよう。

-プログラミング
-

Copyright© Nanayaku blog , 2019 All Rights Reserved Powered by AFFINGER5.