経緯・なぜやるのか
サービス拡大に伴い環境変数の個数がかなり多くなり、Parameter StoreをIaC管理するのが辛い(現状のやり方で暗号化できるファイルサイズに限界があった)
溢れた分は手運用。。。きつい
たまにしか弄らないから基本コマンド忘れるのでメモ
doetnv x 暗号化 = dotenvx
で全部解決できそうだった
メリット・デメリット
復号用のプライベートキー(以下PK)だけクラウド側や環境変数として管理すれば良くなる(もちろん流出しないようにし、他の環境変数はPKから復号して設定するようになる)
他の環境変数は暗号化された状態のファイルとしてソースコード側に置いておける
ただし、環境変数の確認に常にPKが必要になり、確認や設定はdotenvよりは手間がかかる
インストールなど
名前よくないよね。dotenvばっかりでる
$ curl -sfS https://dotenvx.sh|sh
$ dotenvx --version
1.44.2
基本的な使いかた
環境変数ファイルを暗号化
$ cat .env
DATABASE_USERNAME=hogehoge
DATABASE_PASSWORD=fugafuga
DATABASE_NAME=piyopiyo
...
$ dotenvx encrypt -f .env
✔ encrypted (.env)
✔ key added to .env.keys (DOTENV_PRIVATE_KEY)
ℹ add .env.keys to .gitignore: [echo ".env.keys" >> .gitignore]
ℹ run [DOTENV_PRIVATE_KEY='XXXXXXXX' dotenvx run -- yourcommand] to test decryption locally
$ ls -a
.env.keys # 復号キー
.env # 暗号化された環境変数
...
$ cat .env
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/ public-key encryption for .env files /
#/ [how it works](https://dotenvx.com/encryption) /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY="XXXXXXXX"
# .env
#local
DATABASE_USERNAME="encrypted:BI8BXXXXXXXXXXXXXXXXXXXXqIw="
DATABASE_PASSWORD="encrypted:BFiRtXXXXXXXXXXXXXXXXXZ0tw=="
DATABASE_NAME="encrypted:BOwKXXXXXXXXXXXXXXXXXXXXXXXXXX=="
...
..
絶対に.env.keys(復号キー)はGitHubに上げたり誰でもアクセスできる場所にUPしないこと
環境変数の確認
$ dotenvx get -f .env|jq #jq便利なので入れたほうがいい
{
DATABASE_USERNAME="hogehoge",
DATABASE_PASSWORD="fugafuga",
DATABASE_NAME="piyopiyo",
...
}
環境変数の追加・編集・削除
追加
$ dotenvx set HELLO production -f .env
✔ set HELLO with encryption (.env)
$ dotenvx get -f .env|jq
{
DATABASE_USERNAME: "hogehoge",
DATABASE_PASSWORD: "fugafuga",
DATABASE_NAME: "piyopiyo",
...
HELLO: "production" # 追加された環境変数
}
編集
$ dotenvx set HELLO staging -f .env
✔ set HELLO with encryption (.env)
$ dotenvx get -f .env|jq
{
DATABASE_USERNAME: "hogehoge",
DATABASE_PASSWORD: "fugafuga",
DATABASE_NAME: "piyopiyo",
...
HELLO: "staging" # 編集された環境変数
}
削除
unset 的なサブコマンドはまだ無いため
decrypt → 行を消す → encrypt の3ステップ
$ dotenvx decrypt -f .env
✔ decrypted (.env)
好きなエディタで行を消してから下記実行
$ dotenvx encrypt -f .env
プログラム側での利用方法
コンテナなら下記のようにしてください
Node.jsを想定
他の言語を使用している場合はLLMに聞けば良いし、既存のDockerfileの編集でいけると思います
$ cat Dockerfile
...
COPY .env.production . # 環境変数ファイルコピー
RUN curl -sfS https://dotenvx.sh/install.sh | sh
CMD ["dotenvx","run","--env-file=.env.production","--","node","server.js"]