🔑
Node.jsでのセキュアな情報の取り扱い
Node.jsでのセキュアな情報の取り扱い
- トークンやパスワード等の機密情報をpublicなrepositoryにcommitすると漏洩してしまう
- 機密情報の扱いについて調べて、取り回しのよい方法を検討する
1. 直接書く
なにも考えずに生の値を書いてしまう。
const HogeToken = "hogehoge";
- pro: 楽
- con: 漏洩し放題
「とりあえず」書いてしまうことはあるが、そのままcommitするとあとから削除するのは面倒なことに...
2. とりあえず環境変数にする
見られたら困るものは見えないようにする
# .zprofile
export HOGE_TOKEN="hogehoge"
const HogeToken = process.env.HOGE_TOKEN;
pro: commitすることは防げる
con: 設定ファイルが汚れる
プロジェクト固有じゃない情報ならアリかもしれない
3. VSCodeのワークスペースに設定する
/.vscode/settings.json
に設定を書くことでVSCodeの統合ターミナルにおいて環境変数として読み込むことができる
{
"terminal.integrated.shell.osx": "/bin/zsh", // これがないと反映されない
"terminal.integrated.env.osx": {
"HOGE_VSCODE": "vscode"
}
}
const SettingsToken = process.env.HOGE_VSCODE;
console.log(SettingsToken);
- pro: ローカルならかなりよい
- con: VSCode以外では使用できない
- con: 環境変数を切り替えるのは難しい
4. dotenvを用いる
環境変数は.env
ファイルに書き、
DOTENV_TOKEN="dotenv"
require('dotenv').config()
console.log(process.env.DOTENV_TOKEN);
- pro:
.env.production
等ファイルを分割すればまるっと差し替えられる - con: 切り替えにソース側の変更が必要
- con: CI環境では.envファイルの扱いにこまる
5. node -r
require or importで.env
ファイルを読み込まなくても、nodeオプションでenvファイルを読み込みできる
node -r dotenv/config example/preload.js
dotenv_config_path
を渡すことでenvファイルを指定することもできる
node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env
6. GitHub Secrets
GitHubのrepositoryのSettings/Ssecretsから暗号化された機密情報を保存できる
保存したものはGitHub Actionsでsecrets.hoge
から参照できる
サンプルコード割愛
- pro: GitHub Actionsで使うならこれ
- con: 管理が大変?
7. GitHub Secretsからenvファイルを生成する
workflowの中でSecretsを読み込んでenvファイルを作り、それを用いる
Actionsとして公開されているものもある
8. 設定ファイルをAWS S3の等別の場所にアップロードして管理する
割愛
参考リンク
9. dotenv-cliを用いる
dotenv -f node .env your_script.js
- pro: 5案よりすっきりする
実際どうするか
.env
ファイルがいらないなら3+6の組み合わせでよい
ファイル作るなら5または9と7か?
NODE_ENV
の値で設定ファイルを切り替えるスクリプトこの実装例はアリかも
備考
ほかにもあれば追加します
Discussion