Help us understand the problem. What is going on with this article?

S3設定

この記事は初学者が作成した物です。

前提知識

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ファイルで設定を行いましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした