dotenv-vault

快速入門 ⚡️

使用此快速入門指南,以 dotenv-vault 的方式同步、管理和部署您的機密。

初始設定

以您選擇的語言安裝應用程式所需的函式庫。

npm install dotenv --save

撰寫應用程式程式碼。

// index.js
require('dotenv').config()
const PORT = process.env.PORT || 3000
const http = require('http')
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end(`Hello ${process.env.HELLO}`)
})

server.listen(PORT, () => {
  console.log(`Server running on port:${PORT}/`)
})

建立您的 .env 檔案。

.env

# .env
HELLO="World"

執行您的應用程式。

node index.js
# visit https://127.0.0.1:3000

如果您看到「Hello World」,則表示成功。

接下來,同步您的 .env 檔案。

同步

推送和拉取對 .env 檔案的變更。首先建立專案的 env 保管庫並針對其進行驗證。

npx dotenv-vault@latest new
npx dotenv-vault@latest login

安全地推送和拉取您的 .env 檔案。

npx dotenv-vault@latest push
npx dotenv-vault@latest pull

就這樣!您已同步我們的 .env 檔案。接下來,設定您的生產機密。

管理

開啟生產環境以編輯生產 HELLO 值。

npx dotenv-vault@latest open production

編輯 HELLO 值,使您的生產機密將呈現為 Hello production

www.dotenv.org

看起來不錯。接下來,使用您加密的 .env.vault 檔案部署您的生產機密。

部署

首先建置專案的加密 .env.vault 檔案。它會以與雲端無關的有效負載安全地加密您的機密。

npx dotenv-vault@latest build

將其安全地提交至程式碼。

git add .env.vault
git commit -am "Build encrypted .env.vault file for deploy"

擷取您的生產解密金鑰 - DOTENV_KEY - 以解密您的 .env.vault 檔案。

npx dotenv-vault@latest keys production

這將輸出您的生產 DOTENV_KEY。使用該 DOTENV_KEY 以生產模式執行您的應用程式。

DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production' node index.js
# visit https://127.0.0.1:3000

如果您看到記錄訊息 Loading env from encrypted .env.vault,則表示正在運作。

$ hello-world: DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production' node index.js
[[email protected]][INFO] Loading env from encrypted .env.vault
Example app listening on port 3000

就這樣!DOTENV_KEY 會解密 .env.vault 的生產內容,並將其機密即時注入到您正在執行的程序。

結論

恭喜!您現在了解 .env.vault 的運作方式。這比將機密同步到可能洩漏機密的第三方更安全。CircleiCi 不久前發生了機密洩漏事件.env.vault 可保護您免受此類洩漏的影響。攻擊者必須同時取得您的 DOTENV_KEY 和您的程式碼庫。這要困難得多。

此外,您現在擁有一個易於管理的單一事實來源。在 UI 中進行變更、執行建置命令並重新部署。減少處理機密的時間,並將更多時間用於撰寫程式碼。

剩下要做的就是在您的生產伺服器上設定您的 DOTENV_KEY 並部署您的程式碼。

例如,在 heroku 上,這很容易

$ heroku config:set DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production'

常見問題

如果未設定 DOTENV_KEY 會發生什麼事?

它會正常回復為從您的 .env 檔案載入。這是開發的預設值,因此您可以專注於編輯您的 .env 檔案,並保留 build 命令,直到您準備好部署這些環境變數變更。

我應該提交我的 .env 檔案嗎?

否。我們強烈建議不要將您的 .env 檔案提交至版本控制。它應該僅包含特定於環境的值,例如資料庫密碼或 API 金鑰。您的生產資料庫應該有與開發資料庫不同的密碼。

我應該提交我的 .env.vault 檔案嗎?

是。這樣做是安全且建議的。它包含您加密的環境和您的保管庫識別碼。

我可以分享 DOTENV_KEY 嗎?

否。它是解鎖加密環境變數的金鑰。請非常小心您與誰分享此金鑰。不要讓它洩漏。