こんにちは、Nanayaku(789__PQ)です。
自分は、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」ディレクトリを作成して環境変数を設定します。
gem 'dotenv-rails'
$ bundle install $ mkdir .env
AWS_ACCESS_KEY_ID=' ' AWS_SECRET_ACCESS_KEY=' '
GitHubで表示しないために、「.gitignore」に.envを追記します。
$ vi .gitignore
viエディタの使い方を参考にしてみて下さい。
「gem 'fog-aws'」と「gem 'carrierwave'」でS3に画像を保存する場合、環境変数は以下のように使用します。
CarrierWave.configure do |config| config.storage :fog config.fog_provider = 'fog/aws' config.fog_directory = 'bucket-name' config.fog_credentials = { provider: 'AWS', #↓ aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], #↑ region: '設定したregion', path_style: true } config.fog_public = true config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } end
各設定の意味を知りたい人は、「【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法 | vdeep」を参考にしてみて下さい。
「git-secrets」をインストーする
「git-secrets」は、AWSアクセスキーをGitHubにpushした時に、知らせてくれるAWS公式のツールです。
インストール・設定方法は「AWSアクセスキーをGitリポジトリに混入させないために git-secrets を導入した | DevelopersIO」で分かりやすく解説してあるので、こちらを参照して下さい。
漏洩した時の対策
AWSから警告があった場合、そのアクセスキーを持つユーザーを直ちに削除して下さい。
自分は、気付くのが早かったおかげで、被害はありませんでした。
参考サイト
- AWSアクセスキーをGitリポジトリに混入させないために git-secrets を導入した | DevelopersIO
- [まとめ] AWSのアクセスキーを安全に管理する方法 - 上海エンジニアブログ
- 初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。 - Qiita
- 5分でわかるS3 | ナレコムAWSレシピ
- GitHub に AWS キーペアを上げると抜かれるってほんと???試してみよー! - Qiita
- 【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法 | vdeep
- 【Rails】『dotenv』で環境変数を管理する方法 | vdeep
まとめ
AWSアクセスキーの漏洩は、非常に危険です。
S3を利用するためにAWSアクセスキーが必要な場合は、「dotenv-rails」を使い環境変数に代入し、必ずAWSアクセスキーが公開されないようにしましよう。