kakudooo docs

1Passwordで環境変数の秘匿情報を管理する方法

最近GitHub PAT(Personal Access Token)の流出による不正アクセスを目にすることが多い。 サプライチェーン攻撃の手口の巧妙化や、生成AI関連ツール活用が進むことで意図せず秘匿情報を流出させてしまう機会も増えている。

開発を行う上で、API Tokenを平文で.envに定義していることも少なくない。ローカル環境で使用する秘匿情報をなるべく安全に管理する方法がないかを模索していたところ、1Passwordを使って実現できたので、まとめておくことにする。

1Passwordで秘匿情報を環境変数に読み込む方法

1Passwordで管理している秘匿情報を実行時に環境変数として直接注入するための機能が、以下の3通りの方法で提供されている。

参考: https://developer.1password.com/docs/cli/secrets-environment-variables/#choose-your-configuration

このドキュメントでは、Hybrid approach(1Password Environmentsと.envの組み合わせ)を前提にする。

1Password Environments (beta)で管理する

セットアップ

1Passwordアプリのインストールとアカウントの作成が完了していることを前提とする。 ここまでが完了していない場合は、こちらを参照して準備をしておく。

開発者モードを有効にする

  1. 1Passwordアプリを開く
  2. 「設定…」画面を開く
  3. サイドバーから「開発者」を選択する
  4. 「1Password開発者エクスペリエンスを表示する」にチェックを入れる

Environmentを作成する

  1. 1Passwordアプリを開く
  2. サイドバーから「開発者」を選択する
  3. 「環境を表示 →」を選択する
  4. 「+ 新しい環境」ボタンを選択する
  5. 任意の名前の環境(Environment)を作成する

環境変数を追加する

特定の環境(Environment)画面を開き、.envに定義してある環境変数を登録する。

1Password CLIのセットアップ

※ Macでのセットアップを前提とする

参照: https://developer.1password.com/docs/cli/get-started/

CLIのインストール

1Password Environments (beta)機能を使うので、beta版をインストールする。

brew install --cask 1password-cli@beta
op --version

1PasswordアプリとCLIの連携を許可する

  1. 1Passwordアプリを開く
  2. 「設定…」画面を開く
  3. サイドバーから「開発者」を選択する
  4. 「1Password CLIと連携」にチェックを入れる

CLIの認証を通す

適当なコマンドを実行して、認証を通す。

op vault list

ダイアログが表示されるので、許可する。

Rubyコードから参照する

heroku-review-apps-managerの開発で使っている.envからHerokuのAPI TokenやGitHubのPATに関する環境変数を1Passwordに移行してみる。

移行前の.env

HEROKU_REVIEW_APPS_MANAGER_HEROKU_API_KEY=XXX
HEROKU_REVIEW_APPS_MANAGER_GITHUB_TOKEN=XXX
HEROKU_REVIEW_APPS_MANAGER_TARGET_GITHUB_REPOSITORY=kakudou3/sample
HEROKU_REVIEW_APPS_MANAGER_PIPELINE_NAME=sample

HEROKU_REVIEW_APPS_MANAGER_HEROKU_API_KEYHEROKU_REVIEW_APPS_MANAGER_GITHUB_TOKENを1Passwordの環境(Environment)の変数として登録する。(手順は上記を参照)

移行後の.env

HEROKU_REVIEW_APPS_MANAGER_TARGET_GITHUB_REPOSITORY=kakudou3/sample
HEROKU_REVIEW_APPS_MANAGER_PIPELINE_NAME=sample

秘匿情報を環境変数として読み込みつつプログラムを実行する

op run --コマンドをプログラムの実行コマンドに指定する。

このコマンドで1Passwordの秘匿情報を読み込んだ場合、標準出力/標準エラーに環境変数が出力されると、デフォルトでマスクされる。

以下は、heroku-review-apps-manager list-appコマンドで、op run --コマンドを使用した例。

op run --environment 環境ID --env-file="./.env" -- bundle exec heroku-review-apps-manager list-app