← 返回部落格 Mot

Mot

什麼是 .env.vault 檔案

它是您 .env 檔案的加密副本。

如果您產生一個,就最容易理解。所以我們來做一下。然後我會告訴您如何在生產環境中使用它。最後,我們將討論它的安全性優勢。

在此部落格文章中,請參閱 GitHub 上完整的程式碼範例

產生

我們將使用指令 npx dotenv-vault local build

先決條件

進入您已擁有 .env.* 檔案並已安裝 dotenv 的專案中。

例如,我有一個包含 3 個檔案的專案。

  • index.js
  • .env
  • .env.production
// index.js
require('dotenv').config()
console.log(`Hello ${process.env.HELLO}`)
# .env
HELLO="development"
# .env.production
HELLO="production"

當我執行 node index.js 時,我會得到預期的輸出 Hello development

$ node index.js
Hello development

讓我們建置 .env.vault 檔案。

產生 .env.vault

執行 local build 指令。

$ npx dotenv-vault local build

您將看到一個類似以下的 .env.vault 檔案。

#/-------------------.env.vault---------------------/
#/         cloud-agnostic vaulting standard         /
#/   [how it works](https://dotenv.org/env-vault)   /
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="AtEC33ZfFJQMSE6C+EBX8nzTyQzfC+xhsIfGjyWr47jiHsUi07PHzX2/RmCB0PIi"
# production
DOTENV_VAULT_PRODUCTION="t9van8HefnTIHVlK3vQ6WYLtWEOvPunEnOphV3Hw3aBTBDuwLq22yU0Tdl5fAnk="

它包含兩個金鑰。

  • DOTENV_VAULT_DEVELOPMENT
  • DOTENV_VAULT_PRODUCTION

這些包含以下項目的加密副本:

  • 您的 .env 檔案
  • 您的 .env.production 檔案。

還產生了一個 .env.keys 檔案。這些金鑰會解密 DOTENV_VAULT_${ENVIRONMENT} 的內容。

$ npx dotenv-vault local keys
#/!!!!!!!!!!!!!!!!!!!.env.keys!!!!!!!!!!!!!!!!!!!!!!/
#/   DOTENV_KEYs. DO NOT commit to source control   /
#/   [how it works](https://dotenv.org/env-keys)    /
#/--------------------------------------------------/
DOTENV_KEY_DEVELOPMENT="dotenv://:key_f4516b0077d9aefad9fa7b36cec570e05dcb7cd6d5de1dac2562b6421af7d185@dotenv.local/vault/.env.vault?environment=development"
DOTENV_KEY_PRODUCTION="dotenv://:key_18a137f844e3511022dbf1de2b1bd5e3bd6d1ef4c78988e2521ce9f05abc506a@dotenv.local/vault/.env.vault?environment=production"

看出模式了嗎? .env.${ENVIRONMENT} 檔案對應於一個 DOTENV_VAULT_${ENVIRONMENT} 密碼和一個 DOTENV_KEY_${ENVIRONMENT} 解密金鑰。

嘗試解密 DOTENV_VAULT_PRODUCTION 的內容。

$ npx dotenv-vault local decrypt 'dotenv://:key_18a137f844e3511022dbf1de2b1bd5e3bd6d1ef4c78988e2521ce9f05abc506a@dotenv.local/vault/.env.vault?environment=production'
HELLO="production"

太棒了!它正在成功解密。接下來,讓我們在生產環境中使用它。

生產環境

  1. .env.vault 提交到程式碼
  2. 在伺服器上設定 DOTENV_KEY
  3. 部署您的程式碼

在執行階段,您的加密密碼將會即時注入到您的程式碼中。

透過這個簡單的範例在您的機器上試試看。

$ DOTENV_KEY='dotenv://:key_18a137f844e3511022dbf1de2b1bd5e3bd6d1ef4c78988e2521ce9f05abc506a@dotenv.local/vault/.env.vault?environment=production' node index.js

[[email protected]][INFO] Loading env from encrypted .env.vault
Hello production

如您所見,它從您的加密 .env.vault 檔案載入您的 env,並成功輸出 Hello production。太棒了!

(也支援其他語言。請參閱 dotenv.org/docs

安全性優勢

您還記得 CircleCI 資料外洩事件嗎?攻擊者取得了所有人的環境變數存取權,使他們的軟體產品面臨重大風險。

但是,如果您使用的是 .env.vault 檔案,您就不會有風險。為什麼?

攻擊者僅取得環境變數的存取權,而不是程式碼。他有您的 DOTENV_KEY,但沒有您的 .env.vault 檔案。他需要兩者才能存取您的密碼。

這將 十二要素應用程式嚴格分離組態和程式碼的原則提升到一個新的層次 - 甚至您的組態也是分離的。

這導致了一些很棒的二階效應。

  • 您不再將您的密碼分散到多個第三方和工具中
  • 您的密碼更容易在靠近您程式碼的一個中心位置進行管理,這表示減少了操作錯誤或忘記設定密碼的機會
  • 您增加了攻擊者的阻力,並消除了自己的阻力 - 不再需要在多個伺服器上管理密碼

我會鼓勵您嘗試使用 .env.vault 檔案。我認為在最初的採用障礙之後,您會喜歡它們的。它們是簡單的檔案,不需要任何額外的密碼管理程式才能保持執行。

.env 檔案簡單、實用,並增加了額外的安全性。.env.vault 檔案在保持相同精神的同時,還增加了更高的安全性。您覺得如何?請在 @dotenvx@motdotla 告訴我。


dotenv-vault — 用於 .env 和 .env.vault 檔案的密碼管理器。

如果您也想管理大型團隊的 .env.env.vault 檔案,包括權限、版本和歷史記錄,請建立一個 Dotenv 帳戶。它是免費的,並提供進階功能。

https://dotenv.org/signup

透過 RSS 訂閱或關注我們的 @dotenvx 𝕏