Heroku에 AWS S3을 배포하는 방법 (Rails)

4056 단어 경 6루비RailsS3AWS

Heroku에 S3를 도입하여 이미지를 영구화할 수 있도록 하는 단계를 소개합니다! (학습 기록)



Heroku에 S3를 도입하는 이점



게시 기능이 붙어있는 응용 프로그램은 이미지를 저장하는 기능이 필요할 수 있으며, heroku에서는 이미지의 영속화를 할 수 없어 어느 일정 시간에 표시되지 않게 됩니다. 그것을 피하기 위해 AWS S3를 활용!

S3를 사용할 때의 보안 대책



AWS를 사용할 때 보안 조치는 필수입니다. 만약 AWS 계정 ID, 비밀번호, 액세스 키 등의 정보가 유출되면 서비스를 무단으로 이용하여 고액의 이용료를 청구받을 위험이 있기 때문입니다.
주로 이러한 보안 대책의 예로서 로그인을 2단계로 설정(2단계 인증), 이용 제한이 있는 사용자를 사용(IAM 사용자), 저장 기능에 액세스 제한을 설정(버킷 정책), GitHub에서 소스 제어에서도 보안 대책 등입니다. 이 GitHub의 소스 제어에는 비밀 정보를 변수에 대입하여 사용 (환경 변수), git-secrets를 사용한 비밀 정보를 오작동으로 커밋하지 않도록 방지하는 기능이 있습니다.

S3 초기 설정



1. AWS 계정 생성
2.IAM 사용자 만들기
3.IAM 사용자로 로그인
4. 2단계 인증을 설정하여 보안 대책(루트 ​​사용자로 돌아가 휴대폰의 2단계 인증을 하기 위한 앱과 연계, IAM 사용자에게도 같은 설정(자세한 것은 할애))

S3에서 저장 위치 만들기



S3에서는 버킷이라는 개념이 있으며 여기에 자신의 데이터를 저장합니다. 그리고 리전이라는 AWS 시설에 보관됩니다.
1. 루트 사용자로 S3을 열고 버킷 만들기
2. 버킷 이름, 지역 지정, 사용 권한 설정
3. 버킷 정책을 사용한 액세스 제한
버킷 정책은 버킷에 대해 어떤 사용자가 어떤 처리를 할 수 있는지 결정하는 것입니다.
4. IAM 사용자로부터 사용자 ARM 복사
5.S3의 버킷 이름을 클릭하고 권한을 클릭하고 편집 버튼을 클릭합니다.
6. 정책란에 코드를 기입
{
   "Version": "2012-10-17",
   "Id": "Policy1544152951996",
   "Statement": [
       {
           "Sid": "Stmt1544152948221",
           "Effect": "Allow",
           "Principal": {
               "AWS": "①"(先ほどコピーしたユーザーのARN)
           },
           "Action": "s3:*",
           "Resource": "arn:aws:s3:::②"(作成したバケット名)
       }
   ]
}

7. 변경사항 저장을 클릭

로컬 환경에서 S3 사용



1. 우선 Gem을 소개합니다!
gem "aws-sdk-s3", require: false

# bundle install
% bundle install

2.development.rb 편집
# before
config.active_storage.service = :local
# after
config.active_storage.service = :amazon

3.storage.yml 편집
amazon:
 service: S3
 region: ap-northeast-1
 bucket: ご自身の「バケット名」を入力

환경 변수를 설정하고 보안 조치



1. 다운로드한 new로 시작하는 csv 파일을 열고 액세스 키 ID와 보안 액세스 키를 확인합니다.
2. 환경 변수를 설정하는 파일에 기술
# 開く
% vim ~/.zshrc

# 記述
export AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"
export AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"

# 読み込み
% source ~/.zshrc

#storage.ymlを編集
 #config/storage.ymlファイル
# 追記
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

git-secrets를 설정하여 보안 조치



git -secrets는 AWS가 게시하는 도구입니다!
% cd ~/ #ホームディレクトリに移動
% brew install git-secrets

% cd アプリケーション名 #開発中のアプリに移動
% git secrets --install

git-secrets 조건 설정



액세스 키 ID, 보안 액세스 키 등 업로드하지 않으려는 AWS 관련 비밀 정보를 일괄적으로 설정합니다.
git secrets --register-aws --global

# 確認
git secrets --list

# GitHubDesktopなどを使っている場合

% sudo cp /usr/local/bin/git-secrets /Applications/GitHub\ Desktop.app/Contents/Resources/app/git/bin/git-secrets

향후 작성할 모든 리포지토리에도 적용


% git secrets --install ~/.git-templates/git-secrets
% git config --global init.templatedir '~/.git-templates/git-secrets'

실제로 로컬 환경에서 이미지를 게시하고 IAM 사용자로 로그인하고 S3 버킷을 엽니다.



1. 객체라는 항목에 저장되어 있는지 확인

Heroku에도 적용


# config/environments/production.rb

# before
config.active_storage.service = :local
# after
config.active_storage.service = :amazon

Heroku 환경 변수에 등록


% heroku config:set AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"(開発中のアプリ内)

% heroku config:set AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"

# 確認
% heroku config

Heroku에 Push


% git push heroku master

# 正常に動くか確認

% heroku apps:info 
# Urlに飛び画像を投稿


로컬 환경과 마찬가지로 S3에 저장되어 있으면 완료입니다!
참고까지 부디! !

좋은 웹페이지 즐겨찾기