복붙노트

[RUBY-ON-RAILS] 어디 공공 레일 응용 프로그램에서 중요한 데이터를 저장하기 위해?

RUBY-ON-RAILS

어디 공공 레일 응용 프로그램에서 중요한 데이터를 저장하기 위해?

내 개인적인 레일이 사용하는 프로젝트 몇 API가있는 나는 API 키를 저장할 수있어 / 설정 / 환경 / production.yml 및 development.yml 글로벌 변수로의 비밀. 지금은 다른 사람이 사용할 수 있도록하기위한 GitHub의에이 프로젝트를 추진하기를 원하지만 나는 그들이 민감한 데이터의 그 비트를 갖고 싶어하지 않습니다. 이를 실행하려면 응용 프로그램에 필요한 있기 때문에 나는 또한 .gitignore에서이 파일을 원하지 않는다. 나는 DB의 어딘가에서 그들을 가하고 간주했지만, 더 나은 해결책을 찾기 위해 희망하고있다.

해결법

  1. ==============================

    1.TLDR : 사용 환경 변수!

    TLDR : 사용 환경 변수!

    나는 브라이스의 코멘트 이벤트 난 그냥 물로 씻어 것이다 대답, @ 생각합니다. Heroku가 권장 한 방법은 민감한 정보 (API 키 문자열, 데이터베이스 암호)를 저장하는 환경 변수를 사용하는 것 같다. 그래서 코드를 조사하고있는 민감한 데이터를 참조하십시오. 그런 다음 sensivite 데이터 값을 저장 (예를 들어 당신의 .bashrc 파일) 환경 변수를 만들 수 있습니다. 데이터베이스에 대한 예를 들어 :

    export MYAPP_DEV_DB_DATABASE=myapp_dev
    export MYAPP_DEV_DB_USER=username
    export MYAPP_DEV_DB_PW=secret
    

    이제, 해당 지역의 상자에, 당신은 당신이 민감한 데이터를 필요할 때마다 환경 변수를 참조하십시오. database.yml을 예를 들면 :

    development:
      adapter: mysql2
      encoding: utf8
      reconnect: false
      database: <%= ENV["MYAPP_DEV_DB_DATABASE"] %>
      pool: 5
      username: <%= ENV["MYAPP_DEV_DB_USER"] %>
      password: <%= ENV["MYAPP_DEV_DB_PW"] %>
      socket: /var/run/mysqld/mysqld.sock
    

    나는 database.yml을 그냥 응용 프로그램의 초기화시 구문 분석 또는이 성능에 영향을해서는 안 다시 시작됩니다 생각합니다. 그래서이 지역 개발 및 저장소 공개를 만들기 위해 그것을 해결합니다. 당신이 개인적으로처럼 민감한 데이터의 박탈, 당신은 지금 공중에 동일한 저장소를 사용할 수 있습니다. 그것은 또한 당신이 VPS에있는 경우 문제를 해결합니다. 그냥에 ssh를하고 개발 상자에서와 마찬가지로 생산 호스트의 환경 변수를 설정합니다.

    생산 설치가에게 Heroku의이하는 것처럼 당신이 프로덕션 서버에 ssh를 할 수없는 전개 떨어져 손을 포함하면 그 사이에, 당신은 원격 환경 변수를 설정하는 방법에 대해 살펴해야합니다. Heroku가 들어이에게 Heroku의 설정으로 수행됩니다 추가합니다. 당신이 있었다면 그래서, 같은 기사 당 S3 앱에 통합하면 환경 변수에서 들어오는 민감한 데이터를했다 :

    AWS::S3::Base.establish_connection!(
      :access_key_id     => ENV['S3_KEY'],
      :secret_access_key => ENV['S3_SECRET']
    )
    

    그냥 Heroku가 그것을 위해 환경 변수를 만들 수 있습니다 :

    heroku config:add S3_KEY=8N022N81 S3_SECRET=9s83159d3+583493190
    

    이 솔루션의 또 다른 직업은 그것의 언어 중립적뿐만 아니라 레일입니다. 어떤 응용 프로그램에 대한 작품은 모든 환경 변수를 획득 할 수 있기 때문이다.

  2. ==============================

    2.이건 어때...

    이건 어때...

    지금 당신은 당신의 비밀을 손상시키지 않고 GitHub의에 코드를 확인할 수 있습니다.

    그리고 사람이 누락 된 파일을 만들 수있는 추가 단계없이 REPO를 복제 할 수 있습니다 (당신이 그랬던 것처럼 그들은 단지 자리 값을 대체 할 것이다).

    이 대회 목표합니까?

  3. ==============================

    3.그들은 아마도 최선의 초기화에 배치하고 (설정 / 초기화 / api.yaml) 나는 당신이 요리있어 한 것을 생각하지만 괜찮습니다. 당신의 .gitignore 파일과 실행에 실제 키를 추가 자식 RM 설정 / 환경 / production.yml 당신의 repo에서 민감한 데이터를 제거합니다. 공정 경고, 먼저 너무 너무 다시 그것을 해당 파일을 제거합니다.

    그들은 아마도 최선의 초기화에 배치하고 (설정 / 초기화 / api.yaml) 나는 당신이 요리있어 한 것을 생각하지만 괜찮습니다. 당신의 .gitignore 파일과 실행에 실제 키를 추가 자식 RM 설정 / 환경 / production.yml 당신의 repo에서 민감한 데이터를 제거합니다. 공정 경고, 먼저 너무 너무 다시 그것을 해당 파일을 제거합니다.

    그런 다음, 바로 옆에있는 관련 세부 실제 파일에 있지만, 중요한 데이터는 탈락으로 설정 / 환경 / production.yml.example 파일을 만듭니다. 당신이 생산을 꺼내 때, 바로 .EXAMPLE없이 파일을 복사하고 해당 데이터를 대체합니다.

  4. ==============================

    4.환경 변수를 사용합니다.

    환경 변수를 사용합니다.

    루비, 그들은과 같이 접근 할 수있어 :

    ENV['S3_SECRET']
    

    두 가지 이유 :

    이 최선의 방법인가? 예 : http://12factor.net/config

    어떻게 로컬로 사용합니까? 감독과 dotenv 모두 쉽습니다. 또는, 쉘을 편집 할 수 있습니다.

    어떻게 생산을 사용합니까? 크게, 그것은 의존한다. 그러나 레일, dotenv 쉬운 승리입니다.

    어떤 플랫폼 서비스로서의 어떻습니까? 모든 PaaS를 당신을 설정하는 방법을 제공한다. 예를 들어 Heroku가 : https://devcenter.heroku.com/articles/config-vars

    좀 더 복잡한이 메이크업은 프로젝트를위한 새로운 개발자를 설정하지 않습니다? 아마, 그러나 그것은 가치가있다. 당신은 항상 몇 가지 예를 들어 데이터 소스 컨트롤로 .env.sample 파일을 확인할 수 있습니다. 프로젝트의 추가 정보에 대한 메모를 추가합니다.

  5. ==============================

    5.4.1 지금의 규칙을했다 레일. 당신은 secrets.yml이 물건을 저장합니다. 당신은 앱에 걸쳐 흩어져 일부 글로벌 ENV 통화와 끝까지가 없습니다.

    4.1 지금의 규칙을했다 레일. 당신은 secrets.yml이 물건을 저장합니다. 당신은 앱에 걸쳐 흩어져 일부 글로벌 ENV 통화와 끝까지가 없습니다.

    database.yml을 ERB 구문 분석처럼 여전히 ENV 여기에 호출을 사용할 수 있습니다 있도록이 YAML 파일이다. 당신이 버전 제어하에 넣을 수있는 경우, 그 다음 단지 ENV가 사용되어야 바르 문서상의 역할을한다. 그러나 당신은 또한 버전 제어에서 그것을 exlcude 수 있으며,이 실제 비밀을 저장합니다. 이 경우 당신은 문서의 목적을 위해 공공의 repo에 같은 일부 secrets.yml.default 또는를 넣어 것입니다.

    development: 
       s3_secret: 'foo'
    production: 
       s3_secret: <%= ENV['S3_SECRET']%>
    

    당신은 아래에이 물건에 액세스 할 수 있습니다보다

    Rails.application.secrets.s3_secret
    

    그것의이 에피소드의 시작 부분에 자세히 설명

  6. from https://stackoverflow.com/questions/6113042/where-to-store-sensitive-data-in-public-rails-app by cc-by-sa and MIT license