티스토리 뷰

해당 글은 https://blog.naver.com/kbs4674/221191136195 로 부터 게시글이 이전되었습니다.

 

글을 시작 전, 여러분들께 한가지만 여쭤보겠습니다.

 

 상황  여러분들은 홈페이지 내 자신의 외부 이메일 계정 연동을 통해 사용자들에게 메일을 보내는 시스템을 만들어 내려고 합니다.

그리고 여러분들은 아래의 두 Case의 코드를 짜냈습니다.

## config/environments/production.rb

# Case 1 코드
  ActionMailer::Base.smtp_settings = {
    :address              => 'smtp.gmail.com',
    :domain               => 'mail.google.com',
    :port                 => 587,
    :user_name            => "kbs4674@likelion.org",
    :password             => "123456",
    :authentication       => 'login',
    :enable_starttls_auto => true
  }
 
# Case 2 코드
  ActionMailer::Base.smtp_settings = {
    :address              => 'smtp.gmail.com',
    :domain               => 'mail.google.com',
    :port                 => 587,
    :user_name            => "#{ENV["EMAIL"]}",
    :password             => "#{ENV["PASSWORD"]}",
    :authentication       => 'login',
    :enable_starttls_auto => true
  }

 참고  Case 코드 둘 다 돌아갑니다.

 

여러분들은 어느 코드를 사용하시겠습니까?

  • Case 1 같은 경우는 비밀번호가 다 노출되어 있어서, 만약 자신의 Rails 프로젝트가 Git 저장소에 저장시켜놨다가 누군가 어떠한 이유로(Github 저장소가 공개(Public) 상태라던지 등등) 알게되면은 계정이 쉽게 털릴 수 있습니다.
  • Case 2 같은 경우는 계정 정보에 대해서는 은닉이 되어있을 뿐 더러, 해당 비밀번호는 서버를 직접 들춰보지 않는 한 누구도 모릅니다.

 이번 시간에는 저런 계정 정보 등을 은닉 시켜주는 코드보안에 대해서 다뤄보고자 합니다.

 

 

  • 코드보안 : Figaro

 참고 

1. Figaro Gem을 사용하실 때,  .gitignore  파일의 개념을 알아두셔야 합니다.  .gitignore 일은 자신의 Github 저장소에 프로젝트를 Push 할 때,  .gitignore  파일에 적어놓은 파일의 위치에 한해서는 Push가 되질 않습니다.

 보충설명  .gitignore 개념 [클릭]

 

1.  Gemfile  에 다음 내용을 작성합니다.

gem 'figaro'

그리고 Gem을 설치합니다.

bundle install

 참고  간혹 bundle install 중 아래와 같이 Gem Version Conflic으로 인해 설치가 안될 수도 있습니다.

이런 경우, Figaro와 연계된 Gem에 대해서만 최소한의 Dependency Update를 진행해주세요.

bundle update --conservative

 부록  최소한의 Gem Update [클릭]

 

2. 코드보안을 시킬 위치에 다음 내용을 입력해주세요.

ENV["이름"]

 참고  ENV를 활용한 예시의 코드를 보면 아래와 같습니다.

ActionMailer::Base.smtp_settings = {
    :address              => 'smtp.gmail.com',
    :domain               => 'mail.google.com',
    :port                 => 587,
    :user_name            => ENV["EMAIL_ID"],
    :password             => ENV["EMAIL_PASSWORD"],
    :authentication       => 'login',
    :enable_starttls_auto => true
  }

 

3. 터미널에 다음 명령어를 입력합니다.

bundle exec figaro install

위 명령어를 입력하면

  •  config  폴더에  application.yml  파일 생성
  •  .gitignore  이 존재할 경우 /config/application.yml 코드 추가(append)

 

4 config/application.yml  에 ENV 명칭에 맞게 다음과 같이 입력해줍니다 :

## config/application.yml
 
EMAIL_ID: "kbs4674@likelion.org"
EMAIL_PASSWORD: "123456"

 

5. 기존에  .gitignore  파일이 없을 경우, 루트폴더 위치에  .gitignore  파일을 생성 후, 다음 내용을 입력합니다.

## application.yml 파일 Push 제한
/config/application.yml

 

6.  선택  만약 Github 저장소에 자료가 이미 push되고 있는 상태라면

자신의 Github 프로젝트 Commit기록을 모두 초기화해주고, 다시 프로젝트를 Push 해주세요.

rm -rf .git .gitignore
  • 만약 Github 자료실에 이미 Push되신 분들 중, 이 작업을 안해주면 .gitignore 적용이 안될겁니다.
  • Github 자신의 프로젝트 저장소(repository)가 비어있다면 이 과정은 안해도 됩니다.

7. 끝입니다!!

위 과정들만 해내면, 계정의 암호가 담긴 application.yml 파일은 Github 저장소에 업로드도 안되고,

코드 내 계정 정보 노출도 안됩니다!

 주의  

 application.yml  파일은 Github 자료실에 Push가 안되는 만큼, 아무래도 다른 서버에 자신의 프로젝트를 Github에서 Pull을 할 때   application.yml  파일은 안가져오다 보니, 다른 서버에 Github에서 프로젝트를 Pull 후, 레일즈 실행 시 에러가 발생될 수 있습니다.

 

 

  • 플랫폼 별 환경변수 설정하기

Heroku, AWS Beanstalk 서비스 에서는  환경변수를 내부적으로 입력하게 지원

AWS, Heroku에서는 환경변수를 설정하는 메뉴얼을 따로 지원합니다.

이는 즉,  application.yml  파일이 따로 필요없습니다.

 

 Heroku  환경변수 설정

1. 자신의 레일즈 프로젝트의 터미널과 헤로쿠 서버와 remote 연동을 합니다.

git remote add heroku [Heroku Github 주소]

 참고  Heroku Github 주소는 아래 사진과 같은 위치에서 확인이 가능합니다.

 

2. 터미널에서 Heroku 로그인을 합니다.

heroku -i login

 

3. 터미널 명령어를 통해 환경변수 설정을 조작합니다.

1) 환경변수 추가

# heroku config:set KEY="VALUE"
heroku config:set NAVER_API_PASSWORD="a1234567"

## => NAVER_API_PASSWORD: "a1234567"

 

 

2) 환경변수 제거

# heroku config:remove (이름)
heroku config:remove test

 

3) 적용되어 있는 환경변수 리스트 확인

heroku config

 

 

 AWS ElasticBeanstalk  환경변수 설정

1. Elastic Beastalk 서비스 관리자 페이지로 이동 합니다. 그리고 자신의 애플리케이션 서비스를 클릭합니다.

 

2. 왼쪽 메뉴에서 구성 으로 들어간 후, 소프트웨어 수정 페이지로 이동합니다.


3. 소프트웨어 수정 페이지에서 맨 아래로 가면 환경속성 수정하는곳이 보입니다.

여기서 환경변수를 설정하시면 됩니다.

 

설정 후, 환경변수 반영까지 약 3~5분의 시간이 걸립니다.

 

루비온 레일즈 Ruby on Rails ROR

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함