最近GitHub PAT(Personal Access Token)の流出による不正アクセスを目にすることが多い。 サプライチェーン攻撃の手口の巧妙化や、生成AI関連ツール活用が進むことで意図せず秘匿情報を流出させてしまう機会も増えている。
開発を行う上で、API Tokenを平文で.envに定義していることも少なくない。ローカル環境で使用する秘匿情報をなるべく安全に管理する方法がないかを模索していたところ、1Passwordを使って実現できたので、まとめておくことにする。
1Passwordで管理している秘匿情報を実行時に環境変数として直接注入するための機能が、以下の3通りの方法で提供されている。
op runコマンドを使って、上記の2通りの読み込み方を組み合わせる方法.envファイルと共存する形で管理できる参考: https://developer.1password.com/docs/cli/secrets-environment-variables/#choose-your-configuration
このドキュメントでは、Hybrid approach(1Password Environmentsと.envの組み合わせ)を前提にする。
1Passwordアプリのインストールとアカウントの作成が完了していることを前提とする。 ここまでが完了していない場合は、こちらを参照して準備をしておく。
特定の環境(Environment)画面を開き、.envに定義してある環境変数を登録する。
※ Macでのセットアップを前提とする
参照: https://developer.1password.com/docs/cli/get-started/
1Password Environments (beta)機能を使うので、beta版をインストールする。
brew install --cask 1password-cli@beta
op --version
適当なコマンドを実行して、認証を通す。
op vault list
ダイアログが表示されるので、許可する。
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_KEYとHEROKU_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 --コマンドをプログラムの実行コマンドに指定する。
--environmentフラッグで参照先の「環境(Environment)」を指定--env-fileフラッグで一緒に読み込む.envファイルを指定このコマンドで1Passwordの秘匿情報を読み込んだ場合、標準出力/標準エラーに環境変数が出力されると、デフォルトでマスクされる。
以下は、heroku-review-apps-manager list-appコマンドで、op run --コマンドを使用した例。
op run --environment 環境ID --env-file="./.env" -- bundle exec heroku-review-apps-manager list-app