🔐
1Password CLIを使いDockerでローカル.envをチームで共有する方法
背景
- .envはセキュリティの観点からGit管理したくなかった
https://scrapbox.io/mrsekut-p/機密情報が含まれる.envをGitで管理することで生じるリスク - 新しいメンバーが来るたびに.envを共有するのが面倒だった
- .envに更新が入るたびにメンバーと.envファイルを共有するのが面倒だった
- メンバーごとに設定したい項目があり、S3等で管理するのは少し違った
サンプル
参考資料
解説
1. 1Password設定
.envで管理したい項目を1Passwordでパスワード管理します
複数の項目を管理したい場合はセクションで管理するのが便利です
2. env.local.template設定
1Passwordから取得したい項目箇所にop://保管庫名/アイテム名/フィールド名
と設定します
DB_HOST='op://sample-vault/sample-env/DB_HOST'
DB_PORT='op://sample-vault/sample-env/DB_PORT'
DB_DATABASE='op://sample-vault/sample-env/DB_DATABASE'
DB_USERNAME='op://sample-vault/sample-env/DB_USERNAME'
DB_PASSWORD='op://sample-vault/sample-env/DB_PASSWORD'
3. Docker立ち上げ
make docker/setup
を実行し、Dockerfileからイメージ作成後、イメージからコンテナの起動をします
コンソールログ
% make docker/setup
docker build -t docker-1password-env-sample .
[+] Building 3.9s (13/13) FINISHED docker:desktop-linux
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 304B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 3.3s
=> [internal] load metadata for docker.io/1password/op:2 0.0s
=> [stage-0 1/6] FROM docker.io/library/ubuntu:latest@sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 8.54kB 0.0s
=> CACHED FROM docker.io/1password/op:2 0.0s
=> CACHED [stage-0 2/6] RUN apt-get update 0.0s
=> CACHED [stage-0 3/6] RUN apt-get install -y curl jq make 0.0s
=> [stage-0 4/6] COPY . ./ 0.1s
=> [stage-0 5/6] COPY --from=1password/op:2 /usr/local/bin/op /usr/local/bin/op 0.3s
=> [stage-0 6/6] WORKDIR ./app 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:dbd8e31043d420f362c161138c3708c2558a6260d8586cff6a3f3202e3dbbe15 0.0s
=> => naming to docker.io/library/docker-1password-env-sample 0.0s
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
docker run -v $PWD:/app --name docker-1password-env-sample -d docker-1password-env-sample
3d1b1db351abbaef27c450b4d46f79275b0ca5c15d3a117b03e01834d2a20098
4. Dockerコンテナに入る
make docker/exec
を実行し、起動したコンテナに入ります
コンソールログ
% make docker/exec
docker exec -it docker-1password-env-sample bash
root@3d1b1db351ab:/app#
5. 1Password CLI実行
Dockerコンテナ内で make 1pass/env-file-inject
を実行し、1Passwordへのサインインと.envファイルの作成をします。1Password CLIコマンドの詳細につきましては公式ドキュメント(signin, inject)をご覧ください
(op signin
では対話形式の操作をすることになるのですが、Makeコマンドは対話形式の操作に対応していないためスクリプトとして呼び出す形にしています)
Discussion