Heroku에 AWS S3을 배포하는 방법 (Rails)
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에 저장되어 있으면 완료입니다!
참고까지 부디! !
Reference
이 문제에 관하여(Heroku에 AWS S3을 배포하는 방법 (Rails)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hironobu_nakamura/items/61ef142fe386fbca0398
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"Version": "2012-10-17",
"Id": "Policy1544152951996",
"Statement": [
{
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "①"(先ほどコピーしたユーザーのARN)
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::②"(作成したバケット名)
}
]
}
gem "aws-sdk-s3", require: false
# bundle install
% bundle install
# before
config.active_storage.service = :local
# after
config.active_storage.service = :amazon
amazon:
service: S3
region: ap-northeast-1
bucket: ご自身の「バケット名」を入力
# 開く
% 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'] %>
% cd ~/ #ホームディレクトリに移動
% brew install git-secrets
% cd アプリケーション名 #開発中のアプリに移動
% git secrets --install
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'
# config/environments/production.rb
# before
config.active_storage.service = :local
# after
config.active_storage.service = :amazon
% heroku config:set AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"(開発中のアプリ内)
% heroku config:set AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"
# 確認
% heroku config
% git push heroku master
# 正常に動くか確認
% heroku apps:info
# Urlに飛び画像を投稿
Reference
이 문제에 관하여(Heroku에 AWS S3을 배포하는 방법 (Rails)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hironobu_nakamura/items/61ef142fe386fbca0398텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)