Ruby On Rails Credentials
Rails 5.2 버전부터 사용된 레일즈 암호화 인증서 입니다.
개발을 진행하다보면 특정 키 값을 환경변수로 등록해야만 하는 상황이 오게 됩니다.
Rails 에서도 dotenv 를 통해 환경 변수를 관리하기도 하는데 이런 값들은 코드 저장소에 올리면 큰 피해를 보게 됩니다. 그래서 GitHub 같은 경우에는 다음 이미지처럼 환경변수를 설정하게 됩니다.
하지만 레일즈의 Credentials 를 사용하면 master.key 라는 값 하나만 환경변수로 등록하면 나머지 값들을 암호화해서 저장하고 쓸 수 있습니다.
먼저 레일즈 6.0 버전으로 프로젝트를 생성하면 다음처럼 config/master.key 파일이 자동생성 됩니다.
이미지의 빨간 박스 말고 파란 박스를 보시면 이 파일이 암호화된 키 값들을 저장하고 있는 파일입니다.
저장된 파일을 열어보기 위한 커맨드는 다음과 같습니다.
EDITOR=vim rails credentials:edit
EDITOR 다음 부분은 사용하고 계신 에디터를 넣어주시면 됩니다.
그러면 파일이 열리고 암호화 되기전의 값을 볼 수 있습니다.
aws:
access_key_id: 123
secret_access_key: 345
database_url: postgresql://joungsik:wjdtlr21@localhost:5432/LinkCloud?timeout=5000&connect_timeout=5&pool=10
aws 처럼 네임스페이스로 감싸진 부분과 감싸지지 않은 부분을 호출 하는 명령은 조금 다릅니다.
다음은 database.yml 의 데이터 베이스를 설정하는 코드 입니다.
development:
url: <%= Rails.application.credentials.database_url %>
test:
url: postgresql://joungsik:wjdtlr21@localhost:5432/LinkCloud_test?timeout=5000&connect_timeout=5&pool=10
production:
url: <%= Rails.application.credentials.database_url %>
이렇게 작성하면 암호화된 키 값에 접근 할 수 있게 됩니다.
이번엔 네임스페이스로 감싸진 키 값에 접근 하는 코드를 보겠습니다.
레일즈에서 지원하는 storage 설정 파일입니다.
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: us-east-1
bucket: your_own_bucket
dig 를 통해 네임스페이스에 접근하게 됩니다.
마지막으로 개발 환경에서도 키 값을 암호화 할 수 있습니다.
왜 개발환경에서 필요한가를 이야기하면 위의 개발 환경에서의 데이터베이스 설정에서는 다른 database_url 을 production 환경과 다르게 주는 상황이 생길 수 있기 때문입니다.
EDITOR=vim rails credentials:edit --environment development
뒤에 옵션을 추가하면 새롭게 config/credentials 폴더 안에 새로운 키 파일과 암호화 파일이 생기게 됩니다.
주의할 점은 production 은 config 안의 master.key 와 credentials.yml.enc 를 참고한다는 부분입니다.