テック技報最新号へ →
AIコーディング

Codex: 実行するコマンドに秘密の環境変数を渡さない(shell_environment_policy)

Codex は既定で、シェルの環境変数を実行するコマンドにほぼそのまま渡す。OPENAI_API_KEY のような秘密も同じ。config.toml の [shell_environment_policy] で、渡す範囲を絞る。

@supportapp3_lab · 2026-10-30
#codex#セキュリティ#環境変数#設定

どんな時に使う?

  • .env を読み込んだシェルや、クラウドの認証情報が入ったシェルから Codex を起動している
  • エージェントが走らせるスクリプトや依存パッケージに、秘密を見せたくない

手順

  1. ~/.codex/config.toml(信頼したプロジェクトなら .codex/config.toml でも可)に書く:
    toml
    [shell_environment_policy]
    inherit = "core"                 # 全部ではなく最小限だけ引き継ぐ。"none" なら空から始める
    ignore_default_excludes = false  # 名前に KEY / SECRET / TOKEN を含む変数を自動で外す
    set = { MY_FLAG = "1" }          # 必要な値だけ明示的に足す
    
    [shell_environment_policy.filters]
    "AWS_*" = "exclude"
    "AZURE_*" = "exclude"
    "*PASSWORD*" = "exclude"         # 自動除外では拾えない名前は自分で足す
  2. その場だけ試すなら codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'
  3. 確かめる: Codex に env | sort を実行させ、外したはずの変数が出てこないことを見る

注意点

  • ignore_default_excludes の既定値は true、つまり既定では KEY / SECRET / TOKEN を含む変数も外さない。false にして初めて自動除外が効く
  • 自動除外は名前で判断する。@supportapp3_lab の検証(codex 0.165.0)では、false にすると OPENAI_API_KEY は消えたが DB_PASSWORD は残った。PASSWORD や CREDENTIAL などは filters で自分で外す
  • 適用順は、自動除外 → 自分の exclude → set → include の許可リスト。set で除外済みの変数を戻すことはできるが、include を使うと許可リストに無いものはまた消える
  • 古い exclude / include_only 配列と filters を同じ設定レイヤーで混ぜると、Codex が設定を受け付けない
  • 秘密そのものを環境変数に置かないやり方は Codex: 1Password の MCP で .env を「平文で書かない」形でマウントする と AIエージェントにクレデンシャルを渡す4つの方式と使い分け

出典

X の元の投稿を開く