🔐

1Password CLIを使いDockerでローカル.envをチームで共有する方法

2024/07/14に公開

背景

サンプル

https://github.com/HayatoKudou/docker-1password-env-sample

参考資料

https://developer.1password.com/docs/cli/secrets-environment-variables

解説

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