티스토리 뷰
Ruby on Rails 프로젝트 내부에는 환경변수 및 Rails 프로젝트 Secret Key 인증 용도로 사용할 수 있는 인증파일이 존재합니다.
해당 개념에 대해 Rails 5.1 버전과 Rails 5.2 버전을 나누어서 설명을 진행해 보겠습니다.
-
Rails 5.1 버전의 인증방식
Raisl 5.1 버전의 인증파일 내용구조는 아래와 같습니다.
Rails 5.1 버전에는 config/secrets.yml 파일에서 Key/Value 관리 및 secret Key 인증이 이루어집니다.
또한 5.1에서 Production 환경으로 서비스를 배포를 하려면 아래 과정을 거쳐야 하는게 있습니다.
1. 다음 명령어를 통해 랜덤으로 생성되는 secrets key를 알아냅니다.
rake secret
2. 해당 Key를 Figrao, Dot ENV 등을 활용해서 환경변수를 등록해야 합니다.
* secrets.key 파일에 보면 환경변수(ENV)설정이 되어있다보니 Rails 측에서 표준 약속을 정해준 것 같습니다.
하지만 여기서 햇갈리는게 하나 있습니다 :
' Production 환경 기준 config/secrets.yml 파일에 바로 secret key를 등록하면 안돼나?.. '
사실 secrets.yml 파일 또한 환경변수처럼 활용할 수 있다는 점도 있습니다.
콘솔에서 다음과 같이 환경변수처럼 value를 불러올 수도 있습니다.
Rails.application.secrets[:secret_key_base]
이런 특징도 생각해보면, '환경변수는 꼭 secrets.yml에 등록해야하나?' 하는 의문이 들게 되고, 지금도 저는 이에대한 명확한 해답은 저도 잘 모르겠습니다.
또한 해당 Key 관리에 있어서는 관리가 허술해질 수도 있다는 문제가 있습니다.
해당 Key는 서버 인증에 중요한 만큼, Github에 Push가 안되도록 .gitignore 에 등록해야 하는 유의사항이 있지만 이러한 방법을 모르는 초심자에게 있어서는 Key 관리에 있어 실수가 발생할 수도 있습니다.
* Rails 프로젝트를 생성하면서 .gitignore 이 생성되긴 하지만, secrets.yml 파일에 대해선 등록이 안되어 있습니다.
-
Rails 5.2 버전의 인증방식
Raisl 5.2 버전의 인증방식은 아래와 같습니다.
credentials.yml.enc 과 master.key 파일 2가지 구조로 되어있습니다.
그리고 과거 5.1버전과는 다르게 대놓고 Key와 Value 형태로 이루어지지 않고 이상한 난수로 되어있습니다.
그리고 아래 명령어를 입력하면 비로소 Key와 Value를 볼 수 있습니다.
EDITOR=vi rails credentials:edit
참고 tmp 파일에 임시로 저장되는 [번호].credentials.yml 파일에서 번호는 열람이 될 때 마다 계속 바뀝니다.
위 사실을 통해 master.key 파일은 credentials.yml.enc 파일에 대해 복호화를 하는 개념이라고 볼 수 있습니다.
또한 5.1버전과 다르게 Environment 환경에 구분없이 Key와 Value를 작성할 수 있습니다.
credentials.yml.enc 에 저장된 파일은 콘솔에서 다음과 같이 환경변수처럼 value를 불러올 수도 있습니다.
Rails.application.credentials.aws[:access_key_id]
Rails.application.credentials.dig(:aws, :access_key_id)
# => 123
Active Storage에서는 클라우드를 통한 파일 관리에 있어, ENV 방식이 아닌 credentials.yml.enc 에 입력된 Key 값을 토대로 Value가 입력되도록 되어있습니다. (이 방법이 아니더라도 ENV 방식으로도 입력해도 됩니다.)
더불어 해당 Key는 관리에 있어 초보자도 실수를 비켜나갈 수 있는게, Rails 프로젝트를 생성하면 함께 제공되는 .gitignore 에 master.key 파일이 Push되지 않도록 리스트에 자동으로 등록되어 있습니다. 임의로 설정만 바꾸는게 아니라면 Github로 통한 Key 파일 유출 실수를 방지할 수도 있습니다.
대신 로컬 프로젝트에서 AWS EC2로 옮기는 등의 사유로 추가적으로 서버를 새로 하나 만들고 프로젝트를 옮길 시, push list에 ignore이 되어있다보니 master.key 파일에 대해선 따로 옮겨줘야 함을 유의해주세요.
-
결론
1. Rails 5.1에서 5.2로 넘어가면서 Key 파일 구조에 많은 변화가 생겼습니다.
2. Key 파일은 (때에 따라선) ENV처럼 활용할 수 있습니다.
3. Rails에서 Key 파일은 내 계정정보가 담긴 주체이다보니 Key 파일에 대한 관리는 기본이면서도 정말 중요합니다.
Github 등에 유출되지 않도록 유의해주세요.
4. Rails 5.2 기준 로컬 프로젝트에서 타 서버로 프로젝트를 옮길 시, master.key는 github에 Push되지 않는 파일이다보니 마스터키를 옮겨주는 것, 잊지 말아주세요.
-
자료 참고
1. [번역]레일스 5.2에서 사용하는 레일스 암호화인증서(Encrypted Credentials)
2. RAILS ENCRYPTED CREDENTIALS ON RAILS 5.2
4. Encrypted Credentials in Ruby on Rails
'프로그래밍 공부 > Ruby on Rails : 이론' 카테고리의 다른 글
Ruby on Rails : 로그 (0) | 2020.04.09 |
---|---|
Ruby on Rails : Table JOIN (0) | 2020.01.31 |
Ruby on Rails : 다른 AWS EC2 서버 내의 Database와 Remote Connect 하기 (0) | 2020.01.19 |
검색 기능 구현의 고민 : 공백처리 (1) | 2019.12.14 |
SQLite, PostgreSQL 차이 : Like / iLike (2) | 2019.12.13 |