AIエージェントに秘密を見られないようにする(dotenv並の手軽さで)
AIコーディングエージェント活用に伴い、ローカル開発でのセキュリティ対策について調査していました。
このポストでは、dotenvの様な手軽さを維持しつつ、秘密漏洩リスクを低減するために「Infisical」を使った、ローカル開発での実践的な使い方をご紹介します!
背景
Cursor ComposerやClaude Code、Clineなどのコードエージェントを使う機会が増えてきました。すると、やはり注意が必要なのがセキュリティです。当社ではローカル環境でプロトタイピングを始めることが多く、この段階でもAPIキーをはじめとした秘密情報を安全に管理しなければなりません。
これまでNode.jsでのプロトタイピングでは主にdotenvを使用していました。しかし、コードエージェントを使う場合、「.envなどのセンシティブなファイルへのアクセスを厳密にコントロールしていても、何かの間違いで外部に送られる可能性はゼロではない」ことを考慮すると、やや使いづらいという課題があります。
これを解決する方法を色々試したところ、Infisicaを利用するとdotenv並みの手軽さで安全にシークレットを扱えることがわかりましたので、共有します。
Infisicalとは?
Infisicalはアプリケーションの環境変数や機密情報(シークレット)を安全に保存・共有・管理するためのオープンソースツールです。
- オープンソースであるためセルフホスティングが可能
- CI/CDパイプラインとの統合や自動同期機能を備えている
- アクセス管理や監査ログなどのセキュリティ機能も充実
運用形態として、セルフホスト版とクラウド版が用意されているため、ユーザーのニーズに合わせて柔軟に運用できます。どちらの形態でも秘密鍵はエンドツーエンドで暗号化されるため、運営者ですら実際のシークレットにはアクセスできない仕組みです。
クラウド版は基本的な環境変数管理やシークレット共有の機能が無料で提供されており、小規模プロジェクトや個人利用であれば十分に使えます。ただし、細かいアクセスコントロールなど高度な機能が必要な場合、料金は1ユーザあたり月額18ドルと競合他社に比べてやや高価に感じるかもしれません。
しかし、ローカルでのプロトタイピングでdotenvの代替が目的であれば、クラウド版のFreeプランでも十分に利用が可能です。クラウドのFreeプランではチームメンバーは5人まで。Projectは3つまで。プロジェクト毎に設定できるEnvironmentが3つまで設定できます。
Local開発でのプラクティス
Infisicalのドキュメントには、ローカル開発環境での秘密管理に関する課題が簡潔にまとめられています。
Secret Management in Development Environments
主な課題として挙げられているのは、以下の3点です。
- チームメンバー各自のローカル環境で共通のシークレットを使うこと自体に伴う課題
- 共通のシークレットを使う場合、値の同期が面倒であること
- 誤って秘密鍵を漏らしてしまうリスクがあること
これらを解決する方法として、Infisical CLIとInfisicalのWebダッシュボードを併用する手法が紹介されています。
ダッシュボードのセットアップ
-
アカウント作成
「Sign Up」からアカウントをいい感じに作成します。 -
エマージェンシーキットのダウンロード
リカバリー用の情報が記載されたPDFがダウンロードされます。安全な場所に保管しましょう。
-
プロジェクトの設定
シークレットはプロジェクト単位で管理します。最初にプロジェクトを作成してください。
-
シークレットの設定
プロジェクト内に保存する秘密情報を登録します。
CLIのセットアップ
-
CLIのインストール
Macの場合はHomebrewなどでインストールできます。brew install infisical/get-cli/infisical
-
CLIへのログイン
ターミナルからログインします。ご利用の環境によりTokenをコピペしてログインする方法と、リダイレクトでログインする方法のいずれかでログインできます。infisical login
-
イニシャライズ(初回のみ)
プロジェクトのコードベースのディレクトリに移動してinfisical init
などのコマンドを実行します。すると.infisical.json
という設定ファイルが作成されます。このファイルにはシークレット自体は含まれず、チーム共通の設定が保存されるため、Git管理に含めても問題ありません。
なお、すでに.infisical.json
が存在している場合、他のメンバーは改めてイニシャライズする必要はありません。infisical init
表示に応じて、このコードベースで利用するInfisicalのプロジェクトの選択します。
-
infisical run コマンドの利用
infisical run
を使用してアプリケーションを起動すると、環境変数としてシークレットが自動的に注入され、ローカル開発が可能になります。
次は、ts-node
でsrc/index.ts
を実行する場合のサンプルです。infisical run --env=dev -- npx ts-node src/index.ts
Personal Overrides
チーム全員で共通のシークレットを使いつつ、一部の変数だけは個人用の値を上書きしたい場合にはPersonal Overridesを利用します。たとえば、以下のようにCLIで設定できます。
infisical secrets set TEST_SECRET="custom secret" --env=dev --type=personal
これにより、同じプロジェクトで管理されているシークレットTEST_SECRET
が、特定ユーザーのローカル環境に限っては異なる値に上書きされます。
まとめ
Infisicalを使えば、dotenvのような手軽さを保ちながら、AIコーディングエージェントによるシークレットの誤送信リスクを低減することができます。
チームでの値の同期や個人用の上書きなど、開発プロセスで必要となるセキュアなワークフローを比較的簡単に導入できるのは魅力です。今後、コードエージェントを活用したプロトタイピングがさらに盛んになる中で、セキュリティ対策のひとつとして、皆様の参考になりましたら幸いです。
Discussion