Ruby on Rails 6 자격 증명: 빠른 가이드

5384 단어 rubyrails
이 문서의 TLDR 버전>>here<<


종종 Rails 앱에서 작업할 때 취약한 데이터를 처리해야 합니다.

대부분 통합하는 서비스에 대한 API 키입니다.

가장 일반적인 예:
  • Github, Google, Twitter, Facebook oAuth
  • AWS S3
  • 스트라이프, 브레인트리 등
  • 센드그리드, 메일침프 등

  • 여기에서 Github에서 제공하는 client_idclient_secret를 볼 수 있으므로 "Github로 로그인"기능을 추가할 수 있습니다.



    이러한 키를 사용하려면 다음과 같이 devise.rb 파일에 키를 직접 배치할 수 있습니다.

    config.omniauth :github, "23r32t34t4rg", "regregbesgbvtegc4g43g343"
    


    그러나 이 접근 방식은 보안 위협을 만듭니다.

    예를 들어 리포지토리가 오픈 소스이거나 타사와 공유되는 경우 누구나 API 키를 오용할 수 있습니다.

    귀하의 계정으로 이어질 수 있습니다.
  • 금지됨(너무 많은 요청으로 할당량 초과 사용)
  • 청구됨(API 키를 사용하면 누구나 S3 계정에 너무 많은 데이터를 업로드할 수 있음)
  • 데이터 유출이 발생할 수 있습니다(S3의 모든 애플리케이션 첨부 파일이 유출될 수 있음)
  • .

    그렇기 때문에 자격 증명을 사용하여 중요한 데이터를 암호화해야 합니다.
    devise.rb의 암호화된 라인은 다음과 같습니다.

    config.omniauth :github, (Rails.application.credentials[Rails.env.to_sym][:github][:client]).to_s, (Rails.application.credentials[Rails.env.to_sym][:github][:secret]).to_s
    


    그럼 어떻게 작동시키나요?

    시작하자:



    Rails 6 앱을 만들 때 app/config 아래에 credentials.yml.enc라는 파일이 있습니다.


    credentials.yml.enc 파일을 열면 일반적으로 다음과 같이 표시됩니다.



    공개 저장소에서 공유하는 것이 암호화되고 안전합니다.
    credentials.yml 파일을 해독하기 위해 master.key 파일이 사용됩니다.



    절대 대중과 마스터 키를 공유하지 마십시오.

    마스터 키를 분실하면 자격 증명을 해독할 수 없습니다.

    기본적으로 master.key는 git 커밋에 포함되지 않습니다.
    credentials.yml를 해독하고 보거나 편집하려면
    당신은 달릴 수 있습니다 rails credentials:edit또는 EDITOR=vim rails credentials:edit .

    해독되면 credentials.yml 파일은 일반적으로 다음과 같이 표시됩니다.



    Rails 앱 또는 콘솔에서 credentials.yml의 데이터를 검색하려면 다음과 같이 실행할 수 있습니다.

    rails c
    Rails.application.credentials.dig(:aws, :access_key_id)
    #=> sdgb89dngfm6cg8jmbdb8f9bfg6n8fnd7bd9f
    Rails.application.credentials[:github][Rails.env.to_sym][:secret]
    #=> 6hl65knh4l5vgm8
    


    터미널 내부의 VIM에서 파일을 편집하는 것은 까다롭고 부자연스럽게 느껴질 수 있습니다.

    파일을 편집하려면 i 를 누르십시오. 파일 하단에 INSERT가 표시되어 현재 파일을 편집할 수 있다는 메시지가 표시됩니다.



    완료되면 ESC 을 누르십시오. 다음으로 :wq + ENTER를 눌러 저장하고 종료합니다.



    또는 ESC + :q! + ENTER를 눌러 저장하지 않고 종료합니다.



    config/credentials.yml의 실제 예:

    awss3:
      access_key_id: YOUR_CODE_FOR_S3_STORAGE
      secret_access_key: YOUR_CODE_FOR_S3_STORAGE
    google_analytics: YOUR_CODE_FOR_GOOGLE_ANALYTICS
    recaptcha:
      site_key: YOUR_CODE_FOR_RECAPTCHA
      secret_key: YOUR_CODE_FOR_RECAPTCHA
    google_oauth2:
      client_id: YOUR_CODE_FOR_OAUTH
      client_secret: YOUR_CODE_FOR_OAUTH
    development:
      github:
        client: YOUR_CODE_FOR_OAUTH
        secret: YOUR_CODE_FOR_OAUTH
      stripe:
        publishable: YOUR_STRIPE_PUBLISHABLE
        secret: YOUR_STRIPE_SECRET
    production:
      github:
        client: YOUR_CODE_FOR_OAUTH
        secret: YOUR_CODE_FOR_OAUTH
      stripe:
        publishable: YOUR_STRIPE_PUBLISHABLE
        secret: YOUR_STRIPE_SECRET
    facebook:
      client: YOUR_CODE_FOR_OAUTH
      secret: YOUR_CODE_FOR_OAUTH
    


    프로덕션에서 마스터 키를 설정하려면(heroku 예):

    heroku config:set RAILS_MASTER_KEY=YOURMASTERKEY
    


    또는

    heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
    


    그게 다야 🤠

    이 기사가 마음에 드셨나요? 저를 따르십시오! 더 재미있는 것을 게시하도록 동기를 부여할 것입니다!

    좋은 웹페이지 즐겨찾기