AI エージェント時代のシークレット受け渡し: 4 段階の考え方と道具
.env を AI に直接読ませる運用から、起動時注入 → シークレットストアから都度取得 → IAM ロール等による認証へ、と段階を上げていく。X の投稿に出てきた具体的な道具を段階ごとに整理した。
4 段階(@dkfj の整理)
| 段階 | やり方 | 例 |
|---|---|---|
| ① 直読み型 | .env などを AI が直接読む | — |
| ② env 注入型 | 隔離したファイルから起動時に注入 | docker-vals、infisical run |
| ③ Secret Store 型 | 1Password / aws-vault などから都度取得 | 1Password Environments |
| ④ Role 統合型 | IAM Role / STS / OIDC で SDK が裏で認証 | AWS の IAM ロール |
@dkfj の目安: 個人は ②〜③、組織は ③〜④ が現実解。
出典: @dkfj · 2026-05-06
段階ごとの道具
② 起動時に注入する
- docker-vals:
docker compose up時に SSM / Vault / 1Password から値を引いて環境変数で渡す docker-vals: docker compose up だけでシークレットストアの値をコンテナに注入する - Infisical: チームの環境変数を一元管理し、開発 / ステージング / 本番を分離、変更履歴あり。ローカルでは
infisical runで注入。GitHub Actions・Vercel・AWS への同期、基本機能はセルフホスト可。 @commte · 2026-03-14
③ シークレットストアから取得する
- 1Password Environments を
.envとしてマウント: ファイルの実体は名前付きパイプ(ls -lでprw-------と表示される)で、読まれたときにメモリ上で値が渡る。Codex の MCP 設定ではパスを指定するだけで使えた、という報告。 @ken5scal · 2026-05-24 - 1Password Environments で AWS のアクセスキーを扱う CLI を作った記事(DevelopersIO): @azu_re · 2026-04-14
- Cloudflare Secrets Store(Workers 向け): アカウント全体で共有できるシークレット置き場。ダッシュボードで登録し、Worker から実行時に取り出すので、コードやリポジトリに値が現れない。ローカル開発は環境変数で代替。 @KoichiNishizuka · 2026-04-20
ファイルで持つ場合の暗号化
- age: SSH 鍵で暗号化・復号でき、エディタで機密情報を編集しやすい。NixOS のシークレット管理にも使える。 @Comamoca_ · 2026-07-06
追記(2026-10-13): ストアに移しても「取得権限」が残っていれば同じ
- Secrets Manager に API キーを移して安心していたら、Claude Code が使う AWS プロファイルに
secretsmanager:GetSecretValueが残っていて、エージェントから生値が取れた、という @dkfj の実例。③に移したら、エージェントのロールから取得権限を外す(または取得を別の主体に寄せる)ところまでがセット。 @dkfj · 2026-10-13 - 役割分担の整理 AWS: CloudTrail は「記録」、GuardDuty が「判断」、Config が「構成の逸脱」
注意点
- ②でも、注入された環境変数はプロセスから読める。AI エージェントにシェルを渡しているなら、エージェントが
envを実行すれば見えてしまう点は変わらない。 - 出典の各ツールの細かい仕様は公式ドキュメントで確認すること。