iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
SideProject30

用 Rails 打造你的電商網站系列 第 5

Day 05 - 把機密資訊放到保險櫃中

  • 分享至 

  • xImage
  •  

昨天有提到 master key 這個環境變數的存取方式,我們來認識一下他是什麼吧

在 Rails 5.2 版本後,
Master key 就成了 Rails 內建的環境變數套件,用於管理環境變數

在 5.2 版本前, Rails 是使用 config/secrets.ymlconfig/secrets.yml.erb 來存取環境變數,且可以直接在任何環境中直接設定,無需針對特定環境做一個檔案,加上進版控後就會造成機密資料外洩的問題,因此後來拿掉了。

相較於我們常用的 dotenv , master key 相對嚴謹的多

運作原理

我們可以將 master.key 想像成只有你擁有的鑰匙,鑰匙只能開啟你的保險箱 credentials.yml.enc

master.key 可以用來解密 credentials.yml.enc,但應該避免分享 master.key 或放進版控中,就像你不會把你家鑰匙給陌生人一樣

如何使用?

建立一個新的 Rails 應用程式時,會自動生成一個 master.key

在執行命令之前,需要設置編輯器 EDITOR,跟你的環境說該開哪個編輯器:

export EDITOR="code"

我們來下指令編輯環境變數:

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

假設你對於 vim 比較熟悉,就用 vim 來開啟吧:

EDITOR="vim" bin/rails credentials:edit

會打開一個 yaml 檔案:

  • secret_key_base: 用於加密和解密像是 cookie 這樣的機密數據

在這個文件中,將你的環境變數加進去:

# credential.yml

aws:
  access_key_id: 123
  secret_access_key: 345

設定完就可以儲存並關閉

要驗證環境變數是否已正確存入,可以使用以下指令:

rails credentials:show

如果設置正確,Rails 會生成一個 credential.yml.enc 文件,並且你會得到以下結果:

aws:
  access_key_id: 123
  secret_access_key: 345

# 用作 Rails 中所有 MessageVerifiers 的基本密鑰,包括保護 cookie 的密鑰。
secret_key_base: dfcfa5ca64218b13d1dbf61745e420daea8ffeeef2a41eb8498c2378deb3bdbca91d5752ea97944f1a37b4458f7e7d535b91eef337010be67e664463e6e9457f

如果需要在 Rails 中存取環境變數,可以用這個方式:

Rails.application.credentials.aws.access_key_id

而我們昨天所使用的 S3 Access key 就可以用 master.key 的方式來存取看看唷


上一篇
Day 04 增加圖片功能讓網站更吸睛
下一篇
Day 06 - 為你的會員分類
系列文
用 Rails 打造你的電商網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言