その他

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

2019年9月24日

こんにちは、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アクセスキーの漏洩は、非常に危険です。

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

-その他
-,

© 2024 Nanayaku blog Powered by AFFINGER5