Open9
1Passwordでenvchainっぽいことができないか調べる
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
モチベーション
- インターンでenvchainを知った
- インターンで1Passwordを使って便利さを感じた
- 個人で1Passwordを使い始めた
- envchainで満足しているが1Passwordに全て寄せたい
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
方針
-
.env
という名前のVaultsを作成する -
<namespace>
という名前のItemを.env
内に作成する -
op item create
でセキュアな値は保存しない- (勉強を始めたばかりで詳しくなく自信ないが)容易に自分以外から覗けるため
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
Vaultsの作成
op vault create .env
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
Itemの作成
ここでは入力欄のみを作成し、値はアプリ上で登録する
op item create --vault .env --category "Secure Note" --title <namespace> "<key1>[password]=" "<key2>[password]="
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
実行
流れ
-
op item get
で Secret referenceを取得する -
.env
ファイルに書き込む -
op run --env-file="./.env" -- <command>
で実行する
.env
ファイルの作成
op item get --vault .env --format json <namespace> | jq -r ".fields[] | select(.type == \"CONCEALED\") |.label + \"=\" + .reference"
例
- namespaceは
foo
とする - 値はアプリ上で入力済み
$ op item get --vault .env --format json foo | jq -r ".fields[] | select(.type == \"CONCEALED\") |.label + \"=\" + .reference" > .env
$ cat .env
ABC=op://.env/foo/Section_hogehoge/ABC
DEF=op://.env/foo/Section_hogehoge/DEF
$ op run --env-file="./.env" -- printenv
ABC=<concealed by 1Password>
DEF=<concealed by 1Password>
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
感想
色々調べた結果こんな感じになったけど...
- CLIで完結しないのでめんどくさい
envファイルを作るところが従来の方法と変わらない-
気軽にnamespace
の変更ができないので、例えば.env.devと.env.testみたいな切り替えができない- ここはいい感じにスクリプト書けば解決できそうではある
もっといい方法があれば教えてください🙇
https://zenn.dev/link/comments/2cb4dc4b6f70f5 で値の登録以外は解決した
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
.env
ファイルを作らない方法
ABC=op://.env/foo/Section_hogehoge/ABC \
DEF=op://.env/foo/Section_hogehoge/DEF \
op run -- printenv
これでもできるので
function opr() {
OP_ENV=`op item get --vault .env --format json $1 | jq -r '[(.fields[] | select(.type == "CONCEALED") | [.label, "\"" + .reference + "\""]) | join("=")] | join(" ")'`
shift
env -S"$OP_ENV" op run -- $*
}
みたいにしておくと
$ opr foo node -e "console.log(process.env.ABC)"
で実行できる
![kobakazu0429](https://res.cloudinary.com/zenn/image/fetch/s--iRyy1wfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/845287bcee.jpeg)
一連の流れをきちんとCLIで使えるようにすればまぁまぁ使えそう