S3構築手順


ユーザ作成

(1)AWSにログインし、サービスのIAMをクリックします

(2)「個々のIAMユーザの作成」「ユーザの管理」を順にクリックします

(3)ユーザの追加をクリックします

(4)ユーザ名を入力し、「プログラムによるアクセス」にチェックを入れ、「次のステップ:アクセス権限」をクリックします。

(5)「既存のポリシーを直接アタッチ」後「AmazonS3FullAcces」にチェックを入れ、「次のステップ:タグ」をクリックします。

(6)「次のステップ:確認」をクリックします

(7)「ユーザの作成」をクリックします

(8)「csvのダウンロード」をクリックし、認証情報の記述されたcsvを保存します。

※後の処理で必要なので、必ず処理を行ってください

ユーザのパスワード設定

(1)IAMのトップページから「ユーザ」->「作成したユーザ名」をクリックします

(2)「認証情報」->「管理」をクリックします

(3)コンソールへのアクセスを「有効化」、パスワードの設定を「自動生成パスワード」にチェックを入れ「適用」をクリックします

(4)認証情報と同様に、必ず「csvのダウンロード」をクリックし、アカウント情報を保存してください

パケットの作成

(1)「サービス」->「S3」をクリックし、s3のページを表示します

(2)「パケットの作成」をクリックします

(3)バケット名に任意の名前を入力、リージョンは「アジアパシフィック(東京)」を選択し「次へ」をクリックします

(4)パブリックアクセスをすべてブロックのチェックを外し(※要確認)し、パケットを作成をクリックします

パケットポリシーの作成

(1)「IAM」->「ユーザー」->「作成したユーザー」をクリックします

(2)「ユーザのARN」の右側のアイコンをクリックしてユーザのARNをコピーします。

(3)「S3」->「作成したバケット」をクリックします。

(4)「バケットポリシーエディタ ARN:」の右側の文字列をコピーします(バケットのARN) 「アクセス権限」->「バケットポリシー」->「ポリシージェネレーター」をクリックします。

(5)別ウィンドウでポリシージェネレーターが開かれるので、以下の値を設定し「Add Statement」をクリックします

「Select Type of Policy」: S3 Bucket Policy
「Effect」: Allow
「Principal」: コピーしたユーザのARN
「AWS Service」: Amazon S3
「Actions」:All Actions('*')
「Amazon Resource Name(ARN)」:コピーしたバケットのARN

(6)「Generate Policy」をクリックします。

(7)生成されたPolicyを全選択し、コピーします

(8)コピーしたPolicyをバケットポリシーエディタへ貼り付け、「保存」をクリックします

Rails carrierwave(アップロードGEM)でのS3の使用方法

(1)GEMFILEにfog-awsを追加し、bundle installコマンドでGEMを取り込みます

gem 'fog-aws'

(2)app/uploaders/XXXX_uploader.rb(carrierwaveで作成)を以下の通り修正します

【修正前】

storage :file

【修正後】

storage :fog

または環境毎に設定

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

(3)config/initializersにcarrierwave.rbを以下の内容で作成します

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  config.storage :fog
  config.fog_provider = 'fog/aws'
  config.fog_directory  = '<作成したパケット名>'
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: '<上記処理で保存したcsvのaccess_key_idを記述>',
    aws_secret_access_key: '<上記処理で保存したcsvのsecret_access_keyを記述>',
    region: 'ap-northeast-1',
    path_style: true
  }
end