🐣
1Passwordで環境変数を管理したいのでope(仮)を作った
環境変数はどうやって管理していますか?
.envですか?男は黙って.zshrcですか?クールにenvchainですか?
僕は1Passwordです。
tl;dr
前置きはどこかに置いておいて早速作ったものです。
1Password(op) + env で ope です。
もっとかっこいい名前が欲しいです...
メモ
作ったもの
1Password-cli (opコマンド) のラッパーになっています。
変数の登録と読み出し、書き出しなどができます。
PoC段階なのでエラーハンドリングであったりドキュメントが微妙だったりするのですが、まぁよしです。
モチベーションとしては
- インターンでenvchainを知った
- インターンで1Passwordを使って便利さを感じた
- 個人で1Passwordを使い始めた
- envchainで満足しているが1Passwordに全て寄せたい
envchainについてはこちらを↓
使い方
# Shell Scriptのダウンロード
# jq, awkが必要になります
$ curl -sL https://raw.githubusercontent.com/kobakazu0429/ope/master/ope \
-o /usr/local/bin/ope
# tag付けされたバージョンを使う場合
$ curl -sL https://raw.githubusercontent.com/kobakazu0429/ope/v1.0.0/ope \
-o /usr/local/bin/ope
# .envという名前のVaultを作ります
$ ope init
# awsという名前のItemを作ります
# ACCESS_KEY、ACCESS_TOKENという名前で環境変数を読み書きできるようにします
$ ope create aws ACCESS_KEY ACCESS_TOKEN
# 1Password.appで値は登録します
# awsという名前から全ての環境変数をそのプロセスのみに読み込んでコマンドを実行します
# ここではpython3でmain.pyを実行しています
$ ope run aws python3 main.py
# Item一覧を全て出力します
$ ope list
aws
# 変数がSecret reference syntaxで一覧で出力されます
$ ope list aws
ACCESS_KEY=op://.env/aws/xxxxxx/ACCESS_KEY
ACCESS_TOKEN=op://.env/aws/xxxxxx/ACCESS_TOKEN
# 変数に登録されている値を出力します
# 単体で使うというより $ope export aws > .env などを想定しています
$ ope export aws
ACCESS_KEY=THIS_IS_SECRET_ACCESS_KEY
ACCESS_TOKEN=THIS_IS_SECRET_ACCESS_TOKEN
仕組み
v1.0.0では100行ぐらいしかないのでコードを読んだ方が早いかも知れません。
特筆することはありませんが、opコマンドを叩いてjsonで出力して、jqでいい感じに抜き出して、いい感じに処理しています。
値の登録だけ微妙で、アプリを使ってGUI上で登録する必要があります。
CLI経由で登録するには引数として渡す必要があり、ヒストリーに残ってしまうためです。
詳しくは次に書かれています。
- https://developer.1password.com/docs/cli/reference/management-commands/item/#set-fields-with-assignment-statements:~:text=Be careful about,printed to stderr
- https://diary.sorah.jp/2014/06/05/securing-environment-variables
ここをCLI経由でできると非常に良いのですが、パッと調べた感じいい方法が見つかりませんでした。
最後に
opeはv1.0.0ですがPoC段階なのでセキュリティ面で絶対に大丈夫という自信はありませんし、ドキュメントや機能も不完全です。
マサカリやissue, PRを待っていますのでお気軽にお願いします🙇
Discussion