Rails6에서 지원하는 Multi Environment Credentials를 프로젝트로 가져오기

개발 환경


$ docker-compose -v
docker-compose version 1.25.5

$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]

$ bin/rails -v
Rails 6.0.3.1

개시하다

Rails 5.2 지원되는 CreddentialsRails 6는 환경마다 비밀 정보를 설정할 수 있습니다.gem 'dotenv-rails'에서 환경 변수와 API 키를 관리할 때 환경 변수를 추가할 때마다.env의 업데이트 내용은 다른 개발자에게 공유해야 한다.Heroku를 사용할 때 Heroku에 개발 환경과 다른 환경 변수를 추가로 설정해야 하기 때문에 좀 번거롭습니다...이런 번거로움에서 해방되다니 Multi Environment Credentials 정말 대단하다✨하지만 생성된 환경마다 키.gitignore가 있으니 자신의 수첩 등에 기술해 다른 개발자에게 공유해 주자.

Multi Environment Credentials를 가져온 후 디렉토리 및 파일 구조


# 本記事とは関連しない箇所は省略
$ tree .
.
...
├── config
... ...
│   ├── credentials
│   │   ├── development.key
│   │   ├── development.yml.enc
│   │   ├── production.key
│   │   ├── production.yml.enc
│   │   ├── staging.key
│   │   └── staging.yml.enc
│   │   ├── test.key
│   │   └── test.yml.enc
│   ├── credentials.yml.enc
... ...
│   ├── master.key
... ...
개발 환경, 제본 환경, 공식 환경에서 가져오면Multi Environment Credentials 상기 파일 구조가 형성된다.config 디렉터리에 전역 키(master 키)와 암호화 설정 내용, credentials 디렉터리에 환경별 키와 암호화 설정 내용을 설정합니다.

Master의 credentials 키 생성, 비밀 정보 편집


$ EDITOR=vim bin/rails credentials:edit
Rails 5.2와 같다.config/master.keyconfig/credentials.yml.enc가 존재하지 않을 때 생성되며 존재할 때 기존 키를 참조하여vim를 시작합니다.Docker 환경에서File encrypted and saved.vim가 시작되지 않는다고 말한 상태에서 응용 프로그램 용기 안에서 가볍게 두드려라apt install -y vim😌

각 환경에 대한 credentials 키 생성, 숨겨진 정보 편집


# テスト環境
$ EDITOR="vim" bin/rails credentials:edit -e test

# 開発環境
$ EDITOR="vim" bin/rails credentials:edit -e development

# ステージング環境
$ EDITOR="vim" bin/rails credentials:edit -e staging

# 本番環境
$ EDITOR="vim" bin/rails credentials:edit -e production
개발 환경이라면 -e development의 느낌으로 지정 환경을 선택한다.그나저나 --environment=development 이 지정도 마찬가지다.

각 환경의 credentials 확인


# テスト環境
$ bin/rails credentials:show -e test

# 開発環境
$ bin/rails credentials:show -e development

# ステージング環境
$ bin/rails credentials:show -e staging

# 本番環境
$ bin/rails credentials:show -e production
이렇게 환경을 선택하고 명령을 두드리면 아래 각 환경이 설정한 값을 확인할 수 있다.
aws:
  access_key_id: 123
  secret_access_key: 345

credentials 액세스


# 本番環境の場合
$ bin/rails c -e production

# 設定内容を確認
pry(main)> Rails.application.credentials.config
=> {:aws=>{:access_key_id=>123, :secret_access_key=>345}}

# 設定値にアクセス
pry(main)> Rails.application.credentials.aws[:access_key_id]
=> 123

# この書き方も同じ
pry(main)> Rails.application.credentials.dig(:aws, :access_key_id)
=> 123
응용 프로그램에 설정된 값을 사용하려면 위에서 설명한 접근 설정 값을 사용할 수 있습니다.Rails 5.2 같은 기술이지만 환경마다 설정된 값을 읽습니다👀

CircleaCI 구성


테스트를 통과하려면 CircleaCI가 테스트 환경의 credentials를 읽어야 합니다.Projects > プロジェクト名 > Project Settings > Environment Variables 설정할 수 있습니다.Name*에서 RAILS_MASTER_KEY, Value*에서 config/credentials/test.key에 쓴 키를 설정하십시오.


credentials의 설정값을 반영하지 않습니다!


로컬 Rails 서버를 다시 시작하십시오.Docker의 경우 컨테이너를 중지(안 되면 컨테이너를 폐기)한 후 시작합니다.

환경마다 키를 잃어버리면 어떡해요?


그런 너한테는 좋은 소식이야.config/credentials/環境名.keyconfig/credentials/環境名.yml.enc를 삭제하고 두드리기$ EDITOR="vim" bin/rails credentials:edit -e 環境名만 하면 된다.
개발 환경에서 삭제config/credentials/development.keyconfig/credentials/development.yml.enc, 두드리기EDITOR="vim" bin/rails credentials:edit -e development를 하면 삭제된 2개 파일이 다시 생성됩니다.config/credentials/development.key 다시 생성된 키를 기술한 것 같습니다.✏️

참고 자료

  • Rails 6 adds support for multi environment credentials
  • Add support for multi environment credentials. #33521
  • Rails5에서 6까지의 secreates/credentials 주위의 변천
  • 좋은 웹페이지 즐겨찾기