ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-07-13中級

エージェントに API キーを安全に渡す — 実行時の環境変数注入とログ漏洩の遮断

Antigravity のエージェントに秘密情報を渡すとき、実行時の環境変数注入と出力のマスキングで、リポジトリとログの両方から漏洩を遮断する実装をまとめました。

Antigravity326セキュリティ12エージェント59シークレット管理3環境変数2

プレミアム記事

無人ランのログを翌朝に見返していたとき、標準出力の一行が目に留まりました。デプロイ用のトークンが、そのままの形でログファイルに残っていたのです。エージェント自身は何も間違っていません。私が渡し方を間違えていました。

秘密情報の事故は、たいてい「盗まれた」のではなく「うっかり書き残した」ところから起きます。リポジトリにコミットしてしまう。ログに吐き出してしまう。エージェントのコンテキストに紛れ込み、そのまま外部モデルへ送られてしまう。個人開発でアプリを運用している私自身、この一件までは注入の作法を軽く見ていました。以下では、Antigravity のエージェントに鍵を渡すときの漏洩経路を三つに分けて塞ぐ構成を、本番運用でそのまま使っている形のまま整理します。

漏洩はどこで起きるのか

まず経路を分けて考えると、対策の重複と抜けがなくなります。私が実際に踏んだもの、踏みかけたものを表にしました。

漏洩経路典型的な原因この構成での対策
リポジトリ.env をコミット、コード例に実キーを直書きgitignore + 実行時注入
ログ・標準出力エージェントがコマンド結果をそのまま出力マスキングフィルタ
エージェントのコンテキスト鍵を含むファイルを読み込ませ、モデルへ送信読込対象からの除外

三つは別々の対策が要ります。gitignore はログを守りませんし、マスキングはリポジトリを守りません。順に見ていきます。

1. 実行の瞬間だけ注入する起動ラッパー

秘密情報を「ファイルに書いて置いておく」のをやめ、「実行するときだけ環境変数に載せる」方針にします。鍵の保管場所は OS のキーチェーンでも、権限を絞った .secrets.env でも構いません。要点は、エージェントのプロセスにだけ渡し、シェル履歴やリポジトリには残さないことです。

次のラッパーは、gitignore 済みの秘密ファイルを読み、必要なキーだけを export してエージェントを起動します。読み込んだ後すぐにプロセスを差し替えることで、後続のシェルへ意図せず継承されるのを防ぎます。

#!/usr/bin/env bash
# run-agent.sh — 秘密情報を実行時だけ注入してエージェントを起動する
set -euo pipefail
 
SECRETS_FILE="${HOME}/.config/antigravity/.secrets.env"
 
# 権限チェック: 本人だけが読める状態でなければ拒否する
if [ "$(stat -c '%a' "$SECRETS_FILE")" != "600" ]; then
  echo "拒否: $SECRETS_FILE の権限は 600 にしてください" >&2
  exit 1
fi
 
# 必要なキーだけを許可リストで抜き出す(全 env を丸ごと渡さない)
ALLOWED="DEPLOY_TOKEN API_KEY DB_URL"
 
env_args=()
while IFS='=' read -r key value; do
  [[ "$key" =~ ^#.*$ || -z "$key" ]] && continue
  for a in $ALLOWED; do
    if [ "$key" = "$a" ]; then
      env_args+=("$key=$value")
    fi
  done
done < "$SECRETS_FILE"
 
# env で一時的に付与。呼び出し元のシェルには残らない
exec env "${env_args[@]}" antigravity agent run "$@"

肝は許可リスト方式です。秘密ファイルに書かれた全変数を無条件に渡すと、いつの間にか増えた鍵まで一緒に流れます。「このランに必要なキーはこれだけ」と明示することで、注入する情報の範囲を自分の理解の範囲に留められます。私はこの許可リストを、ランの種類ごとに分けて管理することを推奨します。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
秘密情報を平文で残さず、実行の瞬間だけ環境変数として注入する Bash 起動ラッパー
GitHub や Google API の鍵形状を伏せ字にする Node 製マスキングフィルタの実装
pre-commit と pre-run の二段で漏洩を検出するスキャンゲート
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Agents & Manager2026-06-02
Antigravity のエージェント出力からシークレットを漏らさない多層防御 — ログ・差分・PR 本文を守る実装メモ
バックグラウンドエージェントの出力にシークレットが混入する3つの経路と、コミット差分・実行ログ・PR本文を守る多層防御の実装を、6アプリ運用の実体験と具体数値とともにまとめました。
Agents & Manager2026-07-12
Antigravity のエージェントに任せる作業と任せない作業を2週間の運用で見直す
個人開発の日々のタスクを2週間ほど Antigravity のエージェントに任せてみて、任せて正解だったものと手元に残すべきだったものの線引きを、運用ログを添えて振り返ります。
Agents & Manager2026-07-12
書き込みより怖いのは到達先だった — エージェントの外向き通信を許可ホストだけに絞る
エージェントに実作業を委ねるとき、私が一番警戒しているのはファイルの書き換えではなく、どこへ通信するかです。到達先を deny-by-default で絞る小さなゲートの実装と、21晩の無人運用で拾った通信の内訳をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →