シークレットから資格情報に切り替える方法(Ruby on Rails)

Ruby on Rails 5.2.0の資格情報は、新しいゴールドスタンダードです。古き良きが安全でない.envファイルは道を譲っています。この記事では、次のことを学びます。



  • 秘密から資格情報に移行する理由と方法、
  • Ruby、YML、js.erbでAPIキーを使用する方法
  • チームのそれぞれに一度だけ鍵を渡してください。


3年前まで、Ruby onRailsフレームワークの作成者であるDavidHeinemeyer Hanssonは、 Rails 5.2.0の登場についてツイートしましたが、新しいテクノロジーが加速して宣伝されるまでには時間がかかることがよくあります。



APIキーを頻繁に操作して、チームの他の開発者と交換する必要がある場合は、モーニングコールと見なすことができます。次に、Ruby onRailsアプリケーションで資格情報を使用する方法をもう一度見てみましょう。



シークレットの代わりに資格情報を使用するのはなぜですか?



開発サイクルでは、開発が進むにつれて、ますます多くの異なるサービスがプロジェクトに統合されます。各外部サービスには独自のAPIキーがあります。通常、同僚が最新のAPIキーを探し始めるまでにかかる時間はごくわずかです。これは非常に迷惑です!



または、APIキーが更新されていると想像してみてください。チームの各開発者は、ローカルdotenvファイルのキーを個別に更新する必要があります。これはすべて、自動化とプログラミングのアイデアの概念に対応していないようですよね?



SlackのチャットやメールでAPIキーを交換することを忘れてください。セキュリティポリシーに違反する必要はもうありません。



Railsの認証情報は、この問題を簡単かつ効率的に解決します。Githubにキーをアップロードします。



Githubにアップロードしますか?はい、Githubにアップロードしてください!小さな注意:APIキーは完全に暗号化されています。



このアプローチの大きな利点は、チームと共有する単一のキーがあることです。そしてそれは決して変わらない!



メインブランチ(以前は「マスターブランチ」と呼ばれていました)の最新バージョンをチェックアウトするたびに、認証情報としてピアによって追加された新しいAPIキーがGithubから取得されます



キーはconfig / master.keyフォルダーにあります。



使い方?



bin/rails credentials:edit



Railsで実行 すると、configフォルダーに必要な2つのファイルが作成されます。



  • credentials.yml.enc



    すべてのAPIキーを保存します。興味がある場合は、.enc拡張子は暗号化を表します。
  • master.key



    暗号化されたファイルの復号化に使用されるキーです(1.)必ずmaster.keyをファイルに追加してください.gitignore.yml





リポジトリと一緒に、ファイルCredentials.yml.enc



をGithubに送信します。これで、ファイル は手元にあります。同時に、master.keyを持ち歩き、人生がそれに依存しているように保ちます。



資格情報への切り替え



ターミナルで次の手順を実行して、資格情報ファイルを開きます。



EDITOR='code --wait' bin/rails credentials:edit







使用しているエディターに応じて、code



(VS Code)を置き換えます 次に例を示します 。vim



またはvi = Vim atomic

=

Atomsublまたはstt = Sublime



資格情報ファイルはエディターで自動的に開かれ、更新して再度閉じるのを待ちます。.envファイルで使用するENVキーをcredentials.ymlファイルに移動します。



古いファイルを置き換えます .ENV







STRIPE_PUBLISHABLE_KEY=pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00t
STRIPE_SECRET_KEY=sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
STRIPE_WEBHOOK_SECRET_KEY=whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB
CLOUDINARY_URL=cloudinary://15031853100444:XOr3XQ-DcZ4dBoan80@DcZ4Boan800U
GOOGLE_API_KEY=S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e
      
      





credentials.yml







stripe:
  publishable_key: pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  secret_key: sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  web_hook_secret_key: whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB

google_api_key: S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e

cloudinary:
  cloud_name: abcdefg
  api_key: 12345678910
  api_secret: abc315-VG8Ll8VG8Ll8L
      
      





注:Cloudinary APIキーは、ドキュメントに従っていくつかの部分に分割されています。



すべての準備ができました!表示のために、資格情報を端末で実行できます。



実行します bin/rails credentials:show







旧友の.ENVファイルに別れを告げる時が来ました。削除しましょう。



ルビー、YMLやJavaScriptなどのさまざまな形式で資格情報を使用するにはどのように



ルビーを



# nested key
Rails.application.credentials.stripe[:publishable_key]

# single key
Rails.application.credentials.google_api_key
      
      





YML



cloudinary:
  service: Cloudinary
  api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
  api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
      
      





Cloudinaryは、追加のconfig / cloudinary.yml必要とJavaScriptのファイルを







// ruby code only possible with js.erb format
const abc = "<%= Rails.application.credentials.google_api_key %>"
      
      





HTML



<!-- interpolate in script tag --> 
<script src="https://maps.googleapis.com/maps/api/js?key=<%= "#{Rails.application.credentials.google_api_key}"%>"</script
      
      





チームとキーを共有する方法



キーmaster.key



を他の開発者と共有 して、復号化を有効にします。



各チームメンバーはmaster.key



、configフォルダーにローカルにファイルを作成し、 それを共有キーにアップロードします。



出力



適切なAPIキーを見つける手間をかけずに、プログラミングはますます楽しくなっています。資格情報のおかげで、情報セキュリティの推奨事項を考慮してアプリケーションを更新できます。マスターキーを一度共有して、面倒なコピーを取り除きます。



ご清聴ありがとうございました!



All Articles