この記事は初学者が作成した物です。
前提知識
AWSのS3を使う際に行うセキュリティー対策。
セキュリティー対策を怠った場合
AWSのID&PWが漏れてしまい膨大な金額を請求される恐れがある。
その為にも、セキュリティー面をしっかりと意識しよう
セキュリティー対策①
二段階認証
AWSをログインする際にAuthyを利用し
従来のID&PWだけでなく30秒事に変わる数列を作成することができます
セキュリティー対策②
IAMユーザー
IAMユーザーをは、ルートユーザーから一定の権限を与えられたユーザーです。
たとえハッキングを食らっても余計なことができないようにする為の対策です。
セキュリティー対策③
Githubにコードを載せない。
git secrets --register-aws --global
上記のコマンドは、git secretsをインストールした際にあらかじめ用意されているコマンドの一つです。
git secrets --register-aws で自力で細かな設定をすることなくAWS向けのcommit検査設定を導入することができます。
また、上記とは別に.gitignoreというのもあります。説明は省きますが、ファイルごと載せない方法です。
S3設定方法
AWSのS3をという機能を使い本番環境での写真データをS3に保存していきます。
まず、保存先を用意します。
AWSのS3でバケット(保存場所)を作成します、
例:testS3にて作成しました。
その後、セキュリティー対策②のために、IAMと連動させていきます。
S3のバケットポリシーにて
IAMユーザーのARN①とバケット名②を記載し保存して保存先が完了します。
--略ーー
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "************①****************"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::************②**********"
}
]
}
これで、保存場所ができたので、保存場所に設定されるように変更していきましょう。
gemインストール
gem 'carrierwave'
gem 'fog-aws'
gem 'mini_magick'
ターミナルにて、
rails g uploader image
コマンドを実行して、app/uploadersディレクトリ以下にimage_uploader.rbが作成されます。
ここを編集して、MiniMagick経由で画像のリサイズを行えるようにしましょう。
#ここから記載しています。minimagickを使用し300300に縦横比を維持したまま、縦横を800px以内
include CarrierWave::MiniMagick
process resize_to_fit: [800, 800]
#development.testの場合はfileでそれ以外はfogという書き方をしています。
if Rails.env.development? || Rails.env.test?
storage :file
else
storage :fog
end
本来であれば、
storage :file
storage :fog
のどちらかを設定すればいいのですが、今回はIFを使い分岐させております。
モデルを編集しimage_uploaderをマウントする記述を行います。
mount_uploader :image, ImageUploader
この記述は、モデルを作成していない為行っておりません。
config/initializers直下にcarrierwave.rbを作成。
こちらも同様に条件分岐を記載していきますが、、、
--略--
ここにも本番環境時とローカル時の違いを記載します。
CarrierWave.configure do |config|
if Rails.env.production? #本番環境の時は、fogになります。
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: Rails.application.credentials[:aws][:access_key_id],
aws_secret_access_key: Rails.application.credentials[:aws][:secret_access_key],
region: 'ap-northeast-1'
}
config.fog_directory = 'testS3'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/testS3
else
config.storage :file #ローカルに保存
config.enable_processing = false if Rails.env.test? #処理を無視
end
end
Rails5.2系から導入されたEncrypted Credentialsという機能を利用する必要があります。
以前ならsecret.ymlを利用していましたが、全てcredentials.yml.encを利用します。
※以下VScodeに限ります。
VScodeにてShellをインストール
credentials.yml.encを変更するために
ターミナルにて
EDITOR='code --wait' rails credentials:edit
AWSの設定を行う
# aws:
# access_key_id: 123
# secret_access_key: 345
最後に
rails c等で必ず設定できているか確認しましょう。
デプロイ
作成したアプリケーションをCapistranoを使ってデプロイしても、本番環境のアプリケーションはcredentialsを読み込むことができません。
その為にも本番環境で環境変数を使用するために、/etc/environmentsファイルで設定を行いましょう。